iOS 获取一台设备唯一标识的方法有哪些?

/*
获取一台设备唯一标识的方法有哪些?
· 现在常用的是用UUID + keychain结合来实现这个需求。
· UUID是Universally Unique Identifier 的缩写,中文意思是通用唯一识别码。它是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。这样,每个人都可以建立不与其他人冲突的UUID。在此情况下,就不需考虑数据库建立时的名称重复问题。苹果公司建议使用UUID为应用生成唯一标识字符串。
*/

  • (NSString *)uuid {
    CFUUIDRef uuid = CFUUIDCreate(nil);
    CFStringRef uuidString = CFUUIDCreateString(nil, uuid);
    NSString *result = (NSString *)CFBridgingRelease(CFStringCreateCopy(NULL, uuidString));
    CFRelease(uuid);
    CFRelease(uuidString);
    return result;
    }

/*
· 现在我们获取到了一个UUID,r虽然这个标识是唯一的,但是这样还是无法保证每一次的唯一性,因为当你每次调用这个方法或把应用卸载了,UUID会重新生成一个不同的。这个时候keychain就起到了作用。
· 所以整个逻辑是这样的:先从keychain取UUID,如果能取到,就用这个比对,如果取不到就重新生成一个保存起来。keychain独立在APP之外,是和系统统一等级的,所以你不用担心它挂掉。
· keychain是苹果公司Mac OS中的密码管理系统。它在Mac OS 8.6中被导入,并且包括在了所有后续的Mac OS版本中,包括Mac OS X。一个钥匙串可以包含多种类型的数据:密码(包括网站, FTP服务器,SSH账户,网络共享,无线网络,群组软件,加密磁盘镜像等),d私钥,电子证书和加密笔记等。iOS端同样有个keychain帮助我们管理这些敏感信息。
· 使用过keychainf保存过账号密码的童鞋应该对这个工具非常了解,在这里不做过多解释。使用keychain需要导入Security.framework和KeychainItemWrapper.h/m.
KeychainItemwrapper.h/.m搜一下可以下载下来,拖入工程中。保存UUID代码如下:
*/

  • (void)saveUUidWithKeyChain {
    KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"UUID" accessGroup:@"com.cxd.www"];
    NSString *strUUID = [keychainItem objectForKey:(id)kSecValueData];
    if (strUUID == nil || [strUUID isEqualToString:@""]) {
    [keychainItem setObject:[self uuid] forKey:(id)kSecValueData];
    }
    }
    // 注:这个方法中accessGroup:这个参数如果一些App设置相同的话,是可以共享的。

//从keychain获取UUID的方法如下:

  • (NSString *)getKeychain {
    KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"UUID" accessGroup:@"com.cxd.www"];
    NSString strUUID = [keychainItem objectForKey:(id)kSecValueData];
    return strUUID;
    }
    /

    · 至此,基本上唯一标识的几个方法算是写完了,大家可以测试一下,卸载应用再重新装,从keychain读取的UUID还是和之前一样。
    · 但这里有个不确定因素,就是手机系统恢复出厂设置或者抹掉所有数据的话,这个方法也可能不起作用了,因为它是依靠钥匙串在生存,钥匙串挂掉的话它也就失效了。
    */

文件下载地址
https://github.com/chenxuedan/KeychainItemWrapper

猜你喜欢

转载自blog.csdn.net/weixin_33895657/article/details/90852754
今日推荐