ReactNative jPush集成的坑

2018-06-19  本文已影响31人  SunnyEver0

ReactNative jPush集成的坑

最近项目需要适配小米、华为、魅族三方的推送,在集成的时候遇到了很多坑,目前将曾经遇到的坑整理一下,今后方便其它同学们集成。在集成之前应该仔细阅读jPush官方文档,特别是API的相关变更,建议抽一个jPushHelper中间层以适应jPush接口的变化。

小米推送相关信息.jpg
     if( getIntent().getData()) {
         String pushInfo = getIntent().getData().toString();
     }

2.消息体如果回传给JS端
获取reactContext,并调用emit方法监听回调给JS端,

    public static void sendEvent(ReactContext reactContext, String eventName, WritableMap params) {
        // eventName:监听事件名称 params:回调参数(推荐使用WritableMap)
        ReactContext reactContext = getReactInstanceManager().getCurrentReactContext();
        reactContext
                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit(eventName, params);
    }
    

3.消息体如果回传时报错
当emit时,发现应用一直闪退,打印日志开出,此时的reactContext为null,需要等待reactContext初始完毕后,方可发送监听回调。所以需要暴露一个ReactMethod给JS端,当这个方法执行时,发送广播给MainActivity再执行推送点击的回调。

       /**
         * 当RN端加载完毕发送广播通知原声端
         *
         */
        @ReactMethod
        public void loadingFinished() {
            Log.e(TAG,"广播发送成功");
            Intent intent = new Intent();
            intent.setAction("com.loadingFinished");      //设置Action
            intent.putExtra("msg", "接收动态注册广播成功!");      //添加附加信息
            context.sendBroadcast(intent);
        }

MainActivity部分代码:

        private BroadcastReceiver myReceiver = new BroadcastReceiver() {
    
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals("com.loadingFinished") && pushInfoString != null) {    //动作检测
                    WritableMap map = Arguments.createMap();
                    map.putString("extras", getPushExtraString(pushInfoString));
                    sendPushInfoToJs(map);
                }
    
            }
        };
上一篇 下一篇

猜你喜欢

热点阅读