You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 15上App Tracking Transparency权限弹窗不显示导致应用被拒如何解决

iOS 15 ATT权限请求不弹出修复方案

苹果在iOS 15及以上版本对ATT请求的触发逻辑做了更严格的限制:仅当应用处于前台活跃状态时,调用requestTrackingAuthorization才会触发系统权限弹框,你的代码触发时机不符合要求:

  • didFinishLaunchingWithOptions执行阶段应用仅完成初始化,尚未进入前台活跃状态,系统会直接忽略ATT请求
  • 根视图控制器的viewDidLoad执行阶段视图仅完成加载,尚未渲染到当前窗口,应用也未进入完全活跃状态,同样无法触发弹框

修复步骤

  • 调整触发时机:不要在didFinishLaunchingWithOptions和根视图viewDidLoad中调用请求,建议监听UIApplication.didBecomeActiveNotification通知,在应用首次进入活跃状态后再发起ATT请求;也可以将逻辑移到根视图的viewDidAppear(_:)方法中执行
  • 校验权限配置:确认Info.plist中已经添加NSUserTrackingUsageDescription字段,填写清晰明确的用户数据跟踪用途,模糊的描述会直接导致审核被拒
  • 增加状态判断:发起请求前先检查当前授权状态,仅当状态为notDetermined时再调用请求,用户已经做出过授权选择后,重复调用不会触发弹框
  • 调整广告跟踪配置逻辑:原代码无论用户授权结果都直接开启广告跟踪不符合苹果规范,需要根据用户的授权状态调整配置

参考实现代码

if #available(iOS 14, *) {
    // 监听应用进入活跃状态通知
    NotificationCenter.default.addObserver(
        forName: UIApplication.didBecomeActiveNotification,
        object: nil,
        queue: .main
    ) { [weak self] _ in
        // 移除通知避免重复触发
        NotificationCenter.default.removeObserver(
            self!,
            name: UIApplication.didBecomeActiveNotification,
            object: nil
        )
        
        let authStatus = ATTrackingManager.trackingAuthorizationStatus
        guard authStatus == .notDetermined else {
            // 已经授权过直接根据状态配置广告跟踪
            FBAdSettings.setAdvertiserTrackingEnabled(authStatus == .authorized)
            return
        }
        
        // 发起权限请求
        ATTrackingManager.requestTrackingAuthorization { status in
            FBAdSettings.setAdvertiserTrackingEnabled(status == .authorized)
        }
    }
}

内容的提问来源于stack exchange,提问作者Ömer Karaca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:15:02