ReactNative jPush集成的坑

ReactNative jPush集成的坑

最近項目需要適配小米、華為、魅族三方的推送,在集成的時候遇到了很多坑,目前將曾經遇到的坑整理一下,今后方便其它同學們集成。在集成之前應該仔細閱讀jPush官方文檔,特別是API的相關變更,建議抽一個jPushHelper中間層以適應jPush接口的變化。

  • 確保推送的配置(AppID,AppKey,AppSecret)正確
    登錄三個平臺相應的開發者網站獲取這三個配置的信息。一般就放在管理控制臺中,然后選擇推送服務,里面會有相應的推送信息,這三個應用配置很重要,如果配置出錯,極光后臺的日志會打印顯示REGISTER FAILED
小米推送相關信息.jpg
  • 確保jPush插件所帶的jPush庫與build.gradle中引入的推送庫版本號一致。不一致有可能會導致收不到推送。
  • 華為集成的坑
    在集成華為推送后,華為上就會優先走華為的推送渠道。根據文檔我們需要自己處理推送的消息體,傳回給JS層。在這個時候遇到了很多問題。
    1.如果獲取消息體
    只需在onCreate中取出保存在intent中的消息體,并處理成自己想要的格式。
     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);
                }
    
            }
        };
  • 其它的坑
    1.部分華為手機需要開啟自啟動權限才能在后臺推送成功(華為系統做了限制,如果不是受信任的信用,不會再后臺開啟相應應用)有些系統較老的即使開啟也不能在后臺收到推送,好坑。。。
    2.魅族推送有時會有一定延遲,大概相隔3-5min才會收到推送(雖說事件不長,但要調試的時候要等一會就挺煩心的= =)
    3.調用jPushModulesetAlias之前需確保推送當前是開啟的,假如推送關閉會報errorCode:6012(在JPush服務stop狀態下設置了tag或alias或手機號碼 )
    4.在3的基礎下,假如第一次想清除之前App的alias,則需要確保新的alias注冊成功后才能調用stop push
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容