美文网首页
UDID和UUID的区别

UDID和UUID的区别

作者: th先生 | 来源:发表于2018-08-21 10:55 被阅读0次

    IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的。每一部手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。手机用户可以在手机中查到自己手机的IMEI码。 iOS5以后不能再获取了。

    UDID是Unique Device Identifier的缩写,是一串由40位16进制数组成的字符串,用以标识唯一的设备,苹果从iOS5开始就移除了通过代码访问UDID的权限,应用试图获取UDID被禁止且不允许上架。现在想通过代码获取是不可能的了,如果你想看看你设备的UDID,可以通过iTunes来查看。对于已越狱了的设备,UDID并不是唯一的.使用Cydia插件UDIDFaker,可以为每一个应用分配不同的UDID.

    那么有没有另外的办法来获取用户设备的唯一标识符呢?答案是有的,当然这样的标识符不是苹果隐藏的UDID了,使用OpenUDID开源代码,这个代码通过一些特殊的算法,创建了每一个设备的唯一标识符,你可以拿过来用来识别设备了。

    UUID是Universally Unique Identifier的缩写,通过调用[[UIDevice currentDevice]identifierForVendor];方法可以获取UUID。只要用户没有完全删除应用程序,则这个UUID在用户使用该应用程序的时候一直保持不变。如果用户删除了这个应用程序,然后再重新安装,那么这个UUID已经发生了改变。

    deviceToken的原理跟UUID差不多,如果用户删除了这个应用程序,然后再重新安装,那么这个deviceToken已经发生了改变。

    我们现在的程序中后台如果需要传入用户设备标识,一般我们取UUID来传入。最理想的就是保存在keychain里面,以此作为标识用户设备的唯一标识符。

    获取UUID的方法为:

    CFUUIDRef uuid = CFUUIDCreate(NULL);
        assert(uuid != NULL);
        CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);
    
        DLog(@"uuidStr------》%@",uuidStr);
    

    之前使用了Git上的一个第三方库,SSKeychain,将UUID保存在keychain里面,每次调用先检查钥匙串里面有没有,有则使用,没有则写进去,保证其唯一性,具体使用如下:

    CFUUIDRef uuid = CFUUIDCreate(NULL);
    assert(uuid != NULL);
    CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);
    NSString *identifierNumber = [SSKeychain passwordForService:@"com.test.app1"account:@"user"];
    
    if (!identifierNumber){
       [SSKeychain setPassword: [NSString stringWithFormat:@"%@", uuidStr] forService:@"com.test.app1"account:@"user"];
       identifierNumber = [SSKeychain passwordForService:@"com.test.app1"account:@"user"];
    }
    
    

    相关文章

      网友评论

          本文标题:UDID和UUID的区别

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