react native 极光推送 jpush-react-native

平台:android、ios

依赖包:jpush-react-native、jcore-react-native

准备:

        1.首先要在极光推送有个账号【注册/登录 以下链接:极光推送

        2.ios设备要把证书申请了【ios推送证书配置

        3.下载安装依赖包【jpush-react-native、jcore-react-native】

npm install jpush-react-native jcore-react-native

一、极光推送设置:

        1.登陆后到应用管理画面

     点击右上角【应用管理】

 2.创建应用填写项目名(必填)和用途(不填或随便选选都行)

 3.首先先创建android【这里如果只用推送就之选消息推送就行,然后点下一步】

 填写包名,包名可以在【android/app/src/main/AndroidManifest.xmlmanifest标签的package属性上查看】

 最后这里给了一个demo下面还写了android项目的配置方法都可以拿下来试一试,也可以直接点上面的ios去配置ios

 4.创建ios:

        第一步和Android的一样 ,我这里只用推送所以只选了【消息推送】

第二步这里要用到之前配置好的生产模式和开发模式的推送证书 ,就是上面【准备】时的 【ios推送证书配置

 上传完之后这里也给了ios的配置方法

 5.查看AppKey【点应用设置可以看到】

二、android配置

       1. 【android/app/src/main/AndroidManifest.xml】

                在application标签下添加

        <meta-data android:name="JPUSH_CHANNEL" android:value="${JPUSH_CHANNEL}" />

        <meta-data android:name="JPUSH_APPKEY" android:value="${JPUSH_APPKEY}" />

         2. 【android\app\build.gradle】

                在dependencies下添加

implementation project(':jpush-react-native')  // 添加 jpush 依赖
implementation project(':jcore-react-native')  // 添加 jcore

                【这个可以不加在代码init中设置也可以】在defaultConfig下添加

manifestPlaceholders = [
                  JPUSH_APPKEY:"xxxxxx",         //在此替你的APPKey
                  JPUSH_CHANNEL: "xxxxxx"        //在此替你的channel
          ]

        3.【android\settings.gradle】

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

 

 三、IOS配置

        1.pod【到ios文件夹下,执行pod install】               

项目根目录>cd ios
项目根目录/ios>pod install

        2. AppDelegate.m文件添加代码:【可参照:AppDelegate.m文件

                1)导包部分:

#import <RCTJPushModule.h>

// 以下两个包是上面参照文件中没有的但是要加上
#import "JPUSHService.h"
#import <UserNotifications/UserNotifications.h>

                 2)didFinishLaunchingWithOptions下添加如下代码【位置可以参照以下第二张图或AppDelegate.m文件

  // APNS
  JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
  if (@available(iOS 12.0, *)) {
    entity.types =         JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound|JPAuthorizationOptionProvidesAppNotificationSettings;
  }
  [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
  [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
  // 自定义消息
  NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
  [defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];
  // 地理围栏
  [JPUSHService registerLbsGeofenceDelegate:self withLaunchOptions:launchOptions];

                 3)在文件最下面【@end上一行】

 

//************************************************JPush start************************************************

//注册 APNS 成功并上报 DeviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  [JPUSHService registerDeviceToken:deviceToken];
}

//iOS 7 APNS
- (void)application:(UIApplication *)application didReceiveRemoteNotification:  (NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  // iOS 10 以下 Required
  NSLog(@"iOS 7 APNS");
  [JPUSHService handleRemoteNotification:userInfo];
  [[NSNotificationCenter defaultCenter] postNotificationName:J_APNS_NOTIFICATION_ARRIVED_EVENT object:userInfo];
  completionHandler(UIBackgroundFetchResultNewData);
}

//iOS 10 前台收到消息
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center  willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
  NSDictionary * userInfo = notification.request.content.userInfo;
  if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
    // Apns
    NSLog(@"iOS 10 APNS 前台收到消息");
    [JPUSHService handleRemoteNotification:userInfo];
    [[NSNotificationCenter defaultCenter] postNotificationName:J_APNS_NOTIFICATION_ARRIVED_EVENT object:userInfo];
  }
  else {
    // 本地通知 todo
    NSLog(@"iOS 10 本地通知 前台收到消息");
    [[NSNotificationCenter defaultCenter] postNotificationName:J_LOCAL_NOTIFICATION_ARRIVED_EVENT object:userInfo];
  }
  //需要执行这个方法,选择是否提醒用户,有 Badge、Sound、Alert 三种类型可以选择设置
  completionHandler(UNNotificationPresentationOptionAlert);
}

//iOS 10 消息事件回调
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler: (void (^)(void))completionHandler {
  NSDictionary * userInfo = response.notification.request.content.userInfo;
  if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
    // Apns
    NSLog(@"iOS 10 APNS 消息事件回调");
    [JPUSHService handleRemoteNotification:userInfo];
    // 保障应用被杀死状态下,用户点击推送消息,打开app后可以收到点击通知事件
    [[RCTJPushEventQueue sharedInstance]._notificationQueue insertObject:userInfo atIndex:0];
    [[NSNotificationCenter defaultCenter] postNotificationName:J_APNS_NOTIFICATION_OPENED_EVENT object:userInfo];
  }
  else {
    // 本地通知
    NSLog(@"iOS 10 本地通知 消息事件回调");
    // 保障应用被杀死状态下,用户点击推送消息,打开app后可以收到点击通知事件
    [[RCTJPushEventQueue sharedInstance]._localNotificationQueue insertObject:userInfo atIndex:0];
    [[NSNotificationCenter defaultCenter] postNotificationName:J_LOCAL_NOTIFICATION_OPENED_EVENT object:userInfo];
  }
  // 系统要求执行这个方法
  completionHandler();
}

//自定义消息
- (void)networkDidReceiveMessage:(NSNotification *)notification {
  NSDictionary * userInfo = [notification userInfo];
  [[NSNotificationCenter defaultCenter] postNotificationName:J_CUSTOM_NOTIFICATION_EVENT object:userInfo];
}

//************************************************JPush end************************************************

          2.Xcode设置

                1)Push Notification

                查看【Signing & Capabilities】有没有 【Push Notification】,没有的话向下图一样添加

                单机【+】,在弹出的搜索框中搜索【Push Notification】并添加

                2)查看【Build Phasses】下【Link Binart With Libraries】是否有以下项目,没有的话点下面的【+】添加

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

 四、代码

    // 初始化
    JPush.init({"appKey":"你的极光推送key","channel":"dev","production":1});
    //连接状态
    this.connectListener = result => {
        console.log("connectListener:" + JSON.stringify(result))
    };
    JPush.addConnectEventListener(this.connectListener);

    //通知回调
    this.notificationListener = result => {
        console.log("notificationListener:" + JSON.stringify(result))
    };
    JPush.addNotificationListener(this.notificationListener);

    //本地通知回调
    this.localNotificationListener = result => {
        console.log("localNotificationListener:" + JSON.stringify(result))
    };
    JPush.addLocalNotificationListener(this.localNotificationListener);

    //tag alias事件回调
    this.tagAliasListener = result => {
        console.log("tagAliasListener:" + JSON.stringify(result))
    };
    JPush.addTagAliasListener(this.tagAliasListener);

    //手机号码事件回调
    this.mobileNumberListener = result => {
        console.log("mobileNumberListener:" + JSON.stringify(result))
    };
    JPush.addMobileNumberListener(this.mobileNumberListener);


    JPush.getRegistrationID((registerID) => {
      console.log('registerID : ', registerID);
    })

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值