iOS广告隐私

522 阅读2分钟

UDID(Unique Device Identifier)

UDID指的是设备唯一设备识别符,获取代码:[[UIDevice cuurrent] uniqueIdenfier],UDID 在 iOS5.0 的时候已经被抛弃使用了。

替代方案可以使用MAC地址来识别设备,因为MAC地址也唯一的识别了一台设备并且不会被修改,不知道以后苹果会对此如何操作。

因为隐私的问题,苹果就推出了一个identifierForVendor的属性获取UDID,但获取的值只是个替代品。

UUID、IDFA、IDFV都是32位,格式:8-4-4-4-12

UUID(Universally Unique Identifier)

UDID指的是通用唯一标识符,获取代码:[NSUUID UUID].UUIDString,NSUUID在iOS 6.0中才出现,据说UUID随机数算法得到的数重复概率为170亿分之一,苹果公司建议使用UUID为应用生成唯一标识字符串。

但是获得的UUID值系统没有存储,而且每次调用UUID,系统都会返回一个新的UUID。如果你希望存储这个标示符,那么需要将其存储到NSUserDefaults, Keychain, Pasteboard或其它地方。

IDFA (Identifier For Advertising)

在同一个设备上的所有App都会取到相同的值,是专门给各广告提供商用来追踪用户而设的。获取代码:[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]

但是IDFA并不是唯一不变的,如果用户完全重置系统(设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成。

在iOS 10.0以后如果用户打开限制广告跟踪(设置程序-> 通用 -> 关于本机 -> 广告 -> 限制广告跟踪),则获取到的IDFA为一个固定值00000000-0000-0000-0000-000000000000。因此,通过IDFA也无法唯一标识一个设备。

IDFV(Identifier For Vendor)

IDFV是给Vendor标识用户用的,每个设备在所属同一个Vendor的应用里,都有相同的值。iOS 6中新增的,获取代码:[[[UIDevice currentDevice] identifierForVendor] UUIDString]

Vendor是指应用提供商,是通过BundleID的反转的前两部分进行匹配,如果相同就是同一个Vendor,例如对于com.abc.app1, com.abc.app2 这两个BundleID来说,就属于同一个Vendor,共享同一个IDFV的值。

当然,对于同一个设备不同Vendor的话,获取到的值是不同的。和IDFA不同的是,IDFV的值是一定能取到的。

注意:如果用户将属于此Vender的所有App卸载,则idfv的值会被重置,即再重装此Vender的App,idfv的值和之前不同。

文档:

UUID | Apple Developer Documentation

advertisingIdentifier | Apple Developer Documentation

identifierForVendor | Apple Developer Documentation