react-native 极光推送(jpush-react-native)

摘要:
yourreactnativeproject/android/app/build.gradle1234567...dependencies{compilefileTreecompileproject//添加jpush依赖compileproject//添加jcore依赖compile"com.facebook.react:react-native:+"//Fromnode_modules}检查android项目下的settings.gradle配置有没有包含以下内容:settings.gradle123include':app',':jpush-react-native',':jcore-react-native'project.projectDir=newFileproject.projectDir=newFile检查一下app下的AndroidManifest配置,有没有增加部分。

极光推送官方支持的 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 =newFile(rootProject.projectDir,'../node_modules/jpush-react-native/android')
project(':jcore-react-native').projectDir =newFile(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 cangetstatistics 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
privateboolean SHUTDOWN_TOAST =false;
privateboolean SHUTDOWN_LOG =false;
privatefinal ReactNativeHost mReactNativeHost =newReactNativeHost(this) {
@Override
protectedboolean getUseDeveloperSupport() {
returnBuildConfig.DEBUG;
}
@Override
protectedList<ReactPackage> getPackages() {
returnArrays.<ReactPackage>asList(
newMainReactPackage(),
//加入 JPushPackage
newJPushPackage(SHUTDOWN_TOAST, SHUTDOWN_LOG)
);

上面 JPushPackage 的两个参数是 bool 类型的,第一个参数设置为 true 表示关闭 toast 提示,第二个设置为 true 表示关闭日志打印,建议在 debug 版本中打开。然后在 MainActivity 中加入一些初始化代码即可:

app/src.../MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
publicclassMainActivity extends ReactActivity {
...
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
JPushInterface.init(this);
}
@Override
protectedvoidonPause() {
super.onPause();
JPushInterface.onPause(this);
}
@Override
protectedvoidonResume() {
super.onResume();
JPushInterface.onResume(this);
}
}
收到推送

添加了此事件后,在收到推送时将会触发此事件。

需要注意的是,v1.6.6 版本以后,增加了notifyJSDidLoad方法,在监听所有相关事件之前要调用此方法,否则不会收到点击通知事件

example/react-native-android/push_activity.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
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);
});
}
点击通知

在用户点击通知后,将会触发此事件。

1
2
3
4
5
6
7
...
componentDidMount() {
JPushModule.addReceiveOpenNotificationListener((map) => {
console.log("Opening notification!");
console.log("map.extra: "+ map.key);
});
}
得到 REGISTRATIONID

用户注册成功后(一般在用户启动应用后),如果订阅了这个事件,将会收到这个 registrationId。

1
2
3
4
5
6
...
componentDidMount() {
JPushModule.addGetRegistrationIdListener((registrationId) => {
console.log("Device register succeed, registrationId "+ registrationId);
});
}
清除所有通知

建议在用户退出前台后调用。

1
2
3
4
5
...
componentWillUnmount() {
console.log("Will clear all notifications");
JPushModule.clearAllNotifications();
}
设置标签

example/react-native-android/set_activity.js

1
2
3
4
5
6
7
8
9
10
11
12
13
...
setTag() {
if(this.state.tag !== undefined) {
/*
* 请注意这个接口要传一个数组过去,这里只是个简单的示范
*/
JPushModule.setTags(["VIP","NOTVIP"], () => {
console.log("Set tag succeed");
}, () => {
console.log("Set tag failed");
});
}
}
设置别名
1
2
3
4
5
6
7
8
9
10
...
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)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇html表格宽度设置失效自然语言处理中的分词问题总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

react项目中引用amap

在调用amap的Geocoder Api 时,一直不能从AMap对象下找到Geocoder 。 结果在网上看到一个博客说的是,在index中引入链接时,需要在链接上配置plugin=AMap.Geocoder, 才能够在AMap调用Geocoder Api <script type="text/javascript" src="https://web...

IOS 极光推送(第三方框架)

下载极光推送文件,将以下两个文件导入项目中 APService.h libpushSDK.a #import "HMAppDelegate.h" #import "APService.h" @implementation HMAppDelegate - (BOOL)application:(UIApplication *)application didF...

最全前端资源汇集(引)

综合类地址 前端知识体系http://www.cnblogs.com/sb1987... 前端知识结构https://github.com/JacksonTia... Web前端开发大系概览https://github.com/unruledboy... Web前端开发大系概览-中文版http://www.cnblogs.com/unrule... Web...

从零开始配置TypeScript + React + React-Router + Redux + Webpack开发环境

转载请注明出处! 说在前面的话: 1、为什么不使用现成的脚手架?脚手架配置的东西太多太重了,一股脑全塞给你,我只想先用一些我能懂的库和插件,然后慢慢的添加其他的。而且自己从零开始配置也能学到更多的东西不是么。 2、教程只配置了开发环境,并没有配置生产环境。 3、教程针对人群是有过React + Redux经验,并且想在新项目中使用TypeScript的人(...

Aurora 极光 A21超算将会使用SPR CPU和Ponte Vecchio GPU

Aurora极光 A21 超算 Aurora是Intel 和Cray为能源部下面的阿公国家实验室建造的e级别的超算集群。预计2021年建成,2022年交付。A21后面的21就代表2021年。之前预计是使用Intel Phi处理器实现,但是因为2019年Intel放弃Phi处理器的进一步的开发。而产生计划的变更,变更后,预计的计算能力是1.3EFLOPs。...

react 使用react-app-rewired后启动不了

使用了 "scripts": { "start": "react-app-rewired start", "build": "react-app-rewired build", "test": "react-app-rewired test", "eject": "react-app-rewired eject"...