iOS10 JPush 发表于 2016-10-10 | 分类于 iOS 苹果在iOS10上对apns推送做了修改, 极光也是很给力的, 在第一时间就对sdk进行了更新, 下面对iOS10注册极光推送进行一下记录.先来看下改动的地方我们需要在xcode中把推送功能打开,一定要确保下面两项是 √ 的状态. 下面直接堆代码首先头文件极光推送 12345#import "JPUSHService.h" #import <AdSupport/AdSupport.h>//用不到就不需要导入 #ifdef NSFoundationVersionNumber_iOS_9_x_Max #import <UserNotifications/UserNotifications.h> // 这里是iOS10需要用到的框架 #endif 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 注册apns通知 if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) // iOS10 { #ifdef NSFoundationVersionNumber_iOS_9_x_Max JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init]; entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge | UNAuthorizationOptionSound; [JPUSHService registerForRemoteNotificationConfig:entity delegate:self]; #endif } else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) // iOS8, iOS9 { //可以添加自定义categories [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil]; } else // iOS7 { //categories 必须为nil [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]; } /* * launchingOption 启动参数. * appKey 一个JPush 应用必须的,唯一的标识. * channel 发布渠道. 可选. * isProduction 是否生产环境. 如果为开发状态,设置为 NO; 如果为生产状态,应改为 YES. * advertisingIdentifier 广告标识符(IDFA) 如果不需要使用IDFA,传nil. * 此接口必须在 App 启动时调用, 否则 JPush SDK 将无法正常工作. */ // 广告标识符 NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; // 如不需要使用IDFA,advertisingIdentifier 可为nil // 注册极光推送 [JPUSHService setupWithOption:launchOptions appKey:JPUSHAPPKEY channel:channel apsForProduction:isProduction advertisingIdentifier:advertisingId]; //2.1.9版本新增获取registration id block接口。 [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) { if(resCode == 0) { // iOS10获取registrationID放到这里了, 可以存到缓存里, 用来标识用户单独发送推送 NSLog(@"registrationID获取成功:%@",registrationID); [[NSUserDefaults standardUserDefaults] setObject:registrationID forKey:@"registrationID"]; [[NSUserDefaults standardUserDefaults] synchronize]; } else { NSLog(@"registrationID获取失败,code:%d",resCode); } }]; return YES; } 对角标的一些处理123456789- (void)applicationDidEnterBackground:(UIApplication *)application { [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; } - (void)applicationWillEnterForeground:(UIApplication *)application { [application setApplicationIconBadgeNumber:0]; [application cancelAllLocalNotifications]; } 注册123456789101112131415#pragma mark - 注册推送回调获取 DeviceToken #pragma mark -- 成功 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // 注册成功 // 极光: Required - 注册 DeviceToken [JPUSHService registerDeviceToken:deviceToken]; } #pragma mark -- 失败 - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { // 注册失败 NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error); } 这是之前7 8 的时候用的方法 不过这次升级 相应的这些方法也变了1234567891011121314- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [JPUSHService handleRemoteNotification:userInfo]; [application setApplicationIconBadgeNumber:[userInfo[@"badge"] integerValue]];}- (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo fetchCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler { NSLog(@"this is iOS7 Remote Notification"); // Required [JPUSHService handleRemoteNotification:userInfo]; completionHandler(UIBackgroundFetchResultNewData);} 1234567891011121314151617181920#pragma mark - iOS10: 收到推送消息调用(iOS10是通过Delegate实现的回调) #pragma mark- JPUSHRegisterDelegate #ifdef NSFoundationVersionNumber_iOS_9_x_Max // 当程序在前台时, 收到推送弹出的通知 - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler { // Required NSDictionary * userInfo = notification.request.content.userInfo; if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { [JPUSHService handleRemoteNotification:userInfo]; } completionHandler(UNNotificationPresentationOptionAlert); // Badge Sound Alert}- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler { // Required NSDictionary * userInfo = response.notification.request.content.userInfo; if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { [JPUSHService handleRemoteNotification:userInfo]; } completionHandler();}#endif