iOS - 广告标识符(IDFA & IDFV)

历史问题

在iOS5之前,获取设备唯一标识都是采用UDID。
12年9月份iOS6发布,IDFA面世,用于给开发者跟踪广告的投放效果。
一直到13年5月份App Store明令禁止获取UDID的应用上架,但是人们也找到了其他方法,比如:获取Mac地址和OpenUDID。
再到13年9月份iOS7的发布,苹果又采取别的措施,获取到的Mac地址在iOS7上都是相同的值,并且对剪贴板进行限制,导致OpenUDID无法被不同的应用共享相同的值。
最后IDFA成为了目前为止苹果跟踪广告的主要标识。

2017.9.29


IDFA - Identifier For Advertising(广告标识符)

// AdSupport.framework
#import <AdSupport/AdSupport.h>
// 获取IDFA
NSString * IDFA = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
示例:080006E2-5666-49C1-8786-3FD9FC77DC0A

可以理解为广告标识符,在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的。广告标示符是由系统存储着的。
适用于对外:例如广告推广,换量等跨应用的用户追踪等。

但是,这个值不是唯一确定的!也就是说用户可以根据自己的意愿来还原或者禁止获取这个值。
用户可以通过 设置--->隐私--->广告 来操作。

Picturexixi

// 用户是否限制广告追踪
Boolean on = [[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled];
NSLog(@"%hhu",on);

在获取IDFA之前可以先进行判断。开关切换的时候IDFA会变,还原的时候会变,用户重置手机系统的时候也会变。

IDFV - Identifier For Vendor(应用开发商标识符)

NSString * IDFV = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
示例:583D2BB0-B19C-4A9A-A600-2A1EB2FB7E39

这里的Vendor就是应用开发商,通过CFBundleIdentifier(DNS反转格式)的前两部分生成。例如:com.cjh.one和com.cjh.two得到的IDFV是一样的。如果用户将属于此Vendor的所有应用卸载,则IDFV的值会被重置,即使再重装此Vendor的应用,IDFV的值也和之前不同。
适用于对内:例如分析用户在应用内的行为等。


历史上的那些名词

UDID - Unique Device Identifier

设备唯一标识符。大哥级别的人物,iOS5以后退出历史舞台了。

OpenUDID

在UDID被禁用后的一个开源方案,原理好像是利用剪贴板在同一设备上的不用应用间共享一个OpenUDID,但是后来iOS7对剪贴板进行了限制,功能被废掉了。

Mac地址 - Media Access Control / Medium Access Control

网卡地址,具有唯一性,同样,iOS7之后当你获取Mac地址的时候会返回一个固定值。

UUID - Universally Unique Identifier

通用唯一识别码。

UUID 的目的是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等。
(摘自百度百科,我也没懂什么意思)

// 获取CFUUID
CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
NSString * cfuuidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault,cfuuid));
// 获取NSUUID
NSString * uuid = [[NSUUID UUID] UUIDString];

分为两种方法,一个是CFUUID,另一个是NSUUID,后者更加面向对象,获取到的值都是一样的。需要注意的是,每次获取到的UUID都是不一样的,所以需要第一次获取到以后保存到Keychain中。(目前只了解到操作Keychain需要用到Security.framework,貌似提供了增删改查功能,具体没有研究)


IDFA提交App Store

App Store提交

以上4项代表的含义:

  1. 在 App 内投放广告
    服务应用中的广告。如果你的应用中集成了广告的时候,你需要勾选这一项。
  2. 将此 App 安装归因于先前投放的特定广告
    跟踪广告带来的安装。如果你使用了第三方的工具来跟踪广告带来的激活以及一些其他事件,但是应用里并没有展示广告你需要勾选这一项。
  3. 将此 App 中发生的操作归因于先前投放的特定广告
    跟踪广告带来的用户的后续行为。如果你使用了第三方的工具来跟踪广告带来的激活以及一些其他事件。
  4. iOS 中的“限制广告跟踪”设置
    对您的应用使用 IDFA 的目的做下确认,只要您获取了 IDFA,那么这一项都是需要勾选的。

提交时:

  1. 如果您的应用里只是集成了广告,不追踪广告带来的激活行为,那么选择 1 和 4。
  2. 如果您的应用没有广告,而又获取了 IDFA。我们建议选择 2 和 4。

检查项目中是否使用IDFA:
看这个就好啦!~
检查iOS项目中是否使用了IDFA - 刘靖煌


END

本人iOS小白
欢迎指教和打脸!~
也欢迎点赞!~

推荐阅读更多精彩内容