通用惟一识别码 UDID(Unique Device Identifier)git
是一串由40位16进制数组成的字符串,用以标识惟一的设备,如今想经过代码获取是不可能的了,若是你想看看你设备的UDID,能够经过iTunes来查看。github
关于获取UDID的代码(iOS5以后已经废掉并被AppStore封杀)数组
[[UIDevice currentDevice] uniqueIdentifier];
安全
设备惟一标识 UUID(Universally Unique IDentifier)bash
是基于iOS设备上面某个单个的应用程序,只要用户没有彻底删除应用程序,则这个UUID在用户使用该应用程序的时候一直保持不变。若是用户删除了这个应用程序,而后再从新安装,那么这个UUID已经发生了改变。app
关于获取UUID的代码:框架
[[UIDevice currentDevice] identifierForVendor];
不过,设备惟一标示的问题仍然没有解决:若是你删除应用而后再次安装,这个identifierForVendor的值就变了。ide
- (NSString *) uniqueString
{
CFUUIDRef unique = CFUUIDCreate(kCFAllocatorDefault);
NSString *result = [(NSString *)CFUUIDCreateString(kCFAllocatorDefault, unique) autorelease];
CFRelease(unique);
return result;
}
复制代码
如上获取的UUID,基于Git上的一个第三方库SSKeychain,能够将UUID保存在keychain里面,每次调用先检查钥匙串里面有没有,有则使用,没有则写进去,保证其惟一性.函数
参考代码:ui
- (NSString *)getNewUniqueIdNum{
NSString *uuidStr = [SSKeychain passwordForService:@"com.test.app1" account:@"user"];
if (!uuidStr || [uuidStr isEqualToString:@""])
{
CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
uuidStr = (__bridge NSString *)CFUUIDCreateString(kCFAllocatorDefault ,uuidRef);
[SSKeychain setPassword:[NSString stringWithFormat:@"%@", uuidStr] forService:@"com.test.app1"account:@"user"];
}
return uuidStr;
}
复制代码
不一样于上面调用的字符串转换(__bridge NSString *),另外一种写法:
- (NSString *)getNewUniqueIdNum{
NSString *identifierNumber = [SSKeychain passwordForService:@"com.test.app1"account:@"user"];
CFUUIDRef uuidRef = CFUUIDCreate(NULL);
assert(uuidRef != NULL);
CFStringRef uuidStrRef = CFUUIDCreateString(NULL, uuidRef);
if (!identifierNumber){
[SSKeychain setPassword: [NSString stringWithFormat:@"%@", uuidStrRef] forService:@"com.test.app1"account:@"user"];
identifierNumber = [SSKeychain passwordForService:@"com.test.app1"account:@"user"];
}
return identifierNumber;
}
复制代码
不一样于如上SSKeychain,基于一个第三方库SAMKeyChains。SAMKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码、帐户进行访问,包括读取、删除和设置。SAMKeyChains使用简单,经过实例代码即可掌握。
基于SAMKeyChains方案的参考代码:
+ (NSString *)getDeviceId
{
NSString * currentDeviceUUIDStr = [SAMKeychain passwordForService:@" "account:@"uuid"];
if (currentDeviceUUIDStr == nil || [currentDeviceUUIDStr isEqualToString:@""])
{
NSUUID * currentDeviceUUID =[[UIDevice currentDevice] identifierForVendor];
currentDeviceUUIDStr = [currentDeviceUUID UUIDString];
currentDeviceUUIDStr = [currentDeviceUUIDStr stringByReplacingOccurrencesOfString:@"-" withString:@""];
currentDeviceUUIDStr = [currentDeviceUUIDStr lowercaseString];
[SAMKeychain setPassword: currentDeviceUUIDStr forService:@" "account:@"uuid"];
}
return currentDeviceUUIDStr;
}
复制代码
SAMKeyChains更多详细用法说明能够看SAMKeyChains Documentation