历史问题

在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 - 刘靖煌

iOS - 广告标识符(IDFA IDFV)相关推荐

  1. iOS提交审核:您的 App 正在使用广告标识符 (IDFA)

    本文转载至  https://mp.weixin.qq.com/s?__biz=MzA3NzM0NzkxMQ==&mid=401172721&idx=1&sn=a369cf1b ...

  2. iOS 如何查看app提交审核是否使用广告标识符(IDFA)

    相信很多人被苹果拒绝过 : 您的 App 正在使用广告标识符 (IDFA).您必须先提供关于 IDFA 的使用信息 或将其从 App 中移除,然后再上传您的二进制文件. 那么如何查看app里哪里用到I ...

  3. iOS提交审核:关于您的 App 正在使用广告标识符 (IDFA)的问题

    转载文章地址: http://blog.csdn.net/napianlvye1992/article/details/50496846 IDFA( identifier for advertisin ...

  4. 【HBuilderX】wap2app项目如何获取iOS广告标识idfa?

    使用wap2app打包app如何获取idfa? 关于这个问题,官方的文档说明存在让人误解的地方,下面将结合实际代码介绍具体的获取idfa方法. 首先,大家存在一个误解,获取idfa的代码写在哪里?官方 ...

  5. iOS开发 ios14.0以上系统广告标识idfa获取适配

    OS14以上系统获取idfa的方式有一些变化,这里我们来讨论一下如何在IOS14以上系统获取idfa. 所需环境 1.xcode需要升级到12.0以上版本. 2.手机需要升级到14.0以上版本. iO ...

  6. IOS - UDID IDFA IDFV MAC keychain

    在开发过程中,我们经常会被要求获取每个设备的唯一标示,以便后台做相应的处理.我们来看看有哪些方法来获取设备的唯一标示,然后再分析下这些方法的利弊. 具体可以分为如下几种: UDID IDFA IDFV ...

  7. HBuilder 打包 iOS 客户端会产生广告标识符的问题

    可以参考 httpsask.dcloud.net.cnquestion53934 链接中的解决方案. HBuilder 打包 iOS 客户端会产生广告标识符的问题,可以参考 https://ask.d ...

  8. iOS 广告SDK总结(一)

    广告业务 个人感受 必不可少.当一个公司产品发展成熟之后或者用户量达到一定级别,比如百万级以上,就开始考虑商业化或者叫流量变现,随之广告业务就要开展了,据统计互联网行业中一半以上的收入来自于广告,想想 ...

  9. 广告标识符用途的选择

    IDFA(identifier for advertising)广告标识符:使用对外广告推广,跨平台等用户追踪等. iOS6中的另一个新方法,返回一个NSUUID实例,最后获得一个UUID,有系统储存 ...

最新文章

  1. 奇妙的Base64编码
  2. Cotex-M内核双堆栈指针MSP和PSP
  3. Spring Boot 性能优化
  4. 文字处理的标签及属性
  5. php一点按钮就下载功能源码,php实现强制文件下载方法的源码参考
  6. 少儿编程150讲轻松学Scratch(十二)-用Scratch制作石头剪子布游戏
  7. 自己简单封装的自己项目需要的http请求
  8. [转载] Java 重写paint绘图
  9. 【机器学习】从房价预测问题看回归算法
  10. Android DatePicker 时间选择器
  11. 光纤传输与网络技术作业(第一部分)
  12. 57 Insert Interval
  13. 9106w android7,三星n9106w官方原版固件rom刷机包_三星n9106w系统线刷包
  14. Pascal 转 C++ 教程2
  15. 少爷秋游云台山:沿途风景为其绽放
  16. 阿里云ECS服务器跨账号迁移
  17. localtime 和 localtime_r
  18. oracle截取日期函数
  19. uni-app 页面生命周期
  20. JavaScript 动态获取ajax 自动刷新接口内容

热门文章

  1. pixy php,Pixy2与STM32进行SPI通信
  2. 服务器支持的网上银行系统列表,兴业银行欢迎您
  3. LabVIEW字符串正常显示与十六进制显示相互强制转换
  4. springBoot将excel文件数据导入数据库
  5. The ADB binary found at xxx is obsolete问题解决
  6. 常用坐标系及坐标系之间的变换
  7. [Tool] 配置文件之Web.config
  8. 【项目管理案例】第六期:如何规划和管理项目进度
  9. 航天飞机的宽度是由马屁股决定的
  10. JavaScript的打卡学习笔记(一)