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);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 9,215评论 2 7
  • 最近一朋友正准备跳槽,就从各处搜索整理一些基础,便于朋友复习,也便于自己复习查看. 1. 回答person的ret...
    smile丽语阅读 5,791评论 0 7
  • ## 可重入函数 ### 可重入性的理解 若一个程序或子程序可以安全的被并行执行,则称其为可重入的;即当该子程序正...
    夏至亦韵阅读 4,057评论 0 0
  • 原文链接http://www.cocoachina.com/ios/20161103/17938.html?utm...
    wycandyy阅读 6,955评论 0 22
  • 类名操作 1.添加类名:addClass(className) 为指定元素添加类名 2.移除类名:removeCl...
    MGd阅读 3,803评论 0 0

友情链接更多精彩内容