变更记录

序号 录入时间 录入人 备注
1 2015-03-31 Alfred Jiang -
2 2015-12-23 Alfred Jiang -

方案名称

UDID - 解决方案介绍与比较

关键字

UDID \ UUID \ 设备唯一标识符

需求场景

  1. 需要设备唯一标识符的场景

参考链接

  1. CSDN - IOS7开发~UDID解决方法
  2. 现有IOS设备唯一标示符的方案比较

详细内容

1. UDID
[[UIDevice currentDevice] uniqueIdentfier]

iOS 官方最早提供的 UDID 方案,根据某一公式,使用设备序列号、网卡地址等信息作为参数计算而来, iOS6 之后该计算公式发生了改变。

该方法返回的结果在所有应用中都相同,并且卸载应用、刷机、还原设备均不会发生改变,是最为准确的设备唯一标示符。

iOS5 之后,该方法被标记为废弃!最终,在 2013 年 5 月 1 号之后, AppStore 禁止任何使用该方法的应用上架。

iOS7 中对外公开的 API 中已经移除了该方法!

2. 网卡地址

通过 Unix 级别的 API 去获取 Wifi 的网卡地址。

该方法属于 UDID 替代方案中最为准确的一种,因为网卡地址不会因为刷机、还原设备而发生改变。故追求唯一性的厂商多选择此种方案!

在 iOS7 之后,应用已经无法获取网卡地址,所以该方案在 iOS7 中也已经被废弃。

3. OpenUDID

开源的一个 UDID 替代方案,原理是利用应用间的剪贴板共享和本地一些必要的缓存信息,让多个应用间共享一个 UUID 。

OpenUDID 在官方废弃 UDID 接口之后,受到广泛的欢迎!可以说是现在大多数应用的 UDID 替代方法。

OpenUDID 在刷机、还原设备后就会产生新的 UDID ,事实上,由于剪贴板的特殊性,如果所有使用了 OpenUDID 的应用被全部卸载之后,再次安装的应用取到的 OpenUDID 将会是一个全新的值!

iOS7 中,不同组的应用(即不同厂商)的应用之间不再能共享剪贴板间的数据!

同组(即同一厂商)应用的定义为: Info.plist 中关于软件唯一标示符的字段 CFBundleIdentifier 中的前两段标识符(例如 com.mycompany )相同。

固在 iOS7 中, OpenUDID 也将慢慢失去它的意义。

4. 保存在 NSUserDefault 中 的UUID

在 iOS5 将 UDID 标为废弃之后,官方提供的替代方案。即使用 CFUUIDCreate 生成一个 UUID ,并将之保存在 NSUserDefault 中,用它作为设备标识符。在 iOS6 之后,苹果更推出 NSUUID 来替代 CFUUIDCreate ,但本质是一样的。

UUID 每次都会生成一个新的字符串,也就是说应用被卸载之后,就会被认为是一个新的设备,更不用提刷机、还原设备了。

故基本无人采用 UUID 的方案。

5. 厂商唯一标识符 identifierForVender
[[UIDevice currentDevice] identifierForVender]

iOS6 中推出的 UDID 替代方案,该方法对于同一厂商的应用返回相同的值,不同厂商所得到的值不同。

该方案刷机、还原设备后,获得值将会改变。同样注意的是:如果同一厂商安装的所有应用都被卸载后,新安装的同一厂商的应用同样也将获得新的值,而不是原来的值!

由于不能跨厂商,并且软件卸载后再安装有改变的可能性,该方案也并没有被广大开发商接受。

6. 广告标识符 advertisingIdentifier (推荐方案)
[[ASIdentifierManager sharedManager] advertisingIdentifier];

iOS6 中推出的另一款 UDID 替代方案,该方法对所有厂商的应用返回相同的值。同样提供的是另一个 API , advertisingTrackingEnabled ,该参数表示用户是否希望广告追踪被限定,但该参数仅仅是个布尔值,用于表示用户意愿,不影响 advertisingIdentifier 的读取。

该方法由于是官方提供的,并且所有厂商的应用取到的值相同,所以相对接受度好些,但是由于仅在 iOS6 上适用,所以更多人还是选择了 OpenUDID 的方案。

该方法刷机、还原设备后,获得的值将会改变。此外,用户如果通过 设置->关于本机->广告->还原广告标识符,就可以重新生成一个新的值。

该方法是 iOS7 上目前官方允许的范畴内最为可接受的方案。

7. IMEI

iOS 官方 API 无法获得 IMEI ,或者说禁止获取。故很少有人在 iOS 上去读取 IMEI 。但 IMEI 作为设备唯一标识符是最为准确的方法之一!不会随着刷机、还原设备而改变!

读取 IMEI 的应用将会被 AppStore 拒绝!

同样类似的方案有蓝牙地址、 iOS 设备序列号(SerialNumbedr)等等。

效果图

(无)

备注

(无)

results matching ""

    No results matching ""