通用惟一識別碼 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