iOS14+中广告标识(idfa)获取方式
1、什么是IDFA
假如没有网络身份证,那么每个商家(App)只能基于自己的账号体系标识用户,并记录用户的行为。而有了统一的网络身份证之后,各个商家之间的数据就可以打通了,天猫不仅知道用户A在淘宝系的购物数据,也能了解到该用户在社交网络的行为,以及旅游的喜好,等等。
可以想象一下,随着时间的推移,用户在移动端的行为数据越积越多,用户就会变得越来越像透明人,除非换手机,几乎没有任何办法去抵御这个科技带来的负面效应。
只有一个例外,苹果!苹果的特立独行体现在诸多方面,用户隐私就是其中之一。
IDFA 是苹果 iOS 6 开始新增的广告标识符,英文全称是 Identifier for Advertising ,用于给开发者跟踪广告效果用的,可以简单理解为 iPhone 的设备临时身份证,说是临时身份证是因为它允许用户更换,IDFA 存储在用户 iOS 系统上。虽然同一设备上的App应用获取到的 IDFA 是相同的,但是,iOS 用户可以通过(设置程序 -> 通用 -> 还原 -> 还原位置与隐私)更换 IDFA,而且从iOS 10 系统开始,提供禁止广告跟踪功能,用户勾选这个功能后,应用程序将无法读取到设备的 IDFA。
因为这个IDFA不是唯一的,所以一开始行业内是很抵触的,想方设法去获取UDID(跟手机绑定的,用户不能改变),引起苹果大怒,在13年时禁止所有App获取UDID,否则不能上架,也正因为其生态的封闭性,才能迫使大家就范。虽然IDFA不是唯一的,但是毕竟胜过没有,况且也没有多少用户会去更改。
2、如何关闭广告跟踪
在iOS14之前,我们可以通过(设置->隐私->广告)进入广告设置页面,打开“限制广告跟踪”开关,如下图:
在iOS14+系统上,我们点击(系统设置->隐私)会发现增加了一个叫做“跟踪”的功能,如下图:
点击进入后,我们可以看到“允许App请求跟踪”开关,如下图:
如果不想让商户App跟踪,只需要将开关关闭即可。
通过上面的方式,商户App就获取不到IDFA表示符,或者获取到的标识符为:00000000-0000-0000-0000-000000000000。
3、获取idfa的方式
通过调用AdSupport.framework动态库来获取
[ASIdentifierManager sharedManager].advertisingIdentifier.UUIDString
以上代码在iOS14.5之前,只要用户把“跟踪”开关设置为允许,就可以正常访问到IDFA信息,不需要用户授权处理。从官方文档中https://developer.apple.com/cn/app-store/user-privacy-and-data-use/中了解到:
从 iOS 14.5, iPadOS 14.5 和 Apple tvOS 14.5 开始,您必须先征得用户的许可,才能在其他公司拥有的 app 和网站内对其进行跟踪。
4、Apple对“跟踪”隐私说明
下面是App官方给出的征求跟踪许可:
从 iOS 14.5, iPadOS 14.5 和 Apple tvOS 14.5 开始,您需要通过 AppTrackingTransparency 框架征得用户许可,然后才能跟踪用户或访问其设备的广告标识符。跟踪是指将从您的 app 收集的用户或设备数据与从其他公司的 app、网站或离线文件中收集的用户或设备数据关联在一起,以投放定向广告或衡量广告效果的行为。此外,跟踪还指与数据代理商共享用户或设备数据。
跟踪的例子包括但不限于:
根据从其他公司的 app 和网站收集的用户数据,在您的 app 中显示定向广告。
与数据代理商共享设备位置数据或电子邮件列表。
与第三方广告网络共享电子邮件、广告 ID 或其他 ID 的列表,该第三方广告网络使用上述信息在其他开发者的 app 中重新定位这些用户或查找类似的用户。
在您的 app 中放置一个第三方 SDK,它会将您 app 中的用户数据与其他开发者 app 中的用户数据结合起来,用于投放定向广告或衡量广告效果 (即使您没有将该 SDK 用于这些目的)。例如,使用分析 SDK 可以调整从您的 app 中集得数据的用途,以在其他开发者的 app 中启用定向广告。
以下用例不被视为跟踪行为,无需通过 AppTrackingTransparency 框架征取用户许可:
您 app 中的用户数据或设备数据仅与用户设备上的第三方数据关联,且不会以能识别用户或设备的方式从设备中对外发送。
与您共享数据的数据代理商仅将数据用于欺诈检测、欺诈防范或安全防护目的,并且仅代表您行事。例如,仅出于防范信用卡诈骗的目的使用数据代理商。
AppTrackingTransparency框架的使用说明:
若要征得许可来跟踪用户及访问设备的广告符标识,请使用 AppTrackingTransparency 框架。同时,您还必须在系统提示中加入用途说明,以解释为什么要跟踪用户。除非您征得用户对启用跟踪功能的许可,否则设备中广告标识符的值将全部为零,您也不可如上所述地对用户进行跟踪。
尽管您可以选择在任何时间显示 AppTrackingTransparency 提示,但只有您显示这个提示并且用户授予许可后,系统才会返回设备的广告标识符值。用途字符串可用来说明这些数据将用于什么用途,以帮助用户了解他们将选择共享哪些信息。如果用户允许 app 请求跟踪,但却关闭了您 app 的跟踪,您可以请求用户更改对 app 的设定,并向用户提供能转至“设置”的快捷链接 (英文),以便他们更改跟踪许可的设定。
5、使用AppTrackingTransparency框架
在iOS14.5+系统上,如果应用收集有关最终用户的数据并与其他公司共享,以便跨应用和网站进行跟踪,则必须使用AppTrackingTransparency框架。AppTrackingTransparency框架向用户提出应用程序跟踪授权请求,并提供跟踪授权状态。
要使用AppTrackingTransparency框架,请执行以下操作:
Set up a
NSUserTrackingUsageDescription
to display a system-permission alert request for your app installed on end-user devices.Call
requestTrackingAuthorization(completionHandler:)
to present the app-tracking authorization request to the end user.Use
trackingAuthorizationStatus
to determine the app-tracking permission status. SeeATTrackingManager.AuthorizationStatus
for status enums.
有几个需要注意的点,这里总结如下:
如果我们使用Tracking Transparency API,那么必须在info.plist中增加隐私描述,否则的话App存在奔溃的风险
只会弹出一次请求授权弹框
程序中可以使用如下的代码:
if (@available(iOS 14, *)) {// iOS14及以上版本需要先请求权限[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {// 获取到权限后,依然使用老方法获取idfaif (status == ATTrackingManagerAuthorizationStatusAuthorized) {NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];NSLog(@"%@",idfa);} else {NSLog(@"请在设置-隐私-跟踪中允许App请求跟踪");}}];} else {// iOS14以下版本依然使用老方法// 判断在设置-隐私里用户是否打开了广告跟踪if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];NSLog(@"%@",idfa);} else {NSLog(@"请在设置-隐私-广告中打开广告跟踪功能");}}
6、IDFA对审核的影响
https://blog.csdn.net/qq_29284809/article/details/52053833
您 app 中的用户数据或设备数据仅与用户设备上的第三方数据关联,且不会以能识别用户或设备的方式从设备中对外发送。
与您共享数据的数据代理商仅将数据用于欺诈检测、欺诈防范或安全防护目的,并且仅代表您行事。例如,仅出于防范信用卡诈骗的目的使用数据代理商。
7、参考文章
IDFA扫盲:https://www.cnblogs.com/zhian/p/7663449.html
IDFA在iOS14中获取的方式:https://www.jianshu.com/p/be37f85f73a6
Apple隐私官方说明:https://developer.apple.com/cn/app-store/app-privacy-details/#user-tracking
用户隐私和数据使用:https://developer.apple.com/cn/app-store/user-privacy-and-data-use/
使用 AppTrackingTransparency 框架:https://developer.apple.com/documentation/apptrackingtransparency
iOS14+中广告标识(idfa)获取方式相关推荐
- iOS开发 ios14.0以上系统广告标识idfa获取适配
OS14以上系统获取idfa的方式有一些变化,这里我们来讨论一下如何在IOS14以上系统获取idfa. 所需环境 1.xcode需要升级到12.0以上版本. 2.手机需要升级到14.0以上版本. iO ...
- 【HBuilderX】wap2app项目如何获取iOS广告标识idfa?
使用wap2app打包app如何获取idfa? 关于这个问题,官方的文档说明存在让人误解的地方,下面将结合实际代码介绍具体的获取idfa方法. 首先,大家存在一个误解,获取idfa的代码写在哪里?官方 ...
- java xml dom getelementbyid,DOM中常见的元素获取方式
1.getElementById获取元素 返回的是一个元素对象 var timer = document.getElementById('time'); console.dir 打印返回元 ...
- html标签的id中带有.号的获取方式
$("[id='abc.def.birthday']") 转载于:https://www.cnblogs.com/liw66/p/10767258.html
- Android10+无法获取IMEI、IOS10+关闭广告跟踪IDFA解决方法
Android10+无法获取IMEI.IOS10+关闭广告跟踪IDFA解决方法 加粗样式 背景:为保护用户隐私,在Android X后IMEI无法获取:同样,IOS10+系统后支持用户关闭广告跟踪,导 ...
- 手机序列号和设备标识UDID码手机直接获取方式:
1 设备标识UDID码获取:http://fir.im/udid 或者直接手机自带的浏览器输入那个网站链接也可以的. 打开链接点击右上角3点点击在Safari浏览器中打开,就是像一个指南中的图标点进去 ...
- python input与返回值-python中使用input()函数获取用户输入值方式
我们编写程序最终目的还是来解决实际问题,所以必然会遇到输入输出的交互问题,python中提供了input函数用来获取用户的输入,我们可以用以下程序演示. user_gender = input(&qu ...
- php获取url传递的参数,php解析url并得到url中的参数及获取url参数的四种方式
下面一段代码是php解析url并得到url中的参数,代码如下所示:<?php $url = "http://www.baidu.com/index.php?m=content& ...
- php解析url并得到url中的参数及获取url参数的四种方式
本文给大家介绍php解析url并得到url中的参数及获取url参数的四种方式,涉及到将字符串参数变为数组,将参数变为字符串的相关知识,本文代码简单易懂,感兴趣的朋友一起看看吧 下面一段代码是php解析 ...
最新文章
- php类精确验证身份证号码
- [C++11]move资源的转移
- 算法:输入一个链表,输出该链表中倒数第k个结点。
- react配合python_部署React前端和Django后端的3种方法
- C语言 野指针 - C语言零基础入门教程
- Spring 使用Cache(转)
- Scoped CSS规范草案
- 计网笔记(一) 什么是因特网
- vscode调试typescript
- 区块链+高薪,你还等什么?
- vin码车架号查询易语言代码
- 从字符串中查找并提取数字
- python bmp转jpg
- 【雅思】【写作】【大作文】Discuss both views and give your own opinion
- 读书百客:《感遇·江南有丹橘》赏析
- 社交瓶颈下,为何巨头都选择用“眼镜”做平台?
- android 使用iphone线控耳机,耳机 篇一:关于安卓手机怎么用苹果专用耳机的问题...
- Go GUI---lxn/walk 自带demo学习---7.文件浏览器
- HEAD detached at xxxx
- codeforce Anton and Fairy Tale
热门文章
- 开源协议:在项目中使用Apache License 2.0
- 轻量级报表工具Telerik Report 2020新版亮点
- Epson机械手程序开发(3)机械手报错时的处理
- Shopee退货运费是由谁承担?
- 知乎:硬件和软件哪个吃香?
- 物联网的作用和发展方向
- 陈天奇明年将加入CMU出任助理教授
- 计算机休眠usb充电,电脑在休眠状态下,用usb口可以为手机充电吗?
- python点餐系统早餐_python 点餐系统(仅函数实现)
- html移动端源码,Framework7 (HTML 移动端框架) v4.1.0