iOS7 - 设备唯一标识符

时间:2013-09-25 19:10:03

标签: ios objective-c ios7 uniqueidentifier

我们的iOS应用程序适用于特定用户。因此,我们使用设备唯一标识符进行用户识别。这种方法适用于iOS 6,因为我们每次都获得相同的价值。

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

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

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

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

目前App Store上没有应用程序。所以我不确定这个API如何适用于App Store构建。

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

2 个答案:

答案 0 :(得分:29)

正如您在documentation here中所看到的那样:

  

此属性的值对于来自的应用程序是相同的   在同一设备上运行的同一供应商。返回不同的值   对于来自不同供应商的同一设备上的应用程序,以及   不论供应商如何,都可以在不同的设备上使用。

     

如果应用程序正在运行,则此属性的值可能为nil   背景,在用户第一次解锁设备之前   设备重启后。如果值为nil,则等待并获取   这个价值会在以后再次出现。

     

此应用程序(或其他应用程序)中此属性的值保持不变   iOS设备上安装了来自同一供应商的应用程序。价值   当用户从中删除所有该供应商的应用程序时更改   设备,然后重新安装其中一个或多个。因此,如果   你的应用程序应该在任何地方存储此属性的值   优雅地处理标识符更改的情况。

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

答案 1 :(得分:5)

  

3)任何其他建议......

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