ios7 uuid的獲取方法


   

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類從以下地址下載

https://developer.apple.com/library/ios/samplecode/GenericKeychain/Listings/Classes_KeychainItemWrapper_h.html#//apple_ref/doc/uid/DTS40007797-Classes_KeychainItemWrapper_h-DontLinkElementID_9 

 

除了上面的方法,還有一個輕量級的方法,推薦使用這個,使用超級簡單,而且完全開源

首先去系統取“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!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM