iOS新知识

iOS-获取设备的UUID保证唯一性的解决方案

2020-06-23  本文已影响0人  贵叔勇闯天涯

写在前面:

在之前的版本是可以使用UDID获取iOS设备唯一标识:

NSString *udidString = [[UIDevice currentDevice] uniqueIdentifier];

但是iOS5及以后,被苹果禁止使用了(弃用了)

而直接获取的UUID系统不会存储,每次调用的时候都会获得一个新的UUID标示符
一般获取UUID的方法如下

// 普通的获取UUID的方法
+ (NSString *)getUUID {
    CFUUIDRef puuid = CFUUIDCreate( nil );
    CFStringRef uuidString = CFUUIDCreateString(nil, puuid);
    NSString *result = (NSString *)CFBridgingRelease(CFStringCreateCopy( NULL, uuidString));
    return result;
}

我们可以通过持久存储这个标识符,来保证即使重新加载,删除后重装应用都能够唯一标识,以下的方式通过获取到UUID后存入系统中的keychain中,来保证以后每次可以得到相同的唯一标志。

实现方案如下:

利用YYKit的keyChain功能来存储所获取的UUID,当keychain有该UUID,直接获取,没有的话,通过系统方法获取:

导入头文件:
#import <YYKit/YYKit.h>

使用keychain的功能需要以下配置:

project -》Capablities-》打开Keychain Sharing开关

代码实现

static NSString * const keyChainUUIDService = @"keyChainUUIDService";
static NSString * const keyChainAccount = @"keyChainAccount";

//获取UUID,将获取的UUID保存到钥匙串里,保证了UUID的唯一不变性
+ (NSString *)getUUIDByKeyChain {
   NSString *keyChainUUID;
   YYKeychainItem *keychainItem = [[YYKeychainItem alloc] init];
   keychainItem.service = keyChainUUIDService;
   keychainItem.account = keyChainAccount;

   keychainItem = [YYKeychain selectOneItem:keychainItem];
   keyChainUUID = keychainItem.password;
   if (keyChainUUID.length) {
       return keyChainUUID;
   }else {
       keyChainUUID = [NSUUID UUID].UUIDString;//系统方法获取UUID
       if (DGStringIsEmpty(keyChainUUID)) {
           return @"";
       }
       YYKeychainItem *saveKeychainItem = [[YYKeychainItem alloc] init];
       saveKeychainItem.service = keyChainUUIDService;
       saveKeychainItem.account = keyChainAccount;
       saveKeychainItem.password = keyChainUUID;
       [YYKeychain insertItem:saveKeychainItem];
       return keyChainUUID;
   }
}
上一篇 下一篇

猜你喜欢

热点阅读