react-native 极光推送(jpush-react-native)
极光推送官方支持的 React Native 插件
安装
npm install jpush-react-native --save
npm install jcore-react-native --save ## jpush-react-native 1.4.2 版本以后需要同时安装 jcore-react-native
一、自动配置部分(以下命令均在你的 REACT NATIVE PROJECT 目录下运行,自动配置后仍需手动配置一部分)
1.1执行脚本
npm run configureJPush <yourAppKey> <yourModuleName>
//module name 指的是你 Android 项目中的模块名字(对 iOS 没有影响,不填写的话默认值为 app,会影响到查找 AndroidManifest 问题,
//如果没找到 AndroidManifest,则需要手动修改,参考下面的 AndroidManifest 配置相关说明)
//举个例子:
npm run configureJPush d4ee2375846bc30fa51334f5 app
1.2Link 项目
//执行自动配置脚本后再执行 link 操作
react-native link
二、手动操作部分 (3个步骤)
2.1
第一步:修改 app 下的 build.gradle 配置:
your react native project/android/app/build.gradle
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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') // 添加 jpush 依赖 compile project(':jcore-react-native') // 添加 jcore 依赖 compile "com.facebook.react:react-native:+" // From node_modules} |
将此处的 yourApplicationId 替换为你的项目的包名;yourAppKey 替换成你在官网上申请的应用的 AppKey。
2.2
检查是否导入以下配置项:
检查一下 dependencies 中有没有添加 jpush-react-native 及 jcore-react-native 这两个依赖。
your react native project/android/app/build.gradle
|
1
2
3
4
5
6
7
|
...dependencies { compile fileTree(dir: "libs", include: ["*.jar"]) compile project(':jpush-react-native') // 添加 jpush 依赖 compile project(':jcore-react-native') // 添加 jcore 依赖 compile "com.facebook.react:react-native:+" // From node_modules} |
检查 android 项目下的 settings.gradle 配置有没有包含以下内容:
settings.gradle
|
1
2
3
|
include ':app', ':jpush-react-native', ':jcore-react-native'project(':jpush-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jpush-react-native/android')project(':jcore-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jcore-react-native/android') |
检查一下 app 下的 AndroidManifest 配置,有没有增加 <meta-data> 部分。
your react native project/android/app/AndroidManifest.xml
|
1
2
3
4
5
6
7
|
<application ... <!-- Required . Enable it you can get statistics data with channel --> <meta-data android:name="JPUSH_CHANNEL" android:value="${APP_CHANNEL}"/> <meta-data android:name="JPUSH_APPKEY" android:value="${JPUSH_APPKEY}"/> </application> |
2.3:加入 JPushPackage (找到 app 下的 MainApplication.java):
app/src.../MainApplication.java
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
private boolean SHUTDOWN_TOAST = false; private boolean SHUTDOWN_LOG = false; private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override protected boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), //加入 JPushPackage new JPushPackage(SHUTDOWN_TOAST, SHUTDOWN_LOG) ); |
上面 JPushPackage 的两个参数是 bool 类型的,第一个参数设置为 true 表示关闭 toast 提示,第二个设置为 true 表示关闭日志打印,建议在 debug 版本中打开。然后在 MainActivity 中加入一些初始化代码即可:
app/src.../MainActivity.java
1234567891011121314151617181920publicclassMainActivity extends ReactActivity {...@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);JPushInterface.init(this);}@OverrideprotectedvoidonPause() {super.onPause();JPushInterface.onPause(this);}@OverrideprotectedvoidonResume() {super.onResume();JPushInterface.onResume(this);}}
收到推送
添加了此事件后,在收到推送时将会触发此事件。
需要注意的是,v1.6.6 版本以后,增加了 notifyJSDidLoad 方法,在监听所有相关事件之前要调用此方法,否则不会收到点击通知事件。
example/react-native-android/push_activity.js
1234567891011121314151617...import JPushModulefrom'jpush-react-native';...exportdefaultclassPushActivity extends React.Component {componentDidMount() {// 在收到点击事件之前调用此接口JPushModule.notifyJSDidLoad((resultCode) => {if(resultCode === 0) {}});JPushModule.addReceiveNotificationListener((map) => {console.log("alertContent: "+ map.alertContent);console.log("extras: "+ map.extras);// var extra = JSON.parse(map.extras);// console.log(extra.key + ": " + extra.value);});}
点击通知
在用户点击通知后,将会触发此事件。
1234567...componentDidMount() {JPushModule.addReceiveOpenNotificationListener((map) => {console.log("Opening notification!");console.log("map.extra: "+ map.key);});}
得到 REGISTRATIONID
用户注册成功后(一般在用户启动应用后),如果订阅了这个事件,将会收到这个 registrationId。
123456...componentDidMount() {JPushModule.addGetRegistrationIdListener((registrationId) => {console.log("Device register succeed, registrationId "+ registrationId);});}
清除所有通知
建议在用户退出前台后调用。
12345...componentWillUnmount() {console.log("Will clear all notifications");JPushModule.clearAllNotifications();}
设置标签
example/react-native-android/set_activity.js
12345678910111213...setTag() {if(this.state.tag !== undefined) {/** 请注意这个接口要传一个数组过去,这里只是个简单的示范*/JPushModule.setTags(["VIP","NOTVIP"], () => {console.log("Set tag succeed");}, () => {console.log("Set tag failed");});}}
设置别名
12345678910...setAlias() {if(this.state.alias !== undefined) {JPushModule.setAlias(this.state.alias, () => {console.log("Set alias succeed");}, () => {console.log("Set alias failed");});}}
react-native 极光推送(jpush-react-native)的更多相关文章
- 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco
Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...
- 关于极光推送Jpush的demo
关于极光推送Jpush 推送是手机app必不可少的一样功能,这次由于公司项目需要研究了一下.由于推送一般写于服务端,所以对于不会Android的javaweb程序员要写出一个完整的demo是一件很头痛 ...
- 李洪强iOS开发之极光推送JPush
李洪强iOS开发之极光推送JPush
- 极光推送JPush的快速集成
首先到极光推送的官网上创建一个应用,填写对应的应用名和包名. 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置,然后要注意的是.so文件的放置位置: 在main目录下 ...
- 极光推送Jpush(v3)服务端PHP版本的api脚本类
原文地址:http://www.dodobook.net/php/780 关于极光推送的上一篇文章已经说明了,此处就不多说了.使用v3版本的原因是v2使用到2014年年底就停止了.点击查看上一篇的地址 ...
- 极光推送Jpush(v3)服务端PHP版本集成(V3版本只调用推送API)
因为版本升级,极光推送的API也有了V3,功能也更丰富了,但是对于我们有的用户来说,我们还是只需要调用推送的API就够了. 下载了一份PHP服务端的SDK(下载地址:http://docs.jpush ...
- 极光推送 JPush 简介 集成 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 极光推送(JPush)开篇
Date:2019-11-11 读前思考: 极光推送是什么? 极光推送是能做什么?有什么优势? 怎么根据业务需求来实现极光推送服务呢? 简介 极光推送(JPush)是独立的第三方云推送平台,致力于为全 ...
- Ionic5整合极光推送JPush ( 简单 )
项目初始化 1. 安装项目依赖: # 安装cordova插件 ionic cordova plugin add jpush-phonegap-plugin --variable APP_KEY=&qu ...
- 极光推送Jpush功能(具体参照官网说明文档,注意此文红色字体)
1.导入框架 2. //推送 #import "APService.h" - (BOOL)application:(UIApplication *)application didF ...
随机推荐
- PLSQL自动断开服务器连接 (转)
最近,有同事反映在使用PLSQL连接数据库的时候,总是出现数据库频繁自动断开连接.这是因为资源配置文件中IDLE_TIME参数的限制,IDLE_TIME指定会话允许连续不活动的总的时间,以分钟为单位, ...
- error C4996: ‘Json::Reader::Char’: Use CharReader and CharReaderBuilder instead
1.编译下面代码时,遇到标题中的错误 const char* str = "{\"name\":\"xiaoming\",\"age\&qu ...
- linux日志服务之logwatch
因为logwatch默认要使用sendmail服务,所以请参考linux之发送邮件--sendmail服务配置首先设置正确sendmail服务. 安装logwatch. 查看logwatch文件在/e ...
- Django和SQLAlchemy区别
译者注:本文首先介绍了什么是ORM,然后从多个方面对Python语言下的两个ORM库Django和SQLAlchemy进行比较,为ORM的选型提供了较为全面的指导建议.以下是译文. ORM是什么? 在 ...
- poj 2002(好题 链式hash+已知正方形两点求另外两点)
Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 18493 Accepted: 7124 Descript ...
- XXXX公司微课大赛技术储备
XXXX公司微课大赛技术储备 发短信验证 http://www.yunpian.com/ 发邮件 http://sendcloud.sohu.com/ flash头像上传组件 http://www.h ...
- VS2017源代码版本管理
VS2017源代码版本管理有两种方式:Git(代码提交到服务器)和Team Foundation Server(代码提交到局域网) 一.Git版本管理(上传到码云服务器https://gitee.co ...
- 计蒜客 18492.Upside down primes-米勒拉宾判大素数 (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 K)
K. Upside down primes 传送门 这个题就是把大数按字符串输进去,判断一下是不是素数,然后反转180度,先判断反转之后的东西是不是一个数,如果是的话,再把这个数判一下是不是素数,如果 ...
- oracle case else end
--简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' ...
- POJ 1769 Minimizing maximizer(DP+zkw线段树)
[题目链接] http://poj.org/problem?id=1769 [题目大意] 给出一些排序器,能够将区间li到ri进行排序,排序器按一定顺序摆放 问在排序器顺序不变的情况下,一定能够将最大 ...