美文网首页
iOS-获取DeviceToken

iOS-获取DeviceToken

作者: lancely | 来源:发表于2017-02-14 14:59 被阅读1993次

    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

          本文链接:https://www.haomeiwen.com/subject/hwbxwttx.html