美文网首页
iOS设备唯一标识

iOS设备唯一标识

作者: CoderHong | 来源:发表于2018-03-22 18:43 被阅读34次

    UDID

    • UDID (Unique Device Identifier Description)
    • 由子母和数字组成的40个字符串的序号,用来区别每一个唯一的iOS设备,包括 iPhones, iPads, 以及 iPod touches,这些编码是跟硬件设备特点相联系的。
    image.png
    • 获取UDID
    NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
    示例: bb4d786633053a0b9c0da20d54ea7e38e8776da4
    

    在2013年3月21日苹果已经通知开发者,从2013年5月1日起,访问UDID的应用将不再能通过审核,替代的方案是开发者应该使用“在iOS 6中介绍的Vendor或Advertising标示符”。

    广告标示符(IDFA-identifierForIdentifier)

    这是iOS 6中另外一个新的方法,advertisingIdentifier是新框架AdSupport.framework的一部分。ASIdentifierManager单例提供了一个方法advertisingIdentifier,通过调用该方法会返回一个上面提到的NSUUID实例

    NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
    

    广告标示符是由系统存储着的。不过即使这是由系统存储的,但是有几种情况下,会重新生成广告标示符。

    1. 如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。
    2. 如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成

    针对广告标示符用户有一个可控的开关“限制广告跟踪”。Nick Arnott的文章中已经指出了。将这个开关打开,实际上什么也没有做,不过这是希望限制你访问广告标示符。这个开关是一个简单的boolean标志,当将广告标示符发到任意的服务器端时,你最好判断一下这个值,然后再做决定。

    if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
            NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
            NSLog(@"adId=%@", adId);
        }else{
            // 测试输出的adId=00000000-0000-0000-0000-000000000000
            NSLog(@"用户开启限制广告跟踪");
        }
    

    Vindor标示符 (IDFV-identifierForVendor)

    这种叫法也是在iOS 6中新增的,不过获取这个IDFV的新方法被添加在已有的UIDevice类中。跟advertisingIdentifier一样,该方法返回的是一个NSUUID对象。

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

    相同的一个程序里面-相同的vindor-相同的设备。如果是这样的情况,那么这个值是不会相同的:相同的程序-相同的设备-不同的vindor,或者是相同的程序-不同的设备-无论是否相同的vindor。

    在这里,还需要注意的一点就是:如果用户卸载了同一个vendor对应的所有程序,然后在重新安装同一个vendor提供的程序,此时identifierForVendor会被重置。 示例: 599F9C00-92DC-4B5C-9464-7971F01F8370

    OpenUDID

    在iOS 5发布时,uniqueIdentifier被弃用了,这引起了广大开发者需要寻找一个可以替代UDID,并且不受苹果控制的方案。由此OpenUDID成为了当时使用最广泛的开源UDID替代方案。OpenUDID在工程中实现起来非常简单,并且还支持一系列的广告提供商。

    NSString *openUDID = [OpenUDID value];
    

    OpenUDID利用了一个非常巧妙的方法在不同程序间存储标示符 — 在粘贴板中用了一个特殊的名称来存储标示符。通过这种方法,别的程序(同样使用了OpenUDID)知道去什么地方获取已经生成的标示符(而不用再生成一个新的)。

    之前已经提到过,在将来,苹果将开始强制使用advertisingIdentifier 或identifierForVendor。如果这一天到来的话,即使OpenUDID看起来是非常不错的选择,但是你可能不得不过渡到苹果推出的方法。
    示例: 0d943976b24c85900c764dd9f75ce054dc5986ff

    原文

    相关文章

      网友评论

          本文标题:iOS设备唯一标识

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