iOS平台UDID方案比较
来源:互联网 发布:网络销售股票违法吗 编辑:程序博客网 时间:2024/05/21 04:24
苹果在iOS6中禁用了[UIDevice uniqueIdentifier],在iOS7中又把mac地址的获取给堵上了。没办法,毕竟人家是老大,说不让你用,你也没办法。
在这边总结一下现有的一部分UDID获取方法(有苹果推荐的,也有第三方的),目的在于抛砖,没有切实的说明哪种方法好用。用哪种方法,完全由大家自己根据需要来决定。
iOS2~iOS7目前已有的技术方案
方案提供方实现方法用途及使用情况传统UDID苹果APIUIDevice的实例方法uniqueIdentifier直接可获取● 获取设备的唯一识别码
● 在iOS5及之前的版本中,基本上使用该方法来获取UDID。MAC+MD5UNIX系统调用使用UNIX API获取设备的MAC地址,再使用MD5加密算法生成一个字符串● 由于苹果在iOS6后停用了UDID方案,所以大部分应用都开始使用这种方案来生成设备的唯一识别码CFUUID/NSUUID苹果API通过唯一标识设备的一个值(通常是以太网硬件地址)和一个时间值来生成一个唯一标识串● 苹果建议基于CFUUID来生成一个UDID,然后将其存在程序中使用IDFV苹果APIUIDevice的实例方法identifierForVendor● 用于标识供应商ADID苹果APIASIdentifierManager的实例方法advertisingIdentifier● 用于广告服务OpenUDID第三方开源代码以CFUUID为基础生成一个串,并同时存储于系统剪切板和程序的沙盒(NSUserDefault)中,应用程序从这两个地方之一获取UDID● 在苹果宣布禁用传统UDID方案后,这是目前使用较为广泛的开源方案,包括友盟在内的很多开发商都使用这一方案。SecureUDID第三方开源代码以CFUUID为基础生成一个串,并同时存储于程序剪切板中,程序可以从该剪切板中获取UDID●在苹果宣布禁用传统UDID方案后,部分应用也采用了该方案(目前github上数据显示该方案下载量仅次于OpenUDID,具体使用情况未知)
系统支持情况
苹果在iOS6以后,已禁用了UIDevice的uniqueIdentifier方法,所以传统的UDID方法在iOS6以后已不能使用;而从iOS7开始,获取MAC地址的方法统一返回02:00:00:00:00:00,所以使用MAC+MD5方法已无意义。
持久化情况
优缺点
● 删除程序再安装时,会生成新的UDID
● 对于同一设备上不同供应商的程序,该值是不同的
● 所谓同一供应商是由CFBundleIdentifier中的反转DNS前两部分来确定,如com.test1和com.test2即认为不是同一供应商
● 用户如果删除同一供应商的所有程序,再安装该供应商的程序时,该值会改变。
● 该值在程序运行于后台时,或用户在重启系统后第一次解锁设备可能返回nil值。
● 即使用户限制广告跟踪,也可以使用该值来统计用户数量、安全等方面的操作
● 该值对于所有的供应商都是一样的
● 只能用于广告服务的程序访问一个唯一标识
● 如果用户还原所有系统设置或还原广告标识符时,可能重置该值。
● 该值在程序运行于后台时,或用户在重启系统后第一次解锁设备可能返回nil值。
● 没有用到取MAC地址等可能被苹果禁用的API
● 在系统恢复设置或刷机的情况下会丢失
● 非苹果原生API
● 与硬件设备无关
● 不能确保不同设备上的UDID不同
● 用户可以选择阻止SecureUDID收集UDID信息
● 如果用户备份A设备系统并将其恢复到B设备,则B设备将得到A设备的UDID
● 删除程序并清空剪切板可能会导致丢失
● 非苹果原生的API
注:优缺点是个人判断,还请各位看官指正
参考文献
● http://www.doubleencore.com/2013/04/unique-identifiers/
在这边总结一下现有的一部分UDID获取方法(有苹果推荐的,也有第三方的),目的在于抛砖,没有切实的说明哪种方法好用。用哪种方法,完全由大家自己根据需要来决定。
iOS2~iOS7目前已有的技术方案
方案提供方实现方法用途及使用情况传统UDID苹果APIUIDevice的实例方法uniqueIdentifier直接可获取● 获取设备的唯一识别码
● 在iOS5及之前的版本中,基本上使用该方法来获取UDID。MAC+MD5UNIX系统调用使用UNIX API获取设备的MAC地址,再使用MD5加密算法生成一个字符串● 由于苹果在iOS6后停用了UDID方案,所以大部分应用都开始使用这种方案来生成设备的唯一识别码CFUUID/NSUUID苹果API通过唯一标识设备的一个值(通常是以太网硬件地址)和一个时间值来生成一个唯一标识串● 苹果建议基于CFUUID来生成一个UDID,然后将其存在程序中使用IDFV苹果APIUIDevice的实例方法identifierForVendor● 用于标识供应商ADID苹果APIASIdentifierManager的实例方法advertisingIdentifier● 用于广告服务OpenUDID第三方开源代码以CFUUID为基础生成一个串,并同时存储于系统剪切板和程序的沙盒(NSUserDefault)中,应用程序从这两个地方之一获取UDID● 在苹果宣布禁用传统UDID方案后,这是目前使用较为广泛的开源方案,包括友盟在内的很多开发商都使用这一方案。SecureUDID第三方开源代码以CFUUID为基础生成一个串,并同时存储于程序剪切板中,程序可以从该剪切板中获取UDID●在苹果宣布禁用传统UDID方案后,部分应用也采用了该方案(目前github上数据显示该方案下载量仅次于OpenUDID,具体使用情况未知)
系统支持情况
苹果在iOS6以后,已禁用了UIDevice的uniqueIdentifier方法,所以传统的UDID方法在iOS6以后已不能使用;而从iOS7开始,获取MAC地址的方法统一返回02:00:00:00:00:00,所以使用MAC+MD5方法已无意义。
方案
iOS 2
iOS 3
iOS 4
iOS 5
iOS 6
iOS 7
UDID
√
√
√
√
×
×
MAC+MD5
√
√
√
√
√
×
CFUUID
√
√
√
√
√
√
NSUUID
×
×
×
×
√
√
IDFV
×
×
×
×
√
√
Ad ID
×
×
×
×
√
√
OpenUDID
?
√
√
√
√
√
SecureUDID
?
√
√
√
√
√
持久化情况
启动程序
从后台返回
重置广告标识
重新安装程序
系统重启
系统还原设置
升级系统
重装系统
传统UDID
√
√
√
√
√
√
√
√
MAC+MD5
√
√
√
√
√
√
√
√
CFUUID/NSUUID
×
×
×
×
×
×
×
×
IDFV
√
√
√
×
√
×
?√
?×
ADID
√
√
×
√
√
×
?√
?×
OpenUDID
√
√
√
√
√
×
?√
?×
SecureUDID
√
√
√
×
√
×
?√
?×
注:√表示能够保证UDID的持久化,
×表示该情况下UDID可能会丢失改变,?表示该种情况没有实际验证过,纯属猜测(毕竟升级系统什么的太麻烦)
优缺点
优点
缺点
CFUUID/NSUUID
● 删除程序再安装时,会生成新的UDID
IDFV
● 对于运行于同一设备上的同一供应商的所有程序,该值都是相同的。● 对于同一设备上不同供应商的程序,该值是不同的
● 所谓同一供应商是由CFBundleIdentifier中的反转DNS前两部分来确定,如com.test1和com.test2即认为不是同一供应商
● 用户如果删除同一供应商的所有程序,再安装该供应商的程序时,该值会改变。
● 该值在程序运行于后台时,或用户在重启系统后第一次解锁设备可能返回nil值。
ADID
● 该值由系统持久化● 即使用户限制广告跟踪,也可以使用该值来统计用户数量、安全等方面的操作
● 该值对于所有的供应商都是一样的
● 只能用于广告服务的程序访问一个唯一标识
● 如果用户还原所有系统设置或还原广告标识符时,可能重置该值。
● 该值在程序运行于后台时,或用户在重启系统后第一次解锁设备可能返回nil值。
OpenUDID
● 同一台设备上使用OpenUDID的所有程序其获取到的UDID都是相同的● 没有用到取MAC地址等可能被苹果禁用的API
● 在系统恢复设置或刷机的情况下会丢失
● 非苹果原生API
SecureUDID
●对于运行于同一设备上的同一供应商的所有程序,该值都是相同的(供应商自己控制)。这样防止因一个程序外泄UDID,而导致设备的UDID外泄● 与硬件设备无关
● 不能确保不同设备上的UDID不同
● 用户可以选择阻止SecureUDID收集UDID信息
● 如果用户备份A设备系统并将其恢复到B设备,则B设备将得到A设备的UDID
● 删除程序并清空剪切板可能会导致丢失
● 非苹果原生的API
注:优缺点是个人判断,还请各位看官指正
参考文献
● http://www.doubleencore.com/2013/04/unique-identifiers/
● Apple开发文档
http://www.cocoachina.com/bbs/read.php?tid=144524&page=1
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- iOS平台UDID方案比较
- ios UDID 替代方案
- iOS 之UDID比较
- iOS小技巧-使用UUID+keychain替代udid方案
- UDID替代方案
- UDID替代方案
- UDID替代方案
- 关于cocos2d-x的新人求职的一些问题
- 数据结构
- sun.misc.BASE64Encoder找不到jar包的解决方法
- mysql的join优化
- Allegro PCB Editor中的class和subclass讲解
- iOS平台UDID方案比较
- [nBook] 在线图书馆
- 【算法】最短路径之Dijkstra(I)
- jsp页面跳转
- 解决dreamweaver代码提示失效的问题
- jsp 隐含对象
- 关于针对iOS 7开发的几点思考
- Java 实现邮件发送
- myeclipse编辑jsp页面时光标乱跳