ios - UIDevice uniqueIdentifier 已弃用 - 现在该怎么办?

标签 ios deprecated uidevice

刚刚发现 the UIDevice uniqueIdentifier property is deprecatediOS 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 a UUID, and write it to the defaults database using the NSUserDefaults 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/

相关文章:

ios - 如何在 iOS 中获取大量电池信息?

ios - 广告横幅内容大小会使设备崩溃?

javascript - Livequery 和 DOMNodeInserted 替代 IE

java - 如何替换已弃用的方法 Date.setHours(int)?

ios - 如何设置通知对象为 'UIDevice.currentDevice()'?

ios - subview 按钮不起​​作用

ios - Storyboard困惑 : UITextView and UIView not visible, UITextFields 不可编辑?

iphone - 要求用户通过 iphone 中的 exit(0) 重新启动应用程序?

ios - Xcode 根据目标更改颜色主题

iphone - 让 iPad 应用程序成为通用应用程序