iOS获取唯一设备小结

       自从iOS5之后,苹果废除了通过代码获取UDID的权限。所以理论上不存在绝对的唯一标识符。通过各种方法达到类似唯一标识符的效果但是都有瑕疵。

1、通过广告标识符确认唯一设备。弊端:如果用户完全重置系统((设置程序 ->通用 ->还原 ->还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序->通用 ->关于本机 ->广告 -> 还原广告标示符),那么广告标示符也会重新生成。


2、通过推送的token确认唯一设备。弊端:该方法并不是依赖于设备本身,而是依赖于apple push机制,所以当苹果push做出改变时,获取所谓的唯一标识也就随之失效了。


3、通过UUID确认唯一设备。弊端:恢复出厂设置、刷机等操作标识符会改变。另外此方法是通过生成一个标识符存到钥匙串中,只能是同一个开发者账号下的多个APP可以共享,对于多个开发者账号多个APP的需求无法满足。

获取UUID并存入钥匙串代码如下:(这里用了 SAMKeychain 这个三方库,用cocoapods导一下就好了)

+ (NSString *)getDeviceID {
    NSString *appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
    
    NSString *strApplicationUUID =  [SAMKeychain passwordForService:appName account:@"uuid"];
    if (strApplicationUUID == nil)
    {
        strApplicationUUID  = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
        
        NSError *error = nil;
        SAMKeychainQuery *query = [[SAMKeychainQuery alloc] init];
        query.service = appName;
        query.account = @"uuid";
        query.password = strApplicationUUID;
        //keychain在同账号下不同设备间是同步的,设置这个保证不同设备间的值不同
        query.synchronizationMode = SAMKeychainQuerySynchronizationModeNo;
        [query save:&error];
    }
    return strApplicationUUID;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值