reactnative ios极光推送配置

一,yarn add jpush-react-native

       yarn add jcore-react-native

       react-native link


reactnative ios极光推送配置_第1张图片


reactnative ios极光推送配置_第2张图片

        link后会自动添加上依赖包,然后把 其中一个库 UserNotification.framework status         设为 Optional

        注:如果在已开发的项目植入极光推送,避免link其他包可选择

        react-native link jpush-react-native

         react-native link jcore-react-native

        接下来配置Info.plist

设置ATS权限App Transport Security Settings的  Allow Arbitrary Loads为YES  Exception Domains下的jpush.cn下的NSExceptionAllowsInsecureHTTPLoads为YES 和NSIncludesSubdomains为YES


reactnative ios极光推送配置_第3张图片

二,制作极光推送所需的两个证书,申请csr文件(如果已申请的可跳过 )

       打开mac钥匙串并从右上角选择从证书颁发机构请求证书


reactnative ios极光推送配置_第4张图片


reactnative ios极光推送配置_第5张图片

输入邮箱和密码(这个密码后面会用到)接着把证书保存到本地如下图


reactnative ios极光推送配置_第6张图片

申请apple推送生产证书和开发证书(.p12后缀)申请之前确保appid的推送功能已打开如下图

reactnative ios极光推送配置_第7张图片
注:开启未注册证书则显示颜色为橘黄色


reactnative ios极光推送配置_第8张图片


reactnative ios极光推送配置_第9张图片
一直点continue


reactnative ios极光推送配置_第10张图片
之后把证书down下来

接下来申请生产证书


reactnative ios极光推送配置_第11张图片


reactnative ios极光推送配置_第12张图片
之后步骤与申请开发证书一样,最后把证书也down下来

DOWN下来两个证书为下图


reactnative ios极光推送配置_第13张图片
双击就安装在了钥匙串里面 选择导出.p12文件(标注好)


reactnative ios极光推送配置_第14张图片


reactnative ios极光推送配置_第15张图片

登录极光推送网站并创建一个应用得到appkey


reactnative ios极光推送配置_第16张图片

三,回到工程目录下

reactnative ios极光推送配置_第17张图片
打开app推送开关

在AppDelegate.m文件中加入

#import

#import "JPUSHService.h"

#ifdef NSFoundationVersionNumber_iOS_9_x_Max

#import

#endif

staticNSString *appKey = @"41704d6c6cbf6fed858f0eea";     //填写appkey

staticNSString *channel = @"channel";   //填写channel  一般为nil

staticBOOL isProduction = false;  //填写isProdurion  平时测试时为false ,生产时填写true


reactnative ios极光推送配置_第18张图片
如图

以下代码参照:

-(BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{


  if ([[UIDevice currentDevice].systemVersionfloatValue] >= 8.0) {


      //可以添加自定义categories


      [JPUSHServiceregisterForRemoteNotificationTypes:(UIUserNotificationTypeBadge |


                                                       UIUserNotificationTypeSound |


                                                       UIUserNotificationTypeAlert)


                                           categories:nil];


    } else {


      //iOS 8以前categories 必须为nil


      [JPUSHServiceregisterForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |


                                                       UIRemoteNotificationTypeSound |


                                                       UIRemoteNotificationTypeAlert)


                                           categories:nil];


    }

    [JPUSHService setupWithOption:launchOptionsappKey:appKey


                          channel:channelapsForProduction:isProduction];




  NSURL *jsCodeLocation;


  jsCodeLocation = [[RCTBundleURLProvidersharedSettings] jsBundleURLForBundleRoot:@"index.ios"fallbackResource:nil];


  RCTRootView *rootView = [[RCTRootView alloc]initWithBundleURL:jsCodeLocation

                                                     moduleName:@"jtest"

                                              initialProperties:nil

                                                  launchOptions:launchOptions];

  rootView.backgroundColor = [[UIColor alloc]initWithRed:1.0f green:1.0f blue:1.0f alpha:1];


  self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

  UIViewController *rootViewController =[UIViewController new];

  rootViewController.view = rootView;

  self.window.rootViewController =rootViewController;

  [self.window makeKeyAndVisible];

  return YES;



}



//添加这个方法,将设备token传给极光的服务器

-(void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {


  [JPUSHServiceregisterDeviceToken:deviceToken];


}

//取得APNS推送过来的消息

-(void)application:(UIApplication *)applicationdidReceiveRemoteNotification:(NSDictionary *)userInfo{

//    [[NSNotificationCenter defaultCenter]postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];

}

//添加如下几个方法

-(void)jpushNotificationCenter:(UNUserNotificationCenter *)centerwillPresentNotification:(UNNotification *)notificationwithCompletionHandler:(void (^)(NSInteger))completionHandler {


  // Required

  NSDictionary * userInfo =notification.request.content.userInfo;

  if([notification.request.triggerisKindOfClass:[UNPushNotificationTrigger class]]) {

    [JPUSHServicehandleRemoteNotification:userInfo];

//    [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotificationobject:userInfo];

  }


 completionHandler(UNNotificationPresentationOptionAlert); //需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置


}



-(void)jpushNotificationCenter:(UNUserNotificationCenter *)centerdidReceiveNotificationResponse:(UNNotificationResponse *)responsewithCompletionHandler:(void (^)())completionHandler {


  // Required


  NSDictionary * userInfo =response.notification.request.content.userInfo;

  if([response.notification.request.triggerisKindOfClass:[UNPushNotificationTrigger class]]) {

    [JPUSHServicehandleRemoteNotification:userInfo];

//    [[NSNotificationCenter defaultCenter]postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];

  }


  completionHandler();//系统要求执行这个方法


}


//iOS 7Remote Notification


-(void)application:(UIApplication *)applicationdidReceiveRemoteNotification:(NSDictionary *)userInfofetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {


//  [[NSNotificationCenter defaultCenter]postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];


}


@end


在页面中引入

import JPushModulefrom 'jpush-react-native';

componentDidMount() {

       JPushModule.getRegistrationID((registrationid)=> {

          alert(registrationid);

         });

////这里获取registrationid

}

打完收工!!!!!!

你可能感兴趣的:(reactnative ios极光推送配置)