获取唯一UUID/UDID的方案
来源:互联网 发布:广联达软件安装教程 编辑:程序博客网 时间:2024/06/06 04:26
如何保证获取到的UUID能够唯一标识每一台设备呢?我们知道通过UIDevice可以获取到UUIDString,但是如果App被删除了然后重新安装,就会得到不同的UUIDString,这并不是我们希望的。
在同一设备上运行来源于同一开发商的App,获取到的UUIDString属性是同一个值。当在同一设备上运行来源于不同的开发商的App,所获取到的UUIDString是不同的。在不同的设备上,不管是否同属于同一个开发商,得到的UUIDString都会不同。
当设备重启后,若用户第一次未解锁设备,而app在后台运行时,这个UUIDString可能为nil。如果值为nil,请等待并在稍候重新获取。
当app或者另外来源于同一开发商的app被安装到同一设备上,这个UUIDString会保持一致(比如上面的小例子,打印出来就是一致的)。当用户删除掉设备上所有同一开发商的app后,重新安装其中某一个app,这时候所获取到的UUIDString就会发生变化。因此,不管app存储将这个UUID存储到哪里,你都应该手动处理这种改变。
那么如何解决这种改变呢?
解决方案就是能所生成的UUIDString存储到KeyChain中,使用同一个access group、同一个identifier。每次获取UUID,都先从KeyChain中获取,若为空,则通过UIDevice获取UUIDString并存储到KeyChaing,
代码版本如下:
+ (NSString *)UUID {
//MARK:此处的 @"5CKSJSE23P.com.haodf.mainGroup" 字串不能动,否则会导致获取的值错误或者 nil
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"HuangyibiaoAppID" accessGroup:@"com.huangyibiao.test.group"];
NSString *UUID = [wrapper objectForKey:(__bridge id)kSecValueData];
if (UUID.length == 0) {
UUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
[wrapper setObject:UUID forKey:(__bridge id)kSecValueData];
}
return UUID;
}
0 0
- 获取唯一UUID/UDID的方案
- 获取唯一UUID/UDID的方案
- 获取唯一UUID/UDID的方案
- 获取唯一标识UUID UDID
- 获取唯一标识UUID UDID
- 获取唯一标识符(UDID/UUID)
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID,UUID分别是什么含义?
- UDID和UUID的替换方案
- 在 iOS 7 中获取唯一标识符(UDID/UUID)
- 在 iOS 7 中获取唯一标识符(UDID/UUID)
- 在ios7中获取唯一标识符(UDID/UUID)
- 在 iOS 7 中获取唯一标识符(UDID/UUID)
- 在 iOS 7 中获取唯一标识符(UDID/UUID)
- 在 iOS 中获取唯一标识符(UDID/UUID)
- 在 iOS 7 中获取唯一标识符(UDID/UUID)
- 获取UDID和UUID
- iOS7上获取唯一的udid
- 在 IOS 7 中获取唯一标识符(UDID/UUID)(转)
- 居中问题
- 文章标题
- canvas绘制图像或者文字时模糊
- Quartz的简单使用
- 队列——链表实现
- 获取唯一UUID/UDID的方案
- java 函数式接口(FuncationalInterface)
- 【转载】入门必看-嵌入式开发的学习方法
- 浅谈算法和数据结构: 七 二叉查找树
- Android 主流网络请求框架 Android-async-http
- LeetCode 142 Linked List Cycle II
- 微信支付异步回调的坑,调用成功了回调地址却没有数据
- ios 内置支付宝
- hdu3833 YY's new problem--哈希表