iOS 获取设备唯一标识符

2020-01-11  本文已影响0人  落夏简叶

项目中使用的是IDFA + UUID + keychain的方式。 其实个人觉得IDFV + keychain就够了

IDFA + UUID + keychain

[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
NSUUID.UUID.UUIDString;
/**
 *  返回唯一设备标识
 *
 *  @return 设备标识
 */
#define kDeviceIdentifier @"00000000-0000-0000-0000-000000000000"
#define deviceIDCacheKey @"deviceIdentifier"


+(NSString*)deviceIdentifier{
    NSString * deviceIdentifier = [[NSUserDefaults standardUserDefaults] valueForKey:deviceIDCacheKey];
    if (!deviceIdentifier) {
        //从钥匙串中获取唯一设备标识
        deviceIdentifier = [SFHFKeychainUtils getPasswordForUsername:deviceIDCacheKey andServiceName:bundleIdentifier error:nil];
        
        if(!deviceIdentifier){
            //IDFV。用IDFV就不用判断是否有无意义的0串了
//            deviceIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
            //IDFA
            deviceIdentifier = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
            if ([deviceIdentifier isEqual:kDeviceIdentifier]) {
                deviceIdentifier = NSUUID.UUID.UUIDString;
            }
            [self saveDeviceIdentifier:deviceIdentifier];
        }
        [[NSUserDefaults standardUserDefaults] setValue:deviceIdentifier forKey:deviceIDCacheKey];
        [[NSUserDefaults standardUserDefaults] synchronize];

    }
    return deviceIdentifier;
}

IDFV + keychain

用IDFV就不用判断是否有无意义的0串了。也就不用再取一遍UUID了。

上一篇 下一篇

猜你喜欢

热点阅读