iOS 的唯一标识失效以及解决办法

时间:2021-05-31 07:26:51

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后可用

参考文章1.


从持久性的角度(是否会改变)看:

持久性 启动应用 从后台返回前台 还原广告标识 重装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大于等于ios5
  • ARC
  • 导入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的备份时才生效。

  1. https://possiblemobile.com/2013/04/unique-identifiers/