fur*_*ani 23 objective-c uniqueidentifier ios ios7
我们的iOS应用程序适用于特定用户.因此,我们使用设备唯一标识符进行用户识别.这种方法适用于iOS 6,因为我们每次都获得相同的价值.
NSString *strUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];
Run Code Online (Sandbox Code Playgroud)
在iOS 7中,上述方法重新调整了不同的值,我们在用户识别方面遇到了问题.iOS 7 apis提供以下备用.
NSUUID *oNSUUID = [[UIDevice currentDevice] identifierForVendor];
[strApplicationUUID setString:[oNSUUID UUIDString]];
Run Code Online (Sandbox Code Playgroud)
我用"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)任何其他建议......
Dim*_*ima 29
对于来自同一设备上运行的同一供应商的应用,此属性的值相同.对于来自不同供应商的同一设备上的应用程序以及不同供应商的不同设备上的应用程序,将返回不同的值.
如果应用程序在后台运行,则在用户在设备重新启动后第一次解锁设备之前,此属性的值可能为nil.如果值为nil,请稍后再次获取该值.
在iOS设备上安装app(或来自同一供应商的其他应用程序)时,此属性中的值保持不变.当用户从设备中删除所有该供应商的应用程序并随后重新安装其中一个或多个应用程序时,该值会更改.因此,如果您的应用程序将此属性的值存储在任何位置,则应优雅地处理标识符更改的情况.
简而言之,如果该供应商的至少一个应用程序仍保留在设备上,则特定供应商的标识符将保持不变.一旦没有更多的应用程序(或在单个应用程序的情况下重新安装),标识符可以并将改变.据我所知,iOS 6与iOS 7应该没有区别,所以你看到的任何差异都是巧合.
3)任何其他建议......
您应该考虑识别和授权用户而不是设备的策略.取决于特定于设备的标识符,防止授权用户在没有某种管理员交互的情况下切换设备,并允许非授权用户在他们碰巧找到/窃取/借用授权设备时进行访问.您可以依靠用户凭据而不是设备标识符来避免这些问题.