jpush-React-native是极光推送官方维护的一个插件,github地址:https://github.com/jpush/jpush-react-native

一.手动配置
1.集成插件到项目中
npm install jpush-react-native --save rnpm link jpush-react-native
Android
使用 android Studio import 你的 react Native 应用(选择你的 React Native 应用所在目录下的 android 文件夹即可)
修改 android 项目下的 settings.gradle 配置: settings.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:(增加了 部分)
your react native project/android/app/AndroidManifest.xml
<application
android:name=".MainApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
<!-- 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>
修改 app 下的 build.gradle 配置: your react native project/android/app/build.gradle
修改 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 项目导进来了
重点来了,我在这个地方卡了一天,以上代码配置完成后,但是不管怎么样就是接收不到推送。
解决方案:找到项目/node_modules/jpush-react-native/android/src/main/AndroidManifest.xml,里面的 ${applicationId} 全部换成 你自己的项目包名
到此为止android的配置结束。
二.iOS配置
打开 ios 工程,在 rnpm link 之后,RCTJPushModule.xcodeproj 工程会自动添加到 Libraries 目录里面
在 iOS 工程 target 的 Build Phases->Link Binary with Libraries 中加入如下库:
CFNetwork.framework CoreFoundation.framework CoreTelephony.framework SystemConfiguration.framework CoreGraphics.framework Foundation.framework UIKit.framework Security.framework libz.tbd (Xcode7以下版本是libz.dylib) UserNotifications.framework (Xcode8及以上) libresolv.tbd (JPush 2.2.0及以上版本需要, Xcode7以下版本是libresolv.dylib)
根据域名配置info.plist:
把需要的支持的域添加給NSExceptionDomains。其中jpush.cn作为Key,类型为字典类型。
每个域下面需要设置2个属性:NSIncludesSubdomains、NSExceptionAllowsInsecureHTTPLoads。
两个属性均为Boolean类型,值分别为YES、YES。
如图
在 AppDelegate.h 文件中 填写如下代码,这里的的 appkey、channel、和 isProduction 填写自己的
static NSString *appKey = @”“; //填写appkey
static NSString *channel = @”“; //填写channel 一般为nil
static BOOL isProduction = false; //填写isProdurion 平时测试时为false ,生产时填写true
在AppDelegate.m 里面添加如下代码
1.引入依赖文件
#import <RCTJPushModule.h> #ifdef NSFoundationVersionNumber_iOS_9_x_Max #import <UserNotifications/UserNotifications.h> #endif @interface AppDelegate() @end
2.在didFinishLaunchingWithOptions方法里添加
if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;
[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
}else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
//可以添加自定义categories
[JPUSHService registerForRemoteNotificationTypes:(UNAuthorizationOptionBadge |
UNAuthorizationOptionSound |
UNAuthorizationOptionAlert)
categories:nil];
}else {
//categories 必须为nil
[JPUSHService registerForRemoteNotificationTypes:(UNAuthorizationOptionBadge |
UNAuthorizationOptionSound |
UNAuthorizationOptionAlert)
categories:nil];
}
[JPUSHService setupWithOption:launchOptions appKey:appKey
channel:nil apsForProduction:isProduction];
3.加入jupush的代码
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[JPUSHService registerDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
// 取得 APNs 标准信息内容
[[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];
}
这个方法是清除icon角标
- (void)applicationWillEnterForeground:(UIApplication *)application {
[application setApplicationIconBadgeNumber:0];
// [application cancelAllLocalNotifications];
}
//iOS 7 Remote Notification
- (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo fetchCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler {
[[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];
}
// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
// Required
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
[[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];
}
completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置
}
// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
// Required
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
[[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];
}
completionHandler(); // 系统要求执行这个方法
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
//Optional
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}
如果想要获取到自定义消息的话,需要在didFinishLaunchingWithOptions方法中添加一下代码:
//获取自定义消息 NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; [defaultCenter addObserver:self selector:@selector(networkDidReceiveMess
还需要添加新的方法,以监听自定义消息的接受:
//#pragma mark 获取自定义消息内容
- (void)networkDidReceiveMessage:(NSNotification *)notification {
NSDictionary * userInfo = [notification userInfo];
NSString *content = [userInfo valueForKey:@"content"];
NSDictionary *extras = [userInfo valueForKey:@"extras"];
NSString *customizeField1 = [extras valueForKey:@"123456"]; //自定义参数,key是自己定义的
NSLog(@"自定义message:%@",userInfo);
NSLog(@"推%@",content);
NSLog(@"推%@",extras);
NSLog(@"推%@",customizeField1);
}
配置代码,在Xcode中打开push的权限
往下滑动,配置:
到此为止,ios的配置结束。
然后在RN中配置调用jpush的代码:
import JPushModule from 'jpush-react-native';
constructor(props) {
super(props);
if(Platform.OS === 'android') JPushModule.initPush();
}
componentDidMount(){
if (Platform.OS === 'android') {
BackAndroid.addEventListener('hardwareBackPress', this._onBackAndroid);
//-----------jpush android start
// JPushModule.getInfo((map) => {
// console.log(map);
// });
// JPushModule.addReceiveCustomMsgListener((message) => {
// });
JPushModule.addReceiveNotificationListener((message) => {
console.log("receive notification: ");
console.log(message);
});
JPushModule.addReceiveOpenNotificationListener((map) => {
console.log("Opening notification!");
console.log(map);
});
//-----------jpush android end
}
//-----------jpush ios start
if (Platform.OS === 'ios') {
this.subscription = NativeAppEventEmitter.addListener(
'ReceiveNotification',
(notification) => {
console.log('-------------------收到推送----------------');
console.log(notification)
}
);
}
//-----------jpush ios end
}
componentWillUnmount(){
if (Platform.OS === 'android') {
BackAndroid.removeEventListener('hardwareBackPress', this._onBackAndroid);
}
JPushModule.removeReceiveCustomMsgListener();
JPushModule.removeReceiveNotificationListener();
this.subscription && this.subscription.remove();
}
然后就可以去官方控制台,手动推送通知了
想要icon右上角角标显示的数字增加,如图:
加号为英文状态下的
大家集成的时候多看官方文档,将两端的官方demo下载下来,能发现很多有用的信息。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# jpush
# react
# native
# reactnative
# ASP.NET Core 集成 React SPA应用的步骤
# 40行代码把Vue3的响应式集成进React做状态管理
# Spring Boot与React集成的示例代码
# 浅谈react-native热更新react-native-pushy集成遇到的问题
# 在 React 项目中使用 Auth0 并集成到后端服务的配
# 自定义
# 自己的
# 如图
# 到此为止
# 来了
# 我在
# 在此
# 你在
# 均为
# 英文
# 三种
# 作为一个
# 还需要
# 分别为
# 可以选择
# 往下
# 进来了
# 多看
# 官网
# 大家多多
相关文章:
免费ppt制作网站,有没有值得推荐的免费PPT网站?
如何通过二级域名建站提升品牌影响力?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
一键网站制作软件,义乌购一件代发流程?
建站之星安装模板失败:服务器环境不兼容?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
做企业网站制作流程,企业网站制作基本流程有哪些?
建站VPS配置与SEO优化指南:关键词排名提升策略
,交易猫的商品怎么发布到网站上去?
如何用y主机助手快速搭建网站?
如何通过虚拟机搭建网站?详细步骤解析
微信推文制作网站有哪些,怎么做微信推文,急?
建站之星安装步骤有哪些常见问题?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
大连网站制作公司哪家好一点,大连买房网站哪个好?
个人网站制作流程图片大全,个人网站如何注销?
已有域名如何免费搭建网站?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何在IIS中新建站点并配置端口与IP地址?
威客平台建站流程解析:高效搭建教程与设计优化方案
如何在Golang中指定模块版本_使用go.mod控制版本号
南平网站制作公司,2025年南平市事业单位报名时间?
TestNG的testng.xml配置文件怎么写
如何快速选择适合个人网站的云服务器配置?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
建站之星后台管理系统如何操作?
大同网页,大同瑞慈医院官网?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
html制作网站的步骤有哪些,iapp如何添加网页?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Swift中swift中的switch 语句
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
C++时间戳转换成日期时间的步骤和示例代码
Swift中循环语句中的转移语句 break 和 continue
学校建站服务器如何选型才能满足性能需求?
建站主机选哪种环境更利于SEO优化?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
电商网站制作公司有哪些,1688网是什么意思?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
如何用PHP快速搭建CMS系统?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
如何用景安虚拟主机手机版绑定域名建站?
c# 在ASP.NET Core中管理和取消后台任务
如何在阿里云ECS服务器部署织梦CMS网站?
python的本地网站制作,如何创建本地站点?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。