iOS获取UUID,并使用keychain存储,解决应用删除后 uuid不统一问题

UDID被弃用,使用UUID来作为设备的唯一标识。获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了。使用keychain存储可以保证程序卸载重装时,UUID不变。但当刷机或者升级系统后,UUID还是会改变的。但这仍是目前为止最佳的解决办法了,如果有更好的解决办法,欢迎留言。

  

先在你项目里面 打开使用KeyChain使用 ON


+ (NSString *)bundleSeedID {

    NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys:

                           (__bridge NSString *)kSecClassGenericPassword, (__bridge NSString *)kSecClass,

                           @"bundleSeedID", kSecAttrAccount,

                           @"", kSecAttrService,

                           (id)kCFBooleanTrue, kSecReturnAttributes,

                           nil];

    CFDictionaryRef result = nil;

    OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);

    if (status == errSecItemNotFound)

        status = SecItemAdd((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);

    if (status != errSecSuccess)

        return nil;

    NSString *accessGroup = [(__bridge NSDictionary *)result objectForKey:(__bridge NSString *)kSecAttrAccessGroup];

    NSArray *components = [accessGroup componentsSeparatedByString:@"."];

    NSString *bundleSeedID = [[components objectEnumerator] nextObject];

    CFRelease(result);

    return bundleSeedID;

}


+ (NSString*)GetUUID

{

    /// 这个要跟 一样

    KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]

                                         initWithIdentifier:@"UUID"

                                         accessGroup:[NSString stringWithFormat:@"%@.你app的keychain",[self bundleSeedID]]];

    

    NSString *strUUID = [keychainItem objectForKey:(id)CFBridgingRelease(kSecValueData)];

    

    //首次执行该方法时,uuid为空

    if ([strUUID isEqualToString:@""])

    {

        CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);

        strUUID = (NSString *)CFBridgingRelease(CFUUIDCreateString (kCFAllocatorDefault,uuidRef));

        strUUID = [strUUID stringByReplacingOccurrencesOfString:@"-" withString:@""];

        [keychainItem setObject:strUUID forKey:(id)CFBridgingRelease(kSecValueData)];

        

    }

//    NSLog(@"\n _____uuid=%@ \n",strUUID);

    return strUUID;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值