由于我們都會遇到推送通知服務,而看到網上教程多半都是極光的,并且口碑都不錯,所以我也使用極光的把。
整合極光推送也耗費了不少時間,問題不斷,多虧極光官網的工作人員大力支持(郵件+QQ群),順利的調試通了極光推送,感謝!
這是極光推送的RN官方開發者群,遇到問題找群主,妥妥的,qq群:553406342
寫在前面,注意事項:
1、安卓和IOS的配置不一樣
2、IOS推送機制與安卓不一樣,安卓是直接連接極光推送服務器,而IOS則是需要通過蘋果的ANPS下發到設備
所以,安卓可以通過模擬器進行調試,而蘋果,必須要使用真機調試!!!!
準備事項:
1、注冊極光推送官網賬戶,創建推送應用 獲取appKey
2、(IOS)注冊蘋果development賬戶
安卓篇
安卓的安裝配置稍微簡單些,我推薦KenChoi的教程,鏈接:http://www.lxweimin.com/p/6721a0360af9
手動配置主要注意幾個點,當然自動配置也最好檢查一下,我遇到過重復代碼的問題
1、build.gradle需要添加jpush和jcore的依賴
2、settings.gradle需要include jpush-react-native和jcroe-react-native
3、AndroidManifest需要增加 meta-data
4、在?MainApplication.java 中注冊JPushPackage類
5、MainActivity 加入監聽事件onCreate、onPause、onResume
然后就可以通過import JPushModule from 'jpush-react-native'; 來使用jpush的方法了
值得注意的是:
JPushModule.initPush(); // 注冊監聽,在注冊props時就需要
安卓下需要在componentDidMount中監聽前加入以下代碼才能獲取推送(網上是這么說的,我沒試過刪除是否能收到,反正加了是能收到)
JPushModule.notifyJSDidLoad((resultCode) => {
????if (resultCode === 0) {
????}
});
監聽方法新版的Jpush 安卓和IOS都一致了(在?componentDidMount?中?notifyJSDidLoad?之后)
JPushModule.addReceiveNotificationListener((message) => { // 收到通知時觸發
? ? ? ? console.log(message);
});
JPushModule.addReceiveOpenNotificationListener((message) => { // 點擊托盤通知進入APP觸發
????????console.log(message);
});
然后在?componentWillUnmount 中移除監聽
JPushModule.removeReceiveCustomMsgListener();
JPushModule.removeReceiveNotificationListener();
安卓推送就OK了,一次性搞定
IOS篇
IOS非常麻煩,首先,你需要在development開發者中心中的 Certificates, Identifiers & Profiles 中
1、注冊 iOS Certificates 證書
如圖,我已經創建了證書,需要創建的證書有4個,一個APNS開發者證書,一個APNS生產環境證書,一個IOS開發者證書,一個IOS生產環境證書。
關于如何創建證書,請移步:http://www.lxweimin.com/p/01224fc523d4
2、注冊APP應用,Identifiers
在Xcode的target下的General中的Signing中選擇你的team,team也就是你的蘋果開發者帳號,選擇后點擊development官網上的App Ids新增一個即可,上面的鏈接有資料
3、注冊真機調試設備,Devices
用蘋果手機連接mac,然后在itunes中點擊手機圖標,在手機信息中,點擊序列號,會變成UDID,然后在development官網上的Devices中新增一個設備,輸入名稱和UDID注冊即可
4、注冊Provisioning Profile
注冊方式跟前面差不多
這個需要注冊開發者和生產環境的profile,否則XCode選擇Signing 和push notifications時會出現紅色感嘆號
(請注意)上面的注冊完畢后,下載APNS對應的證書,然后添加到mac鑰匙串中(雙擊導入),然后右鍵對應的證書,點導出,然后需要輸入加密的密碼,你自己隨便填,然后導出.p12的文件,其中需要注意的是, 請命名好各自對應的證書,開發環境和生產環境不一樣,
而這兩個證書是需要上傳到極光推送應用配置中的IOS配置中的,會根據證書自動生成bundle ID,所以需要特別注意
做好這些工作后,就是安裝JPUSH了
與安卓不太一樣的就是
npm i -g jpush-react-native --save
yarn add jpush-react-native
npm i -g jcore-react-native --save
yarn add jcore-react-native
我試過使用
npm run configureJPush **** appname
自動配置,但是報錯提示安卓文件找不到,我MAC下并未配置安卓環境
但是代碼卻是修改了,這是最省力的,所以這一步是需要執行
然后運行
react-native link
將library加入到xcode工程中
Libraries就多了 RCTJCoreModule.xcodeproj 和?RCTJPushModule.xcodeproj
然后選擇 APP的target 點擊?Capabilities?項,將?Push Notifications 從off改為On,之前的證書OK的話,這里就是2個勾了,如果證書不OK,那請重新配置證書,將 Background Modes 從Off改為On,只勾選 Remote notifications
然后點擊?build Settings?項。將 Code Signing Identity 和它的子項全改為 iOS Developer
然后點擊?Build Phases ,展開Link Binary With Libraries ,找到UserNotifications.framework?改為 Optional
然后在Xcode左側打開 AppDelegate.h ,在UIKit后加入
#import <UIKit/UIKit.h>
//
static?NSString?*appKey=@"你的Appkey";
static?NSString?*channel=@"nil";
static?BOOL?isProduction=true;?//生產環境false?正式true
注意,由于IOS9以上禁止訪問HTTP,要求API必須請求HTTPS,所以包括極光我們需要增加策略
在info.plist的 App Transport Security Settings 下增加 Allow Arbitrary Loads = YES
在Exception Domains 下(react native init時就會創建并加入localhost訪問http的策略)增加
jpush.cn = Dictionary
然后在jpush.cn下增加?
NSExceptionAllowsInsecureHTTPLoads=YES
NSIncludesSubdomains=YES
即可完成安全策略的配置,如圖
!!!!!!注意,由于不支持HTTP,所以如果你的API是通過HTTP訪問的話,你需要創建一個跟jpush.cn配置一樣的你的域名在Exception Domains下面,否則會出現network failed錯誤!具體用頂級域名就好,多個請求域名要配置多個域名配置,馬賽克部分就是我的域名,只要配置頂級域名就可支持子域名了。
然后build一下Xcode,至此,極光IOS配置完成,很簡單的但是由于不熟悉,所以走了很多彎路
然后,在IOS下必須要注冊監聽,否則無法正常監聽推送
根據群主的建議,我在index.js 中加入了
import?JPushModule?from?'jpush-react-native';
JPushModule.addnetworkDidLoginListener(()?=>?{
});
然后在component中操作和安卓一樣,在componentDidMount中監聽
JPushModule.addReceiveNotificationListener((message) => { // 收到通知時觸發
console.log(message);
});
JPushModule.addReceiveOpenNotificationListener((message) => { // 點擊托盤通知進入APP觸發
console.log(message);
});
然后在componentWillUnmount中移除監聽
JPushModule.removeReceiveCustomMsgListener();
JPushModule.removeReceiveNotificationListener();
然后上真機調試,OK,正常收到推送,至此極光推送配置完成,感謝群主HuminiOS的支持