YWOnlySign
iOS 10.3 還未正式發(fā)布,beta 版中一個(gè)關(guān)于keychain 特性的小修改,就已經(jīng)引起了廣泛的關(guān)注。 改動(dòng)如下: 如果 App 被刪除,之前存儲(chǔ)于 keychain 中的數(shù)據(jù)也會(huì)一同被清除。
目前常用的獲取UDID的方法就是用第三方OpenUDID
但是這種方法在卸載了APP之后可能會(huì)導(dǎo)致UDID產(chǎn)生變化,給后臺(tái)造成誤導(dǎo)
使用 <a >YWOnlySign</a> 獲取唯一標(biāo)識(shí),只要APP的BundleID不變的話,獲取的唯一標(biāo)識(shí)就不會(huì)變,可以準(zhǔn)確的標(biāo)識(shí)設(shè)備。
喜歡的朋友 請(qǐng)賜一顆星星給我哈 嘻嘻
github地址
https://github.com/ywdonga/YWOnlySign
支持pod
pod 'YWOnlySign', '~> 1.0.0'
使用方法
NSString *uuid = [YWOnlySign getUUID];
YWOnlySign 通過隨機(jī)生成一段 字符串 作為設(shè)備的唯一標(biāo)示
+ (NSString *)uuid {
CFUUIDRef puuid = CFUUIDCreate(nil);
CFStringRef uuidString = CFUUIDCreateString(nil, puuid);
NSString *result = (NSString *)CFBridgingRelease(CFStringCreateCopy(NULL, uuidString));
CFRelease(puuid);
CFRelease(uuidString);
result = [result lowercaseString];
return result;
}
再利用 bundleId 作為key 存入Keychain
+ (void)save:(NSString *)service data:(id)data {
//Get search dictionary
NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
//Delete old item before add new item
SecItemDelete((__bridge_retained CFDictionaryRef)keychainQuery);
//Add new object to search dictionary(Attention:the data format)
[keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(__bridge_transfer id)kSecValueData];
//Add item to keychain with the search dictionary
SecItemAdd((__bridge_retained CFDictionaryRef)keychainQuery, NULL);
}
即使APP卸載了,重新安裝 只要bundleId不變 這個(gè)獲取的唯一標(biāo)示就不會(huì)變