我们的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)任何其他建议......
答案 0 :(得分:29)
正如您在documentation here中所看到的那样:
此属性的值对于来自的应用程序是相同的 在同一设备上运行的同一供应商。返回不同的值 对于来自不同供应商的同一设备上的应用程序,以及 不论供应商如何,都可以在不同的设备上使用。
如果应用程序正在运行,则此属性的值可能为nil 背景,在用户第一次解锁设备之前 设备重启后。如果值为nil,则等待并获取 这个价值会在以后再次出现。
此应用程序(或其他应用程序)中此属性的值保持不变 iOS设备上安装了来自同一供应商的应用程序。价值 当用户从中删除所有该供应商的应用程序时更改 设备,然后重新安装其中一个或多个。因此,如果 你的应用程序应该在任何地方存储此属性的值 优雅地处理标识符更改的情况。
简而言之,如果该供应商的至少一个应用程序仍保留在设备上,则特定供应商的标识符将保持不变。一旦没有剩下的应用程序(或者在单个应用程序的情况下重新安装),标识符可以并且将会改变。据我所知,iOS 6和iOS 7应该没有区别,所以你看到的任何差异都是巧合。
答案 1 :(得分:5)
3)任何其他建议......
您应该考虑识别和授权用户而不是设备的策略。取决于特定于设备的标识符,防止授权用户在没有某种管理员交互的情况下切换设备,并允许非授权用户在他们碰巧找到/窃取/借用授权设备时进行访问。您可以依靠用户凭据而不是设备标识符来避免这些问题。