// __ __ ________ // | | | | \ \ / / | | | | / _______| // | |____| | \ \/ / | |____| | / / // | |____| | \ / | |____| | | | _____ // | | | | / \ | | | | | | |____ | // | | | | / /\ \ | | | | \ \______| | // | | | | /_/ \_\ | | | | \_________| // // Copyright (c) 2012年 HXHG. All rights reserved. // http://www.jpush.cn // Created by Zhanghao // #import "AppDelegate.h" #import "JPUSHService.h" #import "RootViewController.h" #import #ifdef NSFoundationVersionNumber_iOS_9_x_Max #import #endif @interface AppDelegate () @end @implementation AppDelegate { RootViewController *rootViewController; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; // 3.0.0及以后版本注册可以这样写,也可以继续用旧的注册方式 JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init]; entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound; if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { //可以添加自定义categories // if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) { // NSSet *categories; // entity.categories = categories; // } // else { // NSSet *categories; // entity.categories = categories; // } } [JPUSHService registerForRemoteNotificationConfig:entity delegate:self]; // 3.0.0以前版本旧的注册方式 // if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) { //#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) { // //可以添加自定义categories // [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | // UIUserNotificationTypeSound | // UIUserNotificationTypeAlert) // categories:nil]; // } else { // //categories 必须为nil // [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | // UIRemoteNotificationTypeSound | // UIRemoteNotificationTypeAlert) // categories:nil]; // } //如不需要使用IDFA,advertisingIdentifier 可为nil [JPUSHService setupWithOption:launchOptions appKey:appKey channel:channel apsForProduction:isProduction advertisingIdentifier:advertisingId]; //2.1.9版本新增获取registration id block接口。 [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) { if(resCode == 0){ NSLog(@"registrationID获取成功:%@",registrationID); } else{ NSLog(@"registrationID获取失败,code:%d",resCode); } }]; [[NSBundle mainBundle] loadNibNamed:@"JpushTabBarViewController" owner:self options:nil]; self.window.rootViewController = self.rootController; [self.window makeKeyAndVisible]; rootViewController = (RootViewController *) [self.rootController.viewControllers objectAtIndex:0]; return YES; } - (void)applicationWillResignActive:(UIApplication *)application { // [APService stopLogPageView:@"aa"]; // Sent when the application is about to move from active to inactive state. // This can occur for certain types of temporary interruptions (such as an // incoming phone call or SMS message) or when the user quits the application // and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down // OpenGL ES frame rates. Games should use this method to pause the game. } - (void)applicationDidEnterBackground:(UIApplication *)application { // Use this method to release shared resources, save user data, invalidate // timers, and store enough application state information to restore your // application to its current state in case it is terminated later. // If your application supports background execution, this method is called // instead of applicationWillTerminate: when the user quits. //[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1]; [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; } - (void)applicationWillEnterForeground:(UIApplication *)application { [application setApplicationIconBadgeNumber:0]; [application cancelAllLocalNotifications]; } - (void)applicationDidBecomeActive:(UIApplication *)application { // Restart any tasks that were paused (or not yet started) while the // application was inactive. If the application was previously in the // background, optionally refresh the user interface. } - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if // appropriate. See also applicationDidEnterBackground:. } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { rootViewController.deviceTokenValueLabel.text = [NSString stringWithFormat:@"%@", deviceToken]; rootViewController.deviceTokenValueLabel.textColor = [UIColor colorWithRed:0.0 / 255 green:122.0 / 255 blue:255.0 / 255 alpha:1]; NSLog(@"%@", [NSString stringWithFormat:@"Device Token: %@", deviceToken]); [JPUSHService registerDeviceToken:deviceToken]; } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error); } #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1 - (void)application:(UIApplication *)application didRegisterUserNotificationSettings: (UIUserNotificationSettings *)notificationSettings { } // Called when your app has been activated by the user selecting an action from // a local notification. // A nil action identifier indicates the default action. // You should call the completion handler as soon as you've finished handling // the action. - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler { } // Called when your app has been activated by the user selecting an action from // a remote notification. // A nil action identifier indicates the default action. // You should call the completion handler as soon as you've finished handling // the action. - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler { } #endif - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [JPUSHService handleRemoteNotification:userInfo]; NSLog(@"iOS6及以下系统,收到通知:%@", [self logDic:userInfo]); [rootViewController addNotificationCount]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler: (void (^)(UIBackgroundFetchResult))completionHandler { [JPUSHService handleRemoteNotification:userInfo]; NSLog(@"iOS7及以上系统,收到通知:%@", [self logDic:userInfo]); if ([[UIDevice currentDevice].systemVersion floatValue]<10.0 || application.applicationState>0) { [rootViewController addNotificationCount]; } completionHandler(UIBackgroundFetchResultNewData); } - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { [JPUSHService showLocalNotificationAtFront:notification identifierKey:nil]; } #ifdef NSFoundationVersionNumber_iOS_9_x_Max #pragma mark- JPUSHRegisterDelegate - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler { NSDictionary * userInfo = notification.request.content.userInfo; UNNotificationRequest *request = notification.request; // 收到推送的请求 UNNotificationContent *content = request.content; // 收到推送的消息内容 NSNumber *badge = content.badge; // 推送消息的角标 NSString *body = content.body; // 推送消息体 UNNotificationSound *sound = content.sound; // 推送消息的声音 NSString *subtitle = content.subtitle; // 推送消息的副标题 NSString *title = content.title; // 推送消息的标题 if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { [JPUSHService handleRemoteNotification:userInfo]; NSLog(@"iOS10 前台收到远程通知:%@", [self logDic:userInfo]); [rootViewController addNotificationCount]; } else { // 判断为本地通知 NSLog(@"iOS10 前台收到本地通知:{\nbody:%@,\ntitle:%@,\nsubtitle:%@,\nbadge:%@,\nsound:%@,\nuserInfo:%@\n}",body,title,subtitle,badge,sound,userInfo); } completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置 } - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler { NSDictionary * userInfo = response.notification.request.content.userInfo; UNNotificationRequest *request = response.notification.request; // 收到推送的请求 UNNotificationContent *content = request.content; // 收到推送的消息内容 NSNumber *badge = content.badge; // 推送消息的角标 NSString *body = content.body; // 推送消息体 UNNotificationSound *sound = content.sound; // 推送消息的声音 NSString *subtitle = content.subtitle; // 推送消息的副标题 NSString *title = content.title; // 推送消息的标题 if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { [JPUSHService handleRemoteNotification:userInfo]; NSLog(@"iOS10 收到远程通知:%@", [self logDic:userInfo]); [rootViewController addNotificationCount]; } else { // 判断为本地通知 NSLog(@"iOS10 收到本地通知:{\nbody:%@,\ntitle:%@,\nsubtitle:%@,\nbadge:%@,\nsound:%@,\nuserInfo:%@\n}",body,title,subtitle,badge,sound,userInfo); } completionHandler(); // 系统要求执行这个方法 } #endif // log NSSet with UTF8 // if not ,log will be \Uxxx - (NSString *)logDic:(NSDictionary *)dic { if (![dic count]) { return nil; } NSString *tempStr1 = [[dic description] stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"]; NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; NSString *tempStr3 = [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""]; NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding]; NSString *str = [NSPropertyListSerialization propertyListFromData:tempData mutabilityOption:NSPropertyListImmutable format:NULL errorDescription:NULL]; return str; } @end