我们的 iOS 应用程序适用于特定用户。因此,我们使用设备唯一标识符来识别用户。这种方法在 iOS 6 之前工作正常,因为我们每次都得到相同的值。
NSString *strUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];
在 iOS 7 中,上述方法返回不同的值,我们在用户识别方面遇到了问题。 iOS 7 提供了以下替代。
NSUUID *oNSUUID = [[UIDevice currentDevice] identifierForVendor];
[strApplicationUUID setString:[oNSUUID UUIDString]];
我们将 uniqueIdentifier
替换为 identifierForVendor
,并创建了一个 Ad-hoc 构建。然后我们在 iOS 7 和 iOS 6 设备上安装构建。到目前为止,在 iOS 7 中,我们每次都得到相同的值,但 iOS 6 每次我们删除并重新安装应用程序时都会得到不同的值。
最佳答案
使用这个小助手方法在应用程序的安装/删除 session 之间将标识符保存在钥匙串(keychain)中
-(NSString *)getUniqueDeviceIdentifierAsString
{
NSString *appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
NSString *strApplicationUUID = [SSKeychain passwordForService:appName account:@"incoding"];
if (strApplicationUUID == nil)
{
strApplicationUUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
[SSKeychain setPassword:strApplicationUUID forService:appName account:@"incoding"];
}
return strApplicationUUID;
}
添加SSKeychain库到您的项目,例如通过带有 pod 'SSKeychain'
关于ios - 在 iOS 7 中始终获得唯一的设备 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606773/