美文网首页iOS劝退指南iOS开发杂货铺
iOS设备唯一标识符解决方案

iOS设备唯一标识符解决方案

作者: MaxWellPro | 来源:发表于2017-02-13 15:56 被阅读183次

iOS设备唯一标识符解决方案

记得当时做过一个电商项目,甲方提出的要求是这样的:用户可以在不登录的情况下,以游客模式下单购物,而不被注册or登录打断购物流程。这个技术难点主要是怎么永久保存App的用户数据,要做到用户卸载重装App后,还能识别是哪个用户。

UUID

UUID是Universally Unique Identifier的缩写,中文意思是通用唯一识别码。它是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。这样,每个人都可以建立不与其它人冲突的 UUID。苹果公司建议使用UUID为应用生成唯一标识字符串。 iOS 6中介绍的Vendor或Advertising标示符,通过下面的代码可以获得一个UUID字符串:

如何获取UUID

方法1.

NSString *uuid = [[NSUUID UUID] UUIDString]; 

也可以保存在iOS 6中新增的Vindor标示符 (IDFV-identifierForVendor),获取这个IDFV的新方法被添加在已有的UIDevice类中。跟advertisingIdentifier一样,该方法返回的是一个NSUUID对象。

方法2.

NSString *uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

方法3.


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

Keychain

开发者可以在应用第一次启动时调用一次,然后将该串存储起来,以便以后替代UDID来使用。但是,如果用户删除该应用再次安装时,又会生成新的字符串,所以不能保证唯一识别该设备。由于IOS系统存储的数据都是在sandBox里面,一旦删除App,sandBox也不复存在。好在有一个例外,那就是keychain(钥匙串)。通常情况下,IOS系统用NSUserDefaults存储数据信息,但是对于一些私密信息,比如密码、证书等等,就需要使用更为安全的keychain了。

keychain里保存的信息不会因App被删除而丢失。所以,可以利用这个keychain这个特点来保存设备唯一标识。所以这里要用到KeyChain来保存。

那么,如何在应用里使用使用keyChain呢,可以使用第三方库的YYKeychain来实现,我们可以使用苹果已经封装好了的工具类KeychainItemWrapper来对keychain进行操作。

实现


+ (NSString *)getUUID {
    NSError *error;
    
    NSString *uuid = [YYKeychain getPasswordForService:@"YouAppleTeamID.com.test.porject"
                                               account:@"UUID"
                                                 error:&error];
    
    if (uuid) {
        return uuid;
    }
    
    if(error){
        NSLog(@"从Keychain里获取密码出错:%@", error);
    }
    
    //首次执行该方法时,uuid为空
    if ([uuid isEqualToString:@""] || !uuid) {
        CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
        uuid = (NSString *)CFBridgingRelease(CFUUIDCreateString (kCFAllocatorDefault,uuidRef));
        /** 保存用户的密码*/
        BOOL saved = [YYKeychain setPassword:uuid forService:@"YouAppleTeamID.com.test.porject" account:@"UUID" error:&error];
        if (!saved) {
            NSLog(@"保存密码时出错:%@", error);
        }
    }
    return uuid;
}

在首次打开App的时候,会给用户生成一个唯一的UUID并存储在keychain中,当用户卸载App后,重新安装打开后,会从Keychain中获取存储的UUID,这样就能实现用户的唯一标识。

相关文章

网友评论

本文标题:iOS设备唯一标识符解决方案

本文链接:https://www.haomeiwen.com/subject/crctwttx.html