React-Native极光推送全程教程android和ios
坑爹的坑,终于把极光推送的全套跑通了,Android和iOS平台全部测试成功!下面就目前遇到的问题做详细的说明,希望能给大家引上正确的道路。http://blog.****.net/liu__520/article/details/53133441
此处我用的是jpush-react-native,这个是极光官网维护的,还有一个是react-antive-jpush,这是中文网的,我这里没用这个
上一篇讲了如何申请ios的开发和生产证书的流程,http://blog.****.net/liu__520/article/details/53133497
先按照官网的步骤来呗:(为了了解具体的过程,我都是用手动配置的,没有用自动配置)
一、手动配置
1.1、进入你的项目目录,然后打开命令终端输入:
1.2、android版的具体配置:
使用 android Studio import 你的 React Native 应用(选择你的 react Native 应用所在目录下的 android 文件夹即可)
修改 android 项目下的 settings.gradle 配置:
打开setting.gradle,然后添加如下代码:
include ':app', ':jpush-react-native'
project(':jpush-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jpush-react-native/android')
修改app 下的 AndroidManifest 配置,将 jpush 相关的配置复制到这个文件中,参考 demo 的 AndroidManifest:(增加了 部分)
你的 React Native project/android/app/AndroidManifest.xml
android:name=".MainApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
android:name=".MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:label="@string/app_name">
修改 app 下的 build.gradle 配置:
your react native project/android/app/build.gradle
android { defaultConfig { applicationId "yourApplicationId" ...manifestPlaceholders = [
JPUSH_APPKEY: "yourAppKey", //在此替换你的APPKey
APP_CHANNEL: "developer-default" //应用渠道号,默认就好
]}}...dependencies { compile fileTree(dir: "libs", include: ["*.jar"])compile project(':jpush-react-native')compile "com.facebook.react:react-native:+" // From node_modules}
将此处的 yourApplicationId 替换为你的项目的包名;yourAppKey 替换成你在官网上申请的应用的 AppKey。到此为止,配置完成。
现在重新 sync 一下项目,应该能看到 jpush-react-native 作为一个 android Library 项目导进来了
打开 app 下的 MainActivity,在 ReactInstanceManager 的 build 方法中加入 JPushPackage:
app/MainActivity.Java
打开 app 下的 MainApplication.java 文件,然后加入 JPushPackage,参考 demo:
1.3、ios配置
ios Usage
打开 iOS 工程,在 rnpm link 之后,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
在 AppDelegate.h 文件中 填写如下代码,这里的的 appkey、channel、和 isProduction 填写自己的
1.3.1、下面直接放我的代码图吧,上面的代码都是官网的,但是有几个地方是需要修改的,也是需要增加的,要不然各种报错,:
1.3.2、还有一个最重要的,把github上极光的代码都放到你的这个AppDelegate.m文件中,然后加一个接口
@interfaceAppDelegate();
而且用官网的代码会提示下面的警告信息:
/Users/vittorio/Desktop/log/ios/log/AppDelegate.m:39:55: 'UIRemoteNotificationTypeBadge' is deprecated:
first deprecated in iOS 8.0 - Use UserNotifications Framework's UNAuthorizationOptions for user notifications
and registerForRemoteNotifications for receiving remote notifications instead.
需要把代码里面的UIRemoteNotificationType改成:UNAuthorizationOption
具体看我以下的代码:
1.3.3、然后需要选择描述配置的东西吧:
具体看下面的两张图:
1.3.4、打开项目---capacities---打开push notifications,
1.3.5、打开项目--build settings---signing---code signing identify,都改成 ios developer,
1.3.6、然后把tests的signing也要改一下,要不然安装到真机上会报错的:
到此为止,配置基本就完成了,
2、下面我们在RN上进行操作了:
打开js文件我的是在主页上进行的,
具体的代码如下:
上面的android的推送内容都在message.content里面,附加的数据在message.extras,
message就是发送过来的消息内容:addReceiveNotificationListener
如果你没有附加的消息,只是显示消息内容,用这个方法就行了:addReceiveCustomMsgListener
如果你要点击通知打开某个应用,用:addReceiveOpenNotificationListener
ios的要用到注册监听事件:
NativeAppEventEmitter.addListener
消息内容都在message里面,可以看下我的示例,结合我极光推送的附加字段:就会明白的//我这里是把内容存在了数据库里面,
你可以把这里的message
放到state里面显示出来
3、最后给大家看下我的极光推送的内容吧: