【问题标题】:Swift: how to programmatically get the unique identifier of an iOS device? [duplicate]Swift:如何以编程方式获取 iOS 设备的唯一标识符? [复制]
【发布时间】:2020-02-29 10:24:57
【问题描述】:

我正在创建一个 iOS 应用程序,我需要一个唯一标识符,即使用户删除所有内容(重置为出厂设置)也必须相同。

我知道几年前我们可以获取 UDID,但现在我们只能创建一个 UUID,每次用户重新安装应用程序或将设备重置为出厂设置时,该 UUID 都会更改。

【问题讨论】:

  • @RonakAdeshara 这在重新安装应用程序的情况下将不起作用。
  • 不要尝试这样做。苹果没有让这件事变得简单(如果可能的话)是有充分理由的。想想购买二手 iOS 设备的用户。你真的想把那个新人当作以前的主人一样对待吗?尊重隐私,不要绕开它。
  • 这能回答你的问题吗? How to get a unique device ID in Swift?
  • 除了@rmaddy 所说的 - 如果可能的话,您可以将您的用户数据出售给其他供应商。

标签: ios swift uuid udid


【解决方案1】:

这是故意不可能的。不允许您以这种方式跟踪用户。如果你试图绕过这个限制,Apple 可能会在未来的版本中破坏你的技术(他们已经悄悄地破坏了人们以前使用的几个黑客,通常没有警告),他们可能会完全拒绝该应用程序。

识别设备的正确方法是使用identifierForVendor。每当从设备中删除最后一个应用程序并重新安装其中一个应用程序时,它就会重置为新值。 (“你的应用程序”是指它们的 bundle id 开头相同的应用程序。)它可以被重置是一个系统功能,Apple 不允许你绕过它。

【讨论】:

    【解决方案2】:

    我所做的是在第一次启动应用程序时通过 NSUUID 创建一个 UUID 字符串,并将这个 UUID 字符串存储在钥匙串中。下次当你想得到一个唯一的字符串时,你可以简单地从 Keychain 中读取这个 UUID 字符串。所以这个 UUID 可以被当作一个 UDID 对待。

    【讨论】:

    • 此技术不再适用于 iOS 10.3。当用户删除应用程序时,钥匙串数据将被删除。
    【解决方案3】:

    你可以使用以下

    let id = UIDevice.current.identifierForVendor?.uuidString
    
    

    【讨论】:

    • 这不符合问题中列出的要求。
    猜你喜欢
    • 2013-09-19
    • 2015-10-17
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2014-11-11
    • 1970-01-01
    • 2014-04-05
    相关资源
    最近更新 更多