iPhone的唯一ID最好保留持久存储?

时间:2014-08-28 11:44:55

标签: ios iphone ios7 ios5 ios6

我是iOS新手。我需要从设备创建唯一的ID来注册我的一些Web服务以进行唯一标识。网上有很多文件,我注意到在iOS6 +中不推荐检索UUID。

我从iOS 5 +开始定位我的应用程序。

我已经通过以下链接:

http://www.doubleencore.com/2013/04/unique-identifiers/

讨论了三个ID。 CFUUID,NSUUID,IDFV。

鉴于我需要从ios 5.0定位的场景,我可以将其用作唯一标识符吗?

请建议。

3 个答案:

答案 0 :(得分:0)

使用此供应商ID(供应商标识符(IDFV)):

 NSString *aStrVendorId= [NSString stringWithFormat:@"%@", [[[UIDevice currentDevice]identifierForVendor] UUIDString]];

答案 1 :(得分:0)

为什么不在安装时创建新的UUID并将其存储在keychain / userdefaults中?

这个UUID是否真的必须与设备的UUID相同?

this question中的更多详情。

修改:这是其中的重要部分:

+ (NSString *)GetUUID
{
  CFUUIDRef theUUID = CFUUIDCreate(NULL);
  CFStringRef string = CFUUIDCreateString(NULL, theUUID);
  CFRelease(theUUID);
  return (__bridge NSString *)string;
}

答案 2 :(得分:0)

我对这个问题进行了很多调查。我想出的最佳解决方案是使用IDFV + keychain

+(NSString*)deviceID{
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"DeviceUDIDkeychain" accessGroup:nil];
NSString *devID = [keychain objectForKey:(__bridge id)(kSecAttrAccount)];
if (!devID || devID.length == 0) {
devID = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
[keychain setObject:devID forKey:(__bridge id)(kSecAttrAccount)];
}
return devID;
}