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 框架征取用户许可:
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. See ATTrackingManager.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(@"请在设置-隐私-广告中打开广告跟踪功能");
}
}
https://blog.csdn.net/qq_29284809/article/details/52053833
7、参考文章
|