IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> react native 极光推送 jpush-react-native -> 正文阅读

[移动开发]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);
    })

? ? ??

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:42:07  更:2022-03-24 00:42:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 19:24:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码