Explore App Tracking Transparency
System & Services 进阶 20m

深入理解应用追踪透明度

Explore App Tracking Transparency

2022年6月6日

在 Apple 官方观看视频

一句话判断

如果你对 ATT(App Tracking Transparency)的理解还停留在”弹个窗问用户同不同意”,这场 Session 会帮你搞清楚哪些场景需要弹、哪些不需要、以及如何提高用户同意率。

这场 Session 讲了什么

隐私工程团队的 Julia 系统讲解了 App Tracking Transparency 框架的适用范围和实践指南。ATT 自 2021 年起成为 App Store 的强制要求:应用在跨应用和网站追踪用户之前必须获得用户许可。

Session 用大量具体场景来界定什么算”追踪”什么不算:同一个公司内部应用的跨应用数据关联不算追踪,但跨公司的数据关联算;即使用哈希后的邮箱地址做关联也需要授权;向数据经纪商出售用户数据也算追踪。

还讲解了如何请求追踪授权、如何设计授权时机以获得更高的同意率,以及第三方 SDK 对追踪责任的影响。

值得深挖的点

追踪的定义边界。 追踪的核心定义是”将你的应用收集的用户/设备数据与其他公司应用、网站收集的数据进行关联”。关键点在于”其他公司”——同一公司旗下的多个应用之间共享数据不算追踪。另一个独立的定义是”向数据经纪商分享用户数据”,无论数据是否被关联。

标识符类型不影响追踪判定。 无论你使用 IDFA、邮箱地址、设备 ID 还是哈希后的标识符来关联数据,都属于追踪。哈希不改变追踪的本质——只要能关联同一用户的数据就需要授权。

第三方 SDK 的追踪责任归属。 你需要对应用中所有第三方代码的追踪行为负责。如果一个广告 SDK 将你的应用数据与广告网络在其他应用中收集的数据做关联来衡量广告效果,即使你只收到聚合报告,你的应用也需要请求追踪授权。如果不确定某个 SDK 是否涉及追踪,应该直接询问 SDK 开发者。

服务端追踪也算。 即使用户设备不直接与数据经纪商通信,只要你的服务端将用户数据分享给了数据经纪商,就需要追踪授权。追踪行为的判定不局限于客户端。

代码片段

import AppTrackingTransparency
import AdSupport

// 请求追踪授权
func requestTrackingPermission() {
    ATTrackingManager.requestTrackingAuthorization { status in
        switch status {
        case .authorized:
            // 用户同意追踪,可以使用 IDFA
            let idfa = ASIdentifierManager.shared().advertisingIdentifier
            print("IDFA: \(idfa)")
        case .denied:
            // 用户拒绝追踪,不要使用 IDFA
            break
        case .notDetermined:
            // 用户还没做选择
            break
        case .restricted:
            // 设备限制追踪
            break
        @unknown default:
            break
        }
    }
}

// 在合适的时机请求授权
// 不要在应用启动时立即弹出
// 等用户理解了为什么需要追踪再请求
func checkAndRequestPermission() {
    let currentStatus = ATTrackingManager.trackingAuthorizationStatus
    if currentStatus == .notDetermined {
        // 先展示解释页面,说明为什么需要追踪
        showTrackingExplanation {
            // 用户理解后再请求授权
            ATTrackingManager.requestTrackingAuthorization { status in
                // 处理结果
            }
        }
    }
}

最佳实践

  • 在请求追踪授权前先让用户理解为什么需要追踪——用教育页面或上下文说明来提高同意率
  • 不要在应用首次启动时立即弹出授权窗口——等用户进入需要追踪的功能场景时再请求
  • 检查应用中所有第三方 SDK 的数据使用行为,确认它们是否涉及跨应用追踪
  • 即使用户拒绝追踪授权,应用的核心功能应该仍然可用
  • 追踪授权只需要请求一次,系统会记住用户的选择
  • 如果应用的功能本身不涉及追踪,不要引入不必要的追踪 SDK
  • 在 Info.plist 中提供清晰的 NSUserTrackingUsageDescription 说明

还有什么值得关注

  • 用户可以在系统设置中随时更改某个应用的追踪授权状态
  • 拒绝追踪后,IDFA 返回全零值
  • 如果你的应用只在自有应用之间共享数据,不需要 ATT 授权
  • Apple 的 SKAdNetwork 提供了一种不需要用户级标识符的广告衡量方案,可以作为 ATT 的替代路径
WWDC 2022