刚刚发现 the UIDevice uniqueIdentifier property is deprecated在 iOS 5 中,在 iOS 7 及更高版本中不可用。似乎没有可用或即将出现的替代方法或属性。
我们的许多现有应用都严格依赖此属性来唯一标识特定设备。我们今后如何处理这个问题?
来自the documentation in 2011-2012的建议是:
Special Considerations
Do not use the uniqueIdentifier property. To create a unique identifier specific to your app, you can call the
CFUUIDCreate
function to create aUUID
, and write it to the defaults database using theNSUserDefaults
class.
但是,如果用户卸载并重新安装该应用,此值将不同。
最佳答案
如果用户卸载并重新安装该应用程序,由 CFUUIDCreate
创建的 UUID 是唯一的:您每次都会获得一个新的。
但您可能希望它不是唯一的,即。 e.当用户卸载并重新安装应用程序时,它应该保持不变。这需要一些努力,因为最可靠的每个设备标识符似乎是 MAC 地址。你可以 query the MAC并将其用作 UUID。
编辑: 当然,需要始终查询同一接口(interface)的 MAC。我想最好的选择是使用 en0
。 MAC 始终存在,即使接口(interface)没有 IP/已关闭也是如此。
编辑 2: 正如其他人所指出的,自 iOS 6 以来的首选解决方案是 -[UIDevice identifierForVendor] .在大多数情况下,您应该能够将它用作旧 -[UIDevice uniqueIdentifier]
的直接替代品(但 Apple 似乎是在应用程序首次启动时创建的 UUID想要你使用)。
编辑 3: 所以这个要点不会在评论噪音中丢失:不要使用 MAC 作为 UUID,创建一个 使用 MAC 散列。该散列每次都会产生相同的结果,即使在重新安装和应用程序之间也是如此(如果散列以相同的方式完成)。无论如何,如今(2013 年)这不再是必需的,除非您需要在 iOS < 6.0 上使用“稳定的”设备标识符。
编辑 4:在 iOS 7 中,Apple 现在总是在查询 MAC 时返回一个固定值,以专门阻止 MAC 作为 ID 方案的基础。所以你现在真的应该使用 -[UIDevice identifierForVendor]或创建每个安装的 UUID。
关于ios - UIDevice uniqueIdentifier 已弃用 - 现在该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6993325/