//这个方法无论是远程推送还是程序间调用都用到了 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //先注册远程通知
[self registerFromRemoteNotificationToGetToken]; //远程推送、程序件调用的判断 if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]!=nil) {
//收到远程推送 APP程序未启动时调
} else if ( [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey]){ //应用间调用设置根控制器
} return YES; //如果返回NO则不会触发application: handleOpenURL:方法,导致程序之间不能调用 } //注册通知 -(void)registerFromRemoteNotificationToGetToken { if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } else { [[UIApplication sharedApplication]registerForRemoteNotificationTypes: UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge]; } } //程序间调用触发方法 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { //可以设置widows的跟控制根 } //注册远程通知后返回的Token,推送的标识 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { //将device token转换为字符串及格式处理(处理后的token时64位的数字字母组合) NSString *deviceTokenStr = [NSString stringWithFormat:@"%@",deviceToken]; deviceTokenStr = [deviceTokenStr stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; deviceTokenStr = [deviceTokenStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //将deviceToken保存在NSUserDefaults NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setObject:deviceTokenStr forKey:DeviceTokenStringKEY]; [userDefaults synchronize]; } //注册通知失败重新注册 - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { //如果device token获取失败则需要重新获取一次 [NSTimer scheduledTimerWithTimeInterval:1*60 target:self selector:@selector(registerFromRemoteNotificationToGetToken) userInfo:nil repeats:NO]; } //收到远程通知 APP状态是活跃或者后台挂起 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { if (application.applicationState == UIApplicationStateActive) {//活跃 } else {//其他状态 } }