【React Native】极光推送 jpush-react-native 的实现,支持Android和iOS

【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