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
IOS - 唯一标识符的获得和更新的更多相关文章
- IOS的唯一标识符问题(转)
引用地址 http://www.zhihu.com/question/22599526/answer/21938878 网上搜了下IOS手机标志的种类,直接引用过来. UDID [[UIDevice ...
- ionic获取ios唯一设备id的解决方案
经常有朋友来问这个问题. 每次都去解释这个问题也浪费不少时间, 所以还是开一篇文章, 把这个问题说清楚吧. 先纠正一个误区吧: 有同学可以通过ionic natvie的device插件获取. 我们在文 ...
- iPhone唯一标识符
为了区分iPhone设备,就要用到iPhone的唯一标识符唯一标识符包括:UDID(唯一设备标识符).identifierForVendor(供应商标识符).advertisingIdentifier ...
- GUID全局唯一标识符
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中. ...
- nodejs生成UID(唯一标识符)——node-uuid模块
unique identifier 惟一标识符 -->> uid 在项目开发中我们常需要给某些数据定义一个唯一标识符,便于寻找,关联. node-uuid模块很好的提供了这个 ...
- GUID全局唯一标识符相关知识了解
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中.在理想情 ...
- 全局唯一标识符(GUID)
全局唯一标识符,简称GUID(发音为/ˈɡuːɪd/或/ˈɡwɪd/),是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA-106 ...
- 高并发 php uniqid 用md5生成不重复唯一标识符方案
高并发 php uniqid 用md5生成不重复唯一标识符方案uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.uniqid(prefix,more_entropy)prefix 可 ...
- [ActionScript 3.0] AS3 GUID(全局唯一标识符)
package com.controls { import flash.display.Sprite; import flash.system.Capabilities; public class G ...
随机推荐
- XML理解
XML:页面之间传递数据,跨平台传递,核心标签 HTML:超文本标记语言,核心标签 <xml version='1.0'>版本1.0<Nation> <one> & ...
- 修改dedecms默认文章来源 "未知"改为关键词
在dedecms后台发表文章时文章来源是可选的,有时我们没有选择或没填写,那么前台默认文章来源即“未知”.如何将dedecms默认文章来源改为自己想要的关键词呢?即将“未知”改为“keyword”呢? ...
- cf#305 Mike and Foam(容斥)
C. Mike and Foam time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- 第一节 HTML网页和CSS样式
1. 第一行 <!DOCTYPE html> 表明网页使用的是HTML5版本 2. 网页的head内容,包含了 title,meta. 3. 网页的标题 title,注意这个显示在浏览器的 ...
- 最新《App Store审核指南》翻译
感谢您付出宝贵的才华与时间来开发iOS应用程程序.从职业与报酬的角度而言,这对于成千上万的开发员来说一直都是一项值得投入的事业,我们希望帮助您加入这个成功的组织.我们发布了<App Store审 ...
- Xcode如何找到默认的生成路径?
我最近刚刚入门ObjectiveC,在研习<Objective C程序设计(第6版)>一书. 今天看到有关文件和归档的章节,但是我对XCode的生成文件路径并不了解,然后,在调试代码的时候 ...
- WebSocket帧数据 解码/转码
数据从浏览器通过websocket发送给服务器的数据,是原始的帧数据,默认是被掩码处理过的,所以需要对其利用掩码进行解码. 从服务器发送给浏览器的数据是默认没有掩码处理的,只要符合一定结构就可以了.具 ...
- Effective Java 读书笔记之六 方法
一.检查参数的有效性 1.考虑参数有哪些限制,把限制写到文档中,在方法的开头处通过显式地检查来实施这些限制. 二.必要时进行保护性拷贝 1.如果类具有从客户端得到或者返回的可变组件,类就必须考虑保护性 ...
- NGUI Sprite 和 Label 改变Layer 或父物体后 未更新深度问题
using UnityEngine; using System.Collections.Generic; /// <summary> /// Sprite is a textured el ...
- 在Fedora 20 上安装Mysql并初始化root密码
[root@localhost ~]# yum -y install community-mysql-server #安装数据库 已加载插件:langpacks, refresh-packagekit ...