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框架,请执行以下操作:
-
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.
if (@available(iOS 14, *)) {
// iOS14及以上版本需要先请求权限
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// 获取到权限后,依然使用老方法获取idfa
if (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在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