ios7后mac地址淪為雞肋,所以必須得重新想辦法獲取設備的id信息,apple推薦用UUID,但app重新安裝后,UUID需要重設,所以想到把UUID存儲到ios系統的keychain中,既然存儲在系統內,也就意味着即使app被刪除也不會丟失該屬性。
//ios獲取uuid
#import "KeychainItemWrapper.h"
KeychainItemWrapper *keychainItem = [[KeychainItemWrapperalloc]
initWithIdentifier:@"UUID"
accessGroup:@"com.game.userinfo"];
NSString *strUUID = [keychainItem objectForKey:(id)kSecValueData];
if ([strUUID isEqualToString:@""])
{
CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
strUUID = (NSString *)CFUUIDCreateString (kCFAllocatorDefault,uuidRef);
[keychainItem setObject:strUUID forKey:(id)kSecValueData];
}
[keychainItem release];
std::string device_uuid = [strUUID UTF8String];
ps:注意引入 Security.framework 庫!上面的KeychainItemWrapper類從以下地址下載
除了上面的方法,還有一個輕量級的方法,推薦使用這個,使用超級簡單,而且完全開源
首先去系統取“uuid”字段,如果有直接使用,如果沒有,則create一個uuid並存入keychain中
NSString *retrieveuuid = [SSKeychainpasswordForService:@"com.game.userinfo"account:@"uuid"];
if ( retrieveuuid == nil || [retrieveuuid isEqualToString:@""])
{
CFUUIDRef uuid = CFUUIDCreate(NULL);
assert(uuid != NULL);
CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);
retrieveuuid = [NSString stringWithFormat:@"%@", uuidStr];
[SSKeychain setPassword: retrieveuuid
forService:@"com.game.userinfo"account:@"uuid"];
}
注意導入
SSKeychain這個類,可以去http://github.com/soffes/sskeychain上下載代碼文件,good luck!