iOS 的唯一标识失效以及解决办法
2016-03-10 13:48
501 查看
iOS 的唯一标识失效以及解决办法
苹果的UDID 在 ios5 后就废弃了。那么怎么办呢,最近看到github上的两个项目。拿来分享一下项目一:
https://github.com/doubleencore/DEUID这个工程演示了以下几种uuid:
NSUUID(ios5后废弃)Advertiser ID
Identifier for Vendor
OpenUDID
CFUUID
NSUUID
有什么区别?
从 API 可用的角度看:
iOS SDK | ios5(以下) | ios5(包括ios5以上) |
---|---|---|
UDID | 可用 | 不可用 |
Advertiser ID | 不可用 | ios6后可用 |
Identifier for Vendor | 不可用 | ios6后可用 |
OpenUDID | 可用 | 可用 |
CFUUID | 可用 | 可用 |
NSUUID | 不可用 | ios6后可用 |
从持久性的角度(是否会改变)看:
持久性 | 启动应用 | 从后台返回前台 | 还原广告标识 | 重装app | 系统重启 | 系统还原 |
---|---|---|---|---|---|---|
UDID | 不变 | 不变 | 不变 | 不变 | 不变 | 不变 |
Advertiser ID | 不变 | 不变 | 变化 | 不变 | 不变 | 变化 |
Identifier for Vendor | 不变 | 不变 | 不变 | 变化 | 不变 | 变化 |
OpenUDID | 不变 | 不变 | 不变 | 不变 | 不变 | 变化 |
CFUUID | 变化 | 变化 | 变化 | 变化 | 变化 | 变化 |
NSUUID | 变化 | 变化 | 变化 | 变化 | 变化 | 变化 |
Identifier for Vendor在重装app时根据情况有特殊的表现:
它是根据app编译时你设置的BundleIdentifier的前两个域来判断所拥有的app是否共享一个。说得太拗口。举个例子好了。如果你们的公司开发了三个app(A,B,C),BundleIdentifier分别为 com.hxsmart.666 , com.hxsmart.888 ,com.zhangbh.666
那么当机子安装了以上三个app时,A,B的IDFV是一样的,C的是不一样的。
这时如果这时后续还有新的app(D,E),BundleIdentifier分别为
com.hxsmart.918 , com.zhangbh.000
那么D的IDFV跟之前的A,B一致,E跟之前的C一致。
这时用户卸载了A,B,C中的一个(比如A),重装后,IDFV还是一致,没有变化过。可是一旦ABC都卸载了。你再次重装,A,B,C的IDFV就 变化 了
注意:
还原广告标识: 设置–》隐私 –》还原广告标识 (老版本在通用–》关于–》广告)项目一总结
OpenUDID 最接近于之前废弃的UDID的功能,如果系统还原了,你就当是一台新设备吧————————————————
项目二:
https://github.com/fabiocaccamo/FCUUID使用这个工程的要求:
SDK大于等于ios5ARC
导入Security.framework
Key-value storage enabled (target/Capabilities/iCloud/Key-value storage)【可选】
UICKeyChainStore【可选】(github链接)
这个工程演示了以下几种uuid
uuid(不可用)uuidForKey:key
uuidForSession
uuidForInstallation
uuidForVendor
uuidForDevice
它们在持久性的不同之处:
持久性 | 启动应用 | 重启应用 | 还原广告标识 | 重装app | 系统重启 | 系统升级 | 系统还原 |
---|---|---|---|---|---|---|---|
uuid | 变化 | 变化 | 变化 | 变化 | 变化 | 变化 | 变化 |
uuidForKey:key | 不变 | 变化 | 变化 | 变化 | 变化 | 变化 | 变化 |
uuidForSession | 不变 | 变化 | 变化 | 变化 | 变化 | 变化 | 变化 |
uuidForInstallation | 不变 | 不变 | 不变 | 变化 | 不变 | 变化 | 变化 |
uuidForVendor | 不变 | 不变 | 变化 | 不变* | 不变 | 变化 | 变化 |
uuidForDevice | 不变 | 不变 | 不变 | 不变 | 不变 | 不变 | 不变** |
和项目一大同小异,只是多了个系统升级。加*号的情况表示:
*情况和项目一举的例子一样。Identifier for Vendor**只当用户恢复了一个包括keychain’s data的备份时才生效。
https://possiblemobile.com/2013/04/unique-identifiers/ ↩
相关文章推荐
- iOS中延时执行的几种方式的比较和汇总
- ios编译错误解决方案整理
- 支付宝 iOS SDK 的简单使用
- iOS 接收新消息通知调用系统声音 震动
- iOS 调试问题记录(一)
- iOS 集成银联支付
- iOS 单例模式实现
- IOS Reveal 效果
- iOS注水动画效果以及歌词逐渐变色效果
- iOS项目工程中添加C文件,报错!
- iOS自定义cell,上下滚动tableView后,自定义cell会被打乱,甚至消失了
- iOS实现一个颜色渐变的弧形进度条
- IOS开发-初识CoreData
- iOS------苹果设备处理器指令集(iPhone初代到iPhone5s)
- 浅谈iOS开发中方法延迟执行的几种方式
- iOS 图片编辑——缩放剪切
- iOS小知识(一)
- IOS之NSCache解析
- iOS-----Crash文件分析(一)
- ios学习笔记-属性列表(做一个简单的记事本)