YWOnlySign
iOS 10.3 還未正式發(fā)布,beta 版中一個關(guān)于keychain 特性的小修改蜗搔,就已經(jīng)引起了廣泛的關(guān)注厌蔽。 改動如下: 如果 App 被刪除镶柱,之前存儲于 keychain 中的數(shù)據(jù)也會一同被清除。
目前常用的獲取UDID的方法就是用第三方OpenUDID
但是這種方法在卸載了APP之后可能會導(dǎo)致UDID產(chǎn)生變化跛璧,給后臺造成誤導(dǎo)
使用 <a >YWOnlySign</a> 獲取唯一標(biāo)識严里,只要APP的BundleID不變的話,獲取的唯一標(biāo)識就不會變追城,可以準(zhǔn)確的標(biāo)識設(shè)備刹碾。
喜歡的朋友 請賜一顆星星給我哈 嘻嘻
github地址
https://github.com/ywdonga/YWOnlySign
支持pod
pod 'YWOnlySign', '~> 1.0.0'
使用方法
NSString *uuid = [YWOnlySign getUUID];
YWOnlySign 通過隨機生成一段 字符串 作為設(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不變 這個獲取的唯一標(biāo)示就不會變