-
現(xiàn)在常用的是用UUID+keychain結(jié)合來實現(xiàn)這個需求。
// 獲取一個UUID
// 注意:每次調(diào)用這個方法或者卸載應用重新安裝,生成UUID都是不同的。
- (NSString*)uuid {
CFUUIDRef uuid = CFUUIDCreate( nil );
CFStringRef uuidString = CFUUIDCreateString( nil, uuid );
NSString * result = (NSString *)CFBridgingRelease(CFStringCreateCopy( NULL, uuidString));
CFRelease(uuid);
CFRelease(uuidString);
return result;
}
// 將生成的UUID保存到 keychain(鑰匙串) 中
// keychain 是蘋果公司Mac OS中的密碼管理系統(tǒng),keychain 是獨立在App之外的,是和系統(tǒng)同一等級的。保存在里面的值不會隨著卸載應用再重新安裝而改變。只有手機系統(tǒng)恢復出廠設置或者抹掉所有數(shù)據(jù)才會重置掉鑰匙串里保存的值。
- (void)saveUuidWithKeyChain {
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"UUID" accessGroup:@"com.xxx.www"];
NSString *strUUID = [keychainItem objectForKey:(id)kSecValueData];
if (strUUID == nil || [strUUID isEqualToString:@""]) {
[keychainItem setObject:[self uuid] forKey:(id)kSecValueData];
}
}
// 從keychain中獲取UUID的值
- (NSString *)getKeychain {
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]initWithIdentifier:@"UUID" accessGroup:@"com.xxx.www"];
NSString *strUUID = [keychainItem objectForKey:(id)kSecValueData];
return strUUID;
}
整個邏輯是這樣的:先從keychain取UUID,如果能取到,就用這個比對,如果取不到就重新生成一個保存起來。