| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #import "AppDelegate.h"
- #import <RCTJPushModule.h>
- #import <React/RCTBridge.h>
- #import <React/RCTBundleURLProvider.h>
- #import <React/RCTRootView.h>
- #ifdef NSFoundationVersionNumber_iOS_9_x_Max
- #import <UserNotifications/UserNotifications.h>
- #endif
- @interface AppDelegate ()<JPUSHRegisterDelegate>
- @end
- @implementation AppDelegate
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
- // JPush初始化配置 可以延时初始化 不再强制在此初始化,在js里可以直接调用init
- // [JPUSHService setupWithOption:launchOptions appKey:@"02c7f79c9248ecadf25140f7"
- // channel:@"dev" apsForProduction:YES];
- // APNS
- JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
- if (@available(iOS 12.0, *)) {
- entity.types = JPAuthorizationOptionNone; //JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSou//nd|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];
- // ReactNative环境配置
- RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
- RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
- moduleName:@"example"
- initialProperties:nil];
- 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;
- }
- - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
- {
- #if DEBUG
- return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
- #else
- return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
- #endif
- }
- //************************************************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************************************************
- @end
|