【React Native】极光推送 jpush-react-native 的实现,支持Android和iOS
在接到需求后对如何实现进行了预研,发现有极光官网维护的 和 React Native 中文网维护的 供我们使用,我选择的是 jpush-react-native。
一,相关版本信息
{
"name": "app",
"version": "0.0.1",
"private": true,
"scripts": {
"configureJPush": "node node_modules/jpush-react-native/JPushConfiguration.js",
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.3.1",
"react-native": "0.54.4",
"react-navigation": "^1.0.0-beta.19",
"jpush-react-native": "^2.1.7",
……
},
"devDependencies": {
……
},
"jest": {
……
}
}
二、添加极光组件
运行命令:yarn add jpush-react-native 或 npm install jpush-react-native --save
并链接原生库:react-native link jpush-react-native
三、iOS端手动配置
3.1 打开 iOS 工程,会发现RCTJPushModule.xcodeproj 工程会自动添加到 Libraries 目录里面
在 iOS 工程 target 的 Build Phases->Link Binary with Libraries 中加入如下库
libz.tbd
CoreTelephony.framework
Security.framework
CFNetwork.framework
CoreFoundation.framework
SystemConfiguration.framework
Foundation.framework
UIKit.framework
UserNotifications.framework
libresolv.tbd
3.2 在 iOS 工程中设置 TARGETS-> BUILD Phases -> LinkBinary with Libraries 找到 UserNotifications.framework 把 status 设为 optional
3.3 在 iOS 工程中如果找不到头文件可能要在 TARGETS-> BUILD SETTINGS -> Search Paths -> Header Search Paths 添加如下路径 $(SRCROOT)/../node_modules/jpush-react-native/ios/RCTJPushModule
3.4 在 xcode8 之后需要点开推送选项: TARGETS -> Capabilities -> Push Notification 设为 on 状态
3.5 在 AppDelegate.h 文件中 填写如下代码,这里的的 appkey、channel、和 isProduction 填写自己的
static NSString *appKey = @""; //填写appkey
static NSString *channel = @""; //填写channel 一般为nil
static BOOL isProduction = false; //填写isProdurion 平时测试时为false ,生产时填写true
3.6 在AppDelegate.m 的didFinishLaunchingWithOptions 方法里面添加如下代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
//可以添加自定义categories
[JPUSHService registerForRemoteNotificationTypes: (UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert) categories:nil];
} else {
//iOS 8以前 categories 必须为nil
[JPUSHService registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge|UIRemoteNotif