React Native 使用gcm push notifications
近来公司项目需要用到gcm推送,话不多说,国内要使用gcm推送必须具备如下条件
1、设备支持谷歌服务
2、设备需科学上网
React Native 使用gcm推送有一个比较好的多平台推送服务OneSignal ,个人感觉很适合RN,
以下内容将介绍如何使用OneSignal来进行推送。
1、首先进入OneSignal 控制台,进入后点击Add a new app,如果不是登录状态会提示你登录,
我使用的是Google账号登录。登录后Add a new app如下:
2、接下来是选择推送平台,我选择的是GCM
3、接下来是配置推送平台,这个地方需要配置Google Server API Key 和Google Project Number,
如何生成Google Server API Key呢?点开Generate a Google server API Key下方的Read the documentation
4、进入后我们看到它要我们进入Firebase Console
5、进入后点击"免费开始使用"
6、在新跳转的页面点击“CREATE NEW PROJECT”
7、创建Firebase 工程
为了和之前在OneSignal控制台中添加的app名称SignalTestFourth对应,我创建了一个名为OneSignalFourth的工程,点击CREATE PROJECT。
8、获取Google server API Key和Google Project Number
Firebase 工程创建完成之后,它会给我们分配Server key 和 Sender ID,那么怎么找到呢?
如图所示,点击完Project settings 后再选择CLOUD MESSAGING ,这样就可以看到我们的Server key 和 Sender ID
这里的Server key就是我们之前第3步在OneSignal 控制台配置GCM需要的Google server API Key,
Sender ID就是Google Project Number,把这些粘贴过去就行啦
粘贴后点击"save",这样我们的SignalTestFourth就和具有gcm服务的一个名为OneSignalFourth的FireBase工程紧紧联系在了一起
然后选择使用React Native SDK
点击next 之后提示我们安装SDK,并且给了我们一个超链接,这是干嘛用的呢?其实就是让我们的React Native 应用使用官方的
第三方组件react-native-onesignal,到这一步,OneSignal控制台的操作就告一段落,接下来就要转移战场,看看如何使用react-native-onesignal,
这里Done发现不能点击,不过没有关系,大胆的直接关闭此窗口就行了。
集成官方组件react-native-onesignal
这个链接里有RN集成react-native-onesignal的具体说明,具体步骤我就不再赘述,我只在此处列出一些本人觉得需要注意的地方
1、配置android/gradle/wrapper/gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip
要注意distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip必须是2.10版本
2、配置android/build.gradle
dependencies { classpath 'com.android.tools.build:gradle:2.1.0' // Upgrade gradle // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }
要注意classpath 'com.android.tools.build:gradle:2.1.0'必须是2.1.0版本
3、配置android/app/build.gradle
android { ... buildToolsVersion "23.0.2" // NOT REQUIRED BUT RECOMMENDED - This is good for in-process dex (faster) ... defaultConfig { ... manifestPlaceholders = [manifestApplicationId: "${applicationId}", onesignal_app_id: "YOUR_ONESIGNAL_ID", onesignal_google_project_number: "YOUR_GOOGLE_PROJECT_NUMBER"] } } dependencies { ... compile project(':react-native-onesignal') }
注意这里的onesignal_app_id和onesignal_google_project_number,我估计有人不知道
进入OneSignal控制台,按照如下步骤就可找到onesignal_app_id,
而onesignal_google_project_number就是之前提到过的senderID,进入FireBase控制台就可找到,如图
需要注意的地方就这些。
集成成功
当你的RN 应用集成react-native-onesignal成功之后,安装到设备当中,OneSignal控制台就可以看到OneSignal使用状态,
如图我这里有6台设备安装了此应用,注意只有在Subscribed栏目为yes的情况下,推送才可以成功。
另外在这里提供一些Subscribed为no的情况下的解决方法
1、当为No Push Token时,这里的意思是没有拿到注册ID,因为注册ID是谷歌服务返回过来的,所以检查一下设备是否科学上网
2、当为Outdated Google Play Services App ,这里的意思是谷歌服务过时了,为什么会出现这种情况?因为这有个要素是
“设备上的谷歌服务版本必须要和应用的谷歌服务版本相同或者更高”,所以需要设备升级Google play Service 包,所以科学上网去google官网下载吧
就简单介绍到这里