关于ios:iOS7 – 设备唯一标识符

iOS7 - Device unique identifier

本问题已经有最佳答案,请猛点这里访问。

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

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

在iOS7中,上面的方法是重新调整不同的值,我们在用户识别方面遇到了问题。iOS7API提供以下替代方案。

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

我用"IdentifierForVendor"替换了"UniqueIdentifier",并创建了临时构建。安装在iOS 7和iOS 6设备上。到目前为止,在iOS 7中,我每次都得到相同的值,但在我们删除和重新安装应用程序时,iOS 6每次都给出不同的值。

当前应用程序在应用程序商店中不可用。所以我不确定这个API如何用于应用商店构建。

问题:1)对于AppStore应用程序,"IdentifierForVendor"是否每次都为iOS 7返回相同的值?或者在以后用户删除和重新安装应用程序时可能会发生变化?2)iOS 7 API中的"唯一标识符"是否有其他替代方法,这些方法对iOS 6和7返回相同的值?3)其他建议…


正如您在文档中看到的:

The value of this property is the same for apps that come from the
same vendor running on the same device. A different value is returned
for apps on the same device that come from different vendors, and for
apps on different devices regardless of vendor.

The value of this property may be nil if the app is running in the
background, before the user has unlocked the device the first time
after the device has been restarted. If the value is nil, wait and get
the value again later.

The value in this property remains the same while the app (or another
app from the same vendor) is installed on the iOS device. The value
changes when the user deletes all of that vendor’s apps from the
device and subsequently reinstalls one or more of them. Therefore, if
your app stores the value of this property anywhere, you should
gracefully handle situations where the identifier changes.

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


3) Any other suggestions...

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