【问题标题】:iOS7 - Device unique identifier [duplicate]iOS7 - 设备唯一标识符[重复]
【发布时间】:2013-10-01 12:52:37
【问题描述】:

我们的 iOS 应用程序适用于特定用户。因此,我们使用设备唯一标识符进行用户识别。这种方法在 iOS 6 之前都可以正常工作,因为我们每次都得到相同的值。

NSString *strUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];

在 iOS 7 中,上述方法正在重新调整不同的值,我们在用户识别方面遇到了问题。 iOS 7 apis 提供以下替代。

NSUUID *oNSUUID = [[UIDevice currentDevice] identifierForVendor];
[strApplicationUUID setString:[oNSUUID UUIDString]];

我将“uniqueIdentifier”替换为“identifierForVendor”,并创建了 Ad hoc 构建。在 iOS 7 和 iOS 6 设备上安装构建。到目前为止,在 iOS 7 中,我每次都得到相同的值,但是当我们删除并重新安装应用程序时,iOS 6 每次都会给出不同的值。

目前应用程序在 App Store 上不可用。所以我不确定这个 api 如何用于 App Store 构建。

问题: 1) 对于 appstore 应用程序,“identifierForVendor”是否每次都为 iOS 7 返回相同的值?或者当用户将来删除并重新安装应用程序时它可能会改变? 2)iOS 7 api中的“唯一标识符”是否有任何其他替代方法,它们为iOS 6和7返回相同的值? 3) 任何其他建议...

【问题讨论】:

    标签: ios objective-c ios7 uniqueidentifier


    【解决方案1】:

    正如您在documentation here 中看到的:

    对于来自 同一供应商在同一设备上运行。返回不同的值 对于来自不同供应商的同一设备上的应用程序,以及 不同设备上的应用程序,无论供应商如何。

    如果应用程序在 背景,在用户第一次解锁设备之前 设备重启后。如果值为 nil,则等待并获取 稍后再返回该值。

    此属性中的值在应用程序(或其他 来自同一供应商的应用程序)安装在 iOS 设备上。价值 当用户从 设备并随后重新安装其中的一个或多个。因此,如果 您的应用程序将此属性的值存储在任何地方,您应该 优雅地处理标识符发生变化的情况。

    简而言之,如果该供应商的至少一个应用程序保留在设备上,则特定供应商的标识符将保持不变。一旦没有更多的应用程序(或者在单个应用程序的情况下,它被重新安装),标识符可以并且将会改变。据我所知,iOS 6 和 iOS 7 应该没有区别,所以你看到的任何区别都是巧合。

    【讨论】:

      【解决方案2】:

      3) 任何其他建议...

      您应该考虑识别和授权用户而不是设备的策略。依赖于特定于设备的标识符可防止授权用户在没有某种管理员交互的情况下切换设备,并允许非授权用户在碰巧找到/窃取/借用授权设备时访问。您可以通过依赖用户凭据而不是设备标识符来避免这些问题。

      【讨论】:

      • 他可能应该,但这不是对实际问题的回答,只是一个讲座......
      • @ChadRobinson OP 询问“任何其他建议”,正如您从引用中看到的那样,这是我回答的问题的一部分。
      • 好的,但我认为你的答案不应该被检查为正确的。
      • 这有点漏掉了重点,不是吗?
      • 一个有效的用例是您已经在对用户进行身份验证,并且您想区分您正在使用用户的多个设备中的哪一个。您不关心设备的任何细节,您只想唯一标识设备。
      猜你喜欢
      • 2015-08-31
      • 2018-06-30
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      相关资源
      最近更新 更多