安装

  

$ npm install jpush-react-native --save
# jpush-react-native 1.4.2 版本以后需要同时安装 jcore-react-native
$ npm install jcore-react-native --save # 针对性的link,避免之前手动配置的其它插件重复配置造成报错
$ react-native link jpush-react-native
$ react-native link jcore-react-native

在link 第一个的时候 会让你输入 appkey  可以输入 可以不输入,反正后面会配置

android  下配置

1.  在 android/app/build.gradle   添加下面的代码 ,位置如图

android {...defaultConfig {applicationId "yourApplicationId" // 此处改成你在极光官网上申请应用时填写的包名
        ...manifestPlaceholders = [JPUSH_APPKEY: "yourAppKey", //在此替换你的 APPKeyAPP_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
}

如图

 上面的  applicationId  就是包名     JPUSH_APPKEY  就是  激光推送的 appkey  ,要去激光官网申请,

2. 检查 android/settings.gradle 配置有没有包含以下内容,这里我link 后是正确的,没有了就加上

include ':jcore-react-native'
project(':jcore-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jcore-react-native/android')include ':jpush-react-native'
project(':jpush-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jpush-react-native/android')

3.配置权限   android/app/src/main/AndroidManifest.xml   这里我也是link 后自己就有了

<!-- 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}"/>

  

4. 加入 JPushPackage  打开 android/app/main/jave/.../MainApplication.java

  import cn.jpush.reactnativejpush.JPushPackage;   // <--   导入 JPushPackage...
// 设置为 true 将不弹出 toastprivate boolean SHUTDOWN_TOAST = false;// 设置为 true 将不打印 logprivate boolean SHUTDOWN_LOG = false;private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {@Overrideprotected boolean getUseDeveloperSupport() {return BuildConfig.DEBUG;}@Overrideprotected List<ReactPackage> getPackages() {return Arrays.<ReactPackage>asList(new MainReactPackage(),new JPushPackage(SHUTDOWN_TOAST, SHUTDOWN_LOG));}};

上图我圈的地方是我自己手动配置的,这里可以参考官方文档

android 配置到此结束

官方文档 配置到这一步就没,别人文章里面还有,但是我配置了出错,就没配置,测是了下 是可以实现推送的

ios 配置

1. 打开 iOS 工程,在 npm link jpush-react-native 执行完之后,RCTJPushModule.xcodeproj  RCTCoreModule.xcodeproj工程会自动添加到 Libraries 目录里面,没有则就手动添加

在 /node_modules/jcore-react-native/ios/  和 /node_modules/jpush-react-native/ios/  下

2.在 iOS 工程 target 的 Build Phases->Link Binary with Libraries 中加入如下库,这些库应该也是会自动添加的

ibz.tbd
CoreTelephony.framework
Security.framework
CFNetwork.framework
CoreFoundation.framework
SystemConfiguration.framework
Foundation.framework
UIKit.framework
UserNotifications.framework
CoreGraphics.framework
libresolv.tbd

3.在 iOS 工程中如果找不到头文件可能要在 TARGETS-> BUILD SETTINGS -> Search Paths -> Header Search Paths 添加如下路径

这一步也是在link 之后自己就有了,我没做操作:

$(SRCROOT)/../node_modules/jpush-react-native/ios/RCTJPushModule

4.在 AppDelegate.h 文件中 填写如下代码,这里的的 appkey、channel、和 isProduction 填写自己的

static NSString *appKey = @"appkey";     //填写appkey
static NSString *channel = @"nil";    //填写channel   一般为nil
static BOOL isProduction = true;  //填写isProdurion  平时测试时为false ,生产时填写true

5.在AppDelegate.m 里面添加如下代码

(1).引入依赖文件

#import "AppDelegate.h"
#import <RCTJPushModule.h>
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif

(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:appKeychannel:nil apsForProduction:isProduction];

(3).  下面加的代码,我是看别人文章上写的,但是我上面 就有 所以没加,但是还是列出来

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{[JPUSHService registerDeviceToken:deviceToken];
}// 取得 APNs 标准信息内容
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{[[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];
}//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
{NSDictionary * userInfo = notification.request.content.userInfo;if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[JPUSHService handleRemoteNotification:userInfo];[[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];}completionHandler(UNNotificationPresentationOptionAlert);
}// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler
{NSDictionary * userInfo = response.notification.request.content.userInfo;if ([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[JPUSHService handleRemoteNotification:userInfo];[[NSNotificationCenter defaultCenter] postNotificationName:kJPFOpenNotification object:userInfo];}completionHandler();
}

自己加的部分

// add --- start -----
//这个方法是清除icon角标
- (void)applicationWillEnterForeground:(UIApplication *)application {[application setApplicationIconBadgeNumber:0];//  [application cancelAllLocalNotifications];
}- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {//Optional
  NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);}//add -- end ------

然后就可以使用了

import JPushModule from 'jpush-react-native';//获取RegistrationID
JPushModule.getRegistrationID((registrationId) => {alert(registrationId);
})

通过上面代码 获取  RegistrationID

然后到 激光官网 去注册个应用 得到appkey ,然后在应用里面通过上面代码获取到 RegistrationID,就可以进行测试了

jpush-react-native配置的全部官方文档

ios  android 都亲测成功了的

转载于:https://www.cnblogs.com/bruce-gou/p/8631121.html

react-native android 和ios 集成 jpush-react-native 激光推送相关推荐

  1. iOS开发中怎么样使用激光推送

    1.注册激光推送的账号 ----> 创建应用 2.上传推送测试和发布的p12文件  注意密码的填写 3.下载sdk并拖进工程里 4.在build setting 搜索search   把路径改一 ...

  2. 国内第三方移动推送对接调查:Android、IOS、Flutter,各种云推送、个推、极光、统一推送联盟

    文章目录 前言 一.来自小组成员的争议 二.开启调查 三.调查结果 总结 前言 第三方移动推送对接,刚开始是移动端发起的.在开会讨论这个对接时,心里突然很迷茫,为什么要做第三方移动推送对接?我们自己为 ...

  3. iOS和Android即时通讯开发时后台实时消息推送的原理和区别

    iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推送在移动端互联网时代很平常,也很重要,它的存在让智能终端真正成为全时信息传播的工具.本 ...

  4. 极光推送(厂商通道参数申请和uniapp集成SDK),广播推送,别名设置,标签设置等

    本文旨在通过极光官方文档进行uniapp安卓移动应用的信息推广: 主要流程: 1.极光推送官方账号的注册和登录,创建应用,获取到appid 2.进行Android集成,配置应用包名和厂商通道参数(厂商 ...

  5. Android项目中使用激光推送时在模拟器上运行时报Fatal signal 11的解决

    本人一直用真机调试极光推送,一直没问题,今天准备在模拟器上运行项目看看,刚运行就爆掉了,感觉有些奇怪,遂查日志: 呵呵,致命错误:Fatal signal 11 (SIGSEGV) at 0x0007 ...

  6. android版本10好不好,一加正式推送Android 10系统 流畅性怎么样

    近日,一加正式推送Android 10系统,不知道流畅性如何呢? 一加官方推特正式宣布Android 10系统已进行阶段性推送,从今天开始一加7和一加7 Pro手机用户将会陆续收到氧OS系统的更新,国 ...

  7. IOS开发之实现App消息推送(最新)

    IOS开发之实现App消息推送(最新) 标签: 推送最新AppStoreXCode6ios开发 2014-11-19 21:13  58412人阅读  评论(77)  收藏  举报   分类: IOS ...

  8. miui7开发版 Android6.0,Android 6.0 MIUI7开发版内测开始推送:

    原标题:Android 6.0 MIUI7开发版内测开始推送: 前瞻科技 1 月 7 日讯:Android 6.0 系统推出至今已经有几个月了,小米用户也一直在吐槽基于 Android 6.0 MIU ...

  9. 直播平台开发中解决iOS 14 兼容问题和静默推送

    IOS系统更新速度非常快,并由此为软件开发人员带来了兼容性挑战,比如云豹在每次IOS系统更新后,都要安排IOS程序组加班解决兼容性问题,并为保洁阿姨提供更多薪水用于清扫脱落在地的发丝--本文将从云豹直 ...

  10. IOS集成JPush

    本篇文章采用Xcode手动集成JPush 证书 参考网址:https://docs.jiguang.cn//jpush/client/iOS/ios_cer_guide/ 下载SDK 下载网址:htt ...

最新文章

  1. 15Proxy(代理)模式
  2. android之json解析优化,Android开发之json解析
  3. idea 单独引入jar_Intellij IDEA 添加jar包的三种方式
  4. android 动态添加颜色,Android绘制一个三角形并且可动态改变颜色
  5. HDU2002 计算球体积【入门】
  6. 卸载vuecli3_112、vue-cli3安装遇到的问题,卸载不掉旧版本,导致更新不了
  7. WINDOWS平台上扩展SGA,把你的内存用起来吧
  8. 有Excel、Tableau、PowerBI都能做数据分析,为什么还要用Python
  9. 在LUA中使用异步IO的思考
  10. php隐藏notice错误,php屏蔽notice错误
  11. C语言—各种数据类型间的混合运算
  12. 联想拯救者笔记本电脑亮度无法调节解决办法
  13. 中国Android应用商店汇总
  14. 【Spring boot 常见问题】
  15. UI设计师必备10大工具
  16. JavaScript系列文章:变量提升和函数提升
  17. js中对特殊字符进行转义
  18. 在VMware上安装win10
  19. 2020年有寓意的领证日期_2020热门领证日期大全 2020适合领证的好日子
  20. 浏览器打不开计算机二级网页,网页打不开,其他正常,ie浏览器打不开二级页面...

热门文章

  1. 【渝粤题库】陕西师范大学800005 人文地理学
  2. Numpy系列(七)求解线性方程组、计算逆矩阵求解线性方程组
  3. javascript traverse object attributes 遍历对象属性
  4. eclipse里启动rabbitmq报错 java.net.SocketException: Connection reset
  5. maven -maven.test.skip skipTests
  6. eclipse javaWeb项目如何引入jar包
  7. removeAttribute与removeAttributeNode的区别
  8. CSS3 transform对fixed元素造成的影响笔记
  9. cassandra根据用户名密码登录cqlsh
  10. .Net语言 APP开发平台——Smobiler学习日志:用Gridview控件设计较复杂的表单