iOS7 – 设备唯一标识符

我们的iOS应用程序是为特定的用户。 所以,我们使用设备唯一标识符来识别用户。 这种方法工作正常,直到iOS 6,因为我们每次都获得相同的价值。

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

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

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

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

目前应用程序在App Store上不可用。 所以我不知道这个API是如何工作的应用程序商店构build。

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

3)其他build议…

您应该考虑识别和授权用户而不是设备的策略。 根据设备特定的标识符,防止授权用户在没有某种pipe理员交互的情况下切换设备,并且如果发现/窃取/借用授权设备,则允许非授权用户访问。 您可以通过依靠用户凭据而不是设备标识符来避免这些问题。

正如你可以在这里看到的文档 :

对于来自同一设备上运行的同一供应商的应用程序,此属性的值是相同的。 对于来自不同供应商的同一设备上的应用程序以及不同设备上的应用程序,不pipe供应商是什么,都会返回不同的值。

如果应用程序在后台运行,则此属性的值可能为零,用户在重新启动设备后第一次解锁设备。 如果该值为零,稍后再等待并获取该值。

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

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