iOS-获取DeviceToken

AppDelegate.m 文件中

- (void)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
    // iOS8系统以上
    if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }
    // iOS8系统以下
    else {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
    }
}

// iOS8+需要使用这个方法
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    // 检查当前用户是否允许通知,如果允许就调用 registerForRemoteNotifications
    if (notificationSettings.types != UIUserNotificationTypeNone) {
        [application registerForRemoteNotifications];
    }
}

// 注册远程通知成功后,会调用这个方法,把 deviceToken 返回给我们
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    NSLog(@"deviceToken=%@", deviceToken);
}

// 注册远程通知失败后,会调用这个方法
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"注册远程通知失败----%@", error.localizedDescription);
}

// 当接收到远程通知
// 前台(会调用)
// 从后台进入到前台(会调用)
// 完全退出再进入APP 不会执行这个方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    NSLog(@"收到远程通知----%@", userInfo);
}

// 当接收到远程通知(实现了这个方法,则上面的方法不再执行)
// 前台(会调用)
// 从后台进入到前台(会调用)
// 完全退出再进入APP (也会调用这个方法)
// 
// 如果要实现:只要接收到通知,不管当前应用在前台、后台、还是锁屏,都执行这个方法
//    > 必须勾选后台模式 Remote Notification 
//    > 告诉系统是否有新的内容更新(执行完成代码块)
//    > 设置发送通知的格式 {"content-available" : "随便传"} (在 aps 键里面设置)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    NSLog(@"收到远程通知2----%@", userInfo);

    // 调用系统回调代码块的作用
    //  > 系统会估量app消耗的电量,并根据传递的 `UIBackgroundFetchResult` 参数记录新数据是否可用
    //  > 调用完成的处理代码时,应用的界面缩略图会更新
    completionHandler(UIBackgroundFetchResultNewData);
}

你可能感兴趣的:(iOS-获取DeviceToken)