• IOS


    苹果公司不可能让其他人获得个人终端的唯一标识符,所以一个终端给另一个终端发送消息,必须经过苹果的APNS(Apple Push Notification Service)....而且苹果为了防止苹果用户的唯一标示符泄露,会更新..我们在APNS存储的唯一标识符

    1. 需要告诉苹果的服务器,当前应用程序需要接收远程通知

    2. 接收到苹果返回的设备代号

    3. 本地保存的设备代号和接收到得苹果服务器返回的设备代号对比,当Token发生变化时,提交给服务器保存新的Token

    4. 将Token保存至系统偏好

    #import "ITAppDelegate.h"

    @implementation ITAppDelegate

    /**
     远程消息推送必须在真机上运行!
     */
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // 需要告诉苹果的服务器,当前应用程序需要接收远程通知
        [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
        
        return YES;
    }

    #pragma mark - 获取到设备的代号(令牌)
    // 接收到苹果返回的设备代号
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
    {
        // 第一次运行获取到DeviceToken时间会比较长!
        NSLog(@"%@", deviceToken);
        
        // 将deviceToken转换成字符串,以便后续使用
        NSString *token = [deviceToken description];
        NSLog(@"description %@", token);
        
        // =======================================================
        // 如果DeviceToken发生变化,需要通知服务器
        // 每次都记录住从服务器获取到得DeviceToken
        // 再次获取时进行比对
        // 从偏好设置取出当前保存的Token
        NSString *oldToken = [[NSUserDefaults standardUserDefaults] objectForKey:@"DeviceToken"];
        
        // 当Token发生变化时,提交给服务器保存新的Token
    //    if (![oldToken isEqualToString:token]) {
    //        
    //        // 将deviceToken通过Post请求,提交给自己的服务器即可!
    //        // 发送Post请求
    //        NSURL *url = [NSURL URLWithString:@"公司后台服务器的网址"];
    //        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.f];
    //        
    //        request.HTTPMethod = @"POST";
    //        request.HTTPBody = @"转换后的设备ID以及其他信息[之前的Token]";
    //        
    //        // SQL: update t_deviceTable set token = newToken where token = oldToken;
    //        
    //        // 同步:必须执行完才能继续
    //        // 异步:直接交给其他线程工作,不干扰主线程工作,用户也感觉不到延迟
    //        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    //            // 偷偷的将用户信息传送到公司的服务器
    //        }];
    //    }
        
        // 将Token保存至系统偏好
        [[NSUserDefaults standardUserDefaults] setObject:token forKey:@"DeviceToken"];
    }

    @end

  • 相关阅读:
    线段树节点到底开多大
    HDU4901 The Romantic Hero DP
    VIM 配置文件可执行命令
    codeforces159D
    codeforces416B
    codeforces165C
    codeforces332B
    Node.js权威指南 (9)
    iOS-android-windowsphone等移动终端平台开发流程图
    前端面试题细节问题
  • 原文地址:https://www.cnblogs.com/mcj-coding/p/3565470.html
Copyright © 2020-2023  润新知