iOS 远程推送通知、程序间调用时的AppDelegate 方法调用

//这个方法无论是远程推送还是程序间调用都用到了
- (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 {//其他状态   } }

 

posted @ 2015-12-03 13:49  没落云端  阅读(454)  评论(0编辑  收藏  举报