ATT iOS:是什么、跟踪请求机制与IDFA

作者: IT Sectr 发布日期: 2026-05-20 阅读时间: 10 分钟

App Tracking Transparency(ATT)是iOS的一项机制,要求在应用和网站上进行跟踪之前,获得用户对广告标识符IDFA访问权限的明确同意。ATT在iOS 14.5中引入,强制所有开发者在进行跟踪前显示带有权限请求的系统对话框。根据Apple Developer Documentation每个使用IDFA进行定向广告或归因的应用都必须集成ATT框架并获得访问权限。

要点

  • ATT — App Tracking Transparency,iOS 14.5+中的跟踪请求框架
  • IDFA — 设备的广告标识符,未经同意访问受到限制
  • 系统对话框 — 带有应用文本的标准弹窗,无法修改
  • 跟踪权限 — 展示广告和安装归因的必需请求
  • 拒绝 — 用户可以随时在设置中撤销权限

什么是ATT(App Tracking Transparency)?

App Tracking Transparency是苹果公司为保护用户隐私而推出的框架,在iOS 14.5中引入。它要求应用在将设备广告标识符(IDFA)用于跟踪之前,必须获得明确授权

在ATT出现之前,开发者可以在未经允许的情况下读取IDFA,这使得广告网络能够建立用户档案并跟踪他们在应用和网站之间的活动。苹果称这种做法侵犯了隐私,并引入了强制性的同意对话框。

该框架从iOS 14.0开始可用,但随着2021年4月iOS 14.5的发布,对所有使用IDFA的应用成为强制要求。根据Flurry Analytics的数据,在ATT实施后,不到25%的美国用户同意跟踪,这从根本上改变了移动广告市场。

ATT通过一个特殊的系统对话框来检查权限是否存在,应用无法修改或绕过该对话框。用户会看到一个带有开发者提供文本的标准弹窗,并选择“允许”或“要求应用不跟踪”。

ATT如何与iOS中的隐私相关联

苹果将ATT定位为整体隐私策略的一部分,该策略还包括App Store中的隐私营养标签和隐私清单。这三种机制协同工作:标签显示应用收集哪些数据,清单声明使用API的原因,而ATT让用户控制跟踪行为。

拒绝跟踪不会阻止应用本身的运行——用户可以继续使用所有功能,但广告网络将无法获得IDFA进行个性化和归因。IDFA的替代方案是苹果的SKAdNetwork和概率归因。

根据Branch Metrics的数据,在ATT实施后,全球范围内接收IDFA的应用比例从70%下降到20%。这导致了对安装归因和广告变现方法的重新审视。

iOS 15和16中的变化

在iOS 15中,苹果没有加强ATT的要求,但增加了应用隐私报告——向用户显示应用访问传感器和数据的频率的报告。iOS 16扩展了控制:用户可以随时通过设置→隐私→跟踪来更改跟踪设置。

重要提示:如果用户在ATT对话框中选择“要求应用不跟踪”,应用将不会收到IDFA值,而是返回一个全零字符串——00000000-0000-0000-0000-000000000000。尝试以其他方式或通过迂回方法读取IDFA将导致应用在App Store被拒绝。

iOS 17开始,苹果加强了检查:如果应用在不显示ATT系统对话框的情况下请求IDFA,它将在操作系统级别收到拒绝,而不仅仅是空标识符。这排除了在用户不知情的情况下在后台收集IDFA的可能性。

iOS中的跟踪请求如何工作

ATT请求过程包括三个阶段:检查状态、显示系统对话框和处理响应。开发者不能跳过任何一步——操作系统控制每个阶段。

检查授权状态

在调用对话框之前,应用必须通过ATTrackingManager检查当前状态。可能的状态有:notDetermined(尚未请求)、restricted(被设备策略禁止)、denied(用户拒绝)、authorized(已授权)。

如果状态已经确定(authorized或denied),则无法再次调用对话框——用户已经做出了最终选择。更改决定的唯一方法是通过iOS系统设置。

检查状态使用ATTrackingManager.trackingAuthorizationStatus属性。调用必须在主线程上进行,因为系统对话框是UI组件。

swift
import AppTrackingTransparency
import AdSupport

func checkTrackingStatus() {
    let status = ATTrackingManager.trackingAuthorizationStatus
    switch status {
    case .notDetermined:
        requestTrackingPermission()
    case .authorized:
        readIDFA()
    case .denied, .restricted:
        useAlternativeTracking()
    @unknown default:
        break
    }
}

显示系统对话框

要显示对话框,调用requestTrackingAuthorization方法,并传入一个接收用户选择结果的闭包。重要提示:对话框只显示一次。如果开发者尝试再次调用,系统将忽略请求。

对话框中的文本由两部分组成:系统标题(不可更改)和开发者在Info.plist中通过NSUserTrackingUsageDescription键指定的自定义消息。

对话框应在自然上下文中出现——不是在应用启动时立即出现,而是在首次尝试使用与跟踪相关的功能时。苹果建议在用户理解功能价值后再显示对话框。

swift
func requestTrackingPermission() {
    ATTrackingManager.requestTrackingAuthorization { status in
        DispatchQueue.main.async {
            switch status {
            case .authorized:
                let idfa = ASIdentifierManager.shared().advertisingIdentifier
                print("IDFA: \(idfa)")
            case .denied:
                print("用户拒绝了跟踪")
            default:
                break
            }
        }
    }
}

IDFA与访问限制

IDFA(Identifier for Advertisers)是iOS设备的唯一广告标识符,用于定向广告和安装归因。在ATT之前,开发者通过ASIdentifierManager获取它而不受限制。在ATT引入后,对IDFA的访问被阻止,直到用户给予明确同意。

什么是IDFA及其用途

IDFA是一个UUID字符串,每个iOS设备唯一。广告网络使用IDFA用于:跟踪应用安装(归因)、基于用户兴趣展示相关广告、衡量广告活动的效果以及重定向——召回未完成目标操作的用户。

用户拒绝跟踪后,ASIdentifierManager返回值00000000-0000-0000-0000-000000000000。不过,应用仍然可以出于技术目的(例如反欺诈)读取IDFA,但不能将其传递给广告网络。

根据Singular(2024)的数据,全球ATT同意率为25-35%,其中欧洲(GDPR)的比例(40-50%)高于美国(15-25%)。这迫使广告平台开发替代归因方法。

IDFA的替代方案:SKAdNetwork和概率归因

SKAdNetwork是苹果的框架,用于在不暴露IDFA的情况下进行安装归因。它在操作系统级别工作:广告网络发送签名的回传,苹果验证后转发给开发者。归因在不识别特定用户的情况下进行,仅在活动级别。

概率归因使用多种设备信号——型号、iOS版本、时区、屏幕亮度——来概率性地匹配安装与广告展示。然而,苹果在其规则中禁止这种方法,使用它可能导致应用被拒绝

Google、Adjust和AppsFlyer开发了自己的混合解决方案,将SKAdNetwork与自己的聚合数据相结合。例如,Google Ads Conversion Tracking使用SKAdNetwork回传和自己的机器学习模型进行无IDFA归因。

在应用代码中实现ATT

要集成ATT,需要在Info.plist中添加NSUserTrackingUsageDescription键并导入AppTrackingTransparency框架。以下是Swift和Objective-C的步骤。

配置Info.plist

第一步——在Info.plist中添加NSUserTrackingUsageDescription键,并附上解释应用为何需要跟踪的文本。此文本将显示在系统对话框中。示例:“您的IDFA用于展示个性化广告和跟踪活动效果”。

如果没有此键,调用requestTrackingAuthorization将导致应用崩溃——苹果在显示对话框之前会明确检查NSUserTrackingUsageDescription的存在。文本必须简洁、具体并与实际数据使用情况相符。

重要提示:该键通过Xcode的Info选项卡手动添加,或通过编辑Info.plist的XML源文件添加。添加后,重新构建项目并检查该键是否出现在最终二进制文件中。

xml
<!-- Info.plist -->
<key>NSUserTrackingUsageDescription</key>
<string>This identifier is used to deliver
personalized ads and measure campaign performance.</string>

在Swift中完整集成

在实际项目中,最好在广告模块或跟踪器首次启动之前调用ATT请求。建议事先在单独的屏幕上向用户解释同意的价值(预授权提示)——这可以将同意率提高20-30%。

预授权提示是一个自定义UI,展示启用跟踪的好处(“帮助我们展示相关广告”)。只有在点击“继续”按钮后才会调用ATT系统对话框。Adjust(2024)记录到,使用预授权屏幕时同意率提高了40%。

swift
final class TrackingManager {
    static let shared = TrackingManager()

    func requestTrackingIfNeeded() {
        guard ATTrackingManager.trackingAuthorizationStatus
            == .notDetermined
        else { return }

        ATTrackingManager.requestTrackingAuthorization { _ in
            NotificationCenter.default.post(
                Notification(Name("trackingStatusChanged"))
            )
        }
    }
}

使用ATT时的常见错误

开发人员在集成ATT时经常犯典型错误,导致同意转化率下降或应用被App Store审核人员拒绝。让我们看看五个最常见的问题。

应用启动后立即请求ATT

最常见的错误——在应用加载后的第一个屏幕上显示ATT系统对话框。用户尚未理解应用的价值,很可能会点击“拒绝”。IronSource(2023)显示,在第一个屏幕上请求与在第三次会话后请求相比,同意率下降了32%。

建议:在用户执行了目标操作(查看内容、开始引导流程)或使用应用3-5次会话后再请求跟踪。这可以提高信任度和价值认知。

缺少预授权屏幕

在没有事先解释的情况下显示ATT系统对话框——这是一个将转化率降低到15-20%的错误。用户看到意外的请求并本能地拒绝。带有好处解释的预授权屏幕可以将同意率提高到35-45%。

预授权文本必须具体:“允许展示相关广告——这帮助我们保持免费”。避免笼统的措辞——它们会降低信任度。GameAnalytics在2023年显示,带有好处解释的预授权屏幕比空白屏幕多获得28%的同意。

忽略restricted和denied状态

如果用户已经拒绝了跟踪,或者状态为restricted(家长控制、企业策略),应用不应再次调用ATT对话框。重复调用不起作用,并被视为侵犯隐私。相反,切换到SKAdNetwork和上下文广告

在restricted状态下,应用无法确定设置中是否启用了“允许跟踪请求”选项。在这种情况下,始终使用通过SKAdNetwork的无替代归因,并且不显示预授权屏幕。

不调用ATT就检查IDFA

在没有事先ATT权限的情况下,通过ASIdentifierManager.shared().advertisingIdentifier读取IDFA会返回全零字符串。一些开发者试图通过私有API使用旧的IDFA访问方法——这保证会导致应用在审核时被拒绝

苹果使用静态代码分析器和机器学习来检测迂回方法。即使应用通过了审核,后续的更新或自动检查也可能发现违规行为并导致开发者账户被禁用。

NSUserTrackingUsageDescription中的文本不正确

NSUserTrackingUsageDescription键中的文本过长、模糊或具有误导性——应用被审核人员拒绝的原因。苹果检查描述是否与实际数据使用情况相符。如果应用没有广告但注明“用于广告目的”,审核人员将拒绝该版本。

推荐格式:用2-3句话具体描述IDFA的使用目的。无广告应用的示例:“该标识符用于分析和防止欺诈。数据不会传输给第三方,也不会用于用户画像分析”。

常见问题

如果不在应用中添加ATT会怎样?

如果应用在没有ATT的情况下使用IDFA或跟踪,苹果将在审核过程中拒绝它。即使没有跟踪,也建议添加ATT以保持透明度,否则下次更新时被拒绝的风险会增加。

没有跟踪同意的情况下应用能正常工作吗?

是的,应用完全正常工作,但广告网络将无法获得IDFA进行个性化和归因。除个性化广告外,应用的所有功能仍然可用。

能否重置iOS中的ATT状态?

是的,用户可以随时通过设置→隐私→跟踪更改决定。应用无法通过编程方式重置状态——只能通过系统设置。

如何提高ATT同意率?

使用带有好处解释的预授权屏幕,不要在首次启动时请求跟踪,而是在执行目标操作后请求。Meta(2024)显示延迟请求的同意率提高了35%。

ATT会影响儿童应用吗?

根据苹果规则,“儿童”类别中的应用不能使用IDFA和ATT进行跟踪。同时,它们也被禁止将数据传输给第三方用于分析或广告。

总结

  • ATT — App Tracking Transparency,iOS 14.5+中请求IDFA访问权限的必需框架
  • IDFA — 设备广告标识符,受ATT保护防止未经授权的访问
  • 系统对话框 — 用户始终看到一个应用无法修改或绕过的对话框
  • 预授权 — 自定义的好处解释屏幕,可将同意率提高20-40%
  • SKAdNetwork — 苹果为无法访问IDFA的应用提供的无替代归因方案
  • 转化率 — 全球同意率为25-35%,在欧洲由于GDPR高达50%
  • 在调用任何跟踪器之前集成ATT,并务必在Info.plist中添加NSUserTrackingUsageDescription键

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读