You need to enable JavaScript to run this app. SwiftUI中AppTransparencyTracking功能不生效,遗漏了什么配置?
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中AppTransparencyTracking功能不生效,遗漏了什么配置?

SwiftUI IDFA权限申请异常修复方案

你当前通过@UIApplicationDelegateAdaptor关联自定义AppDelegate的写法是正确的,功能无法运行是由以下几个遗漏配置和代码问题导致的:

1. 修复AppDelegate代码逻辑错误

现有代码存在两个明显问题:

  • requestIDFA方法被嵌套定义在didFinishLaunchingWithOptions方法内部,且没有被主动调用
  • didFinishLaunchingWithOptions方法没有返回布尔值,会触发编译异常
    修正后的完整代码如下:
import AppTrackingTransparency
import AdSupport

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        // 应用启动完成后主动调用IDFA请求方法
        requestIDFA()
        return true
    }
    
    // 将IDFA请求方法移至类层级定义
    func requestIDFA() {
        // 新增iOS 14.5+版本判断,低于该版本无需申请权限可直接获取IDFA
        if #available(iOS 14.5, *) {
            ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
                // 权限申请完成后在此处加载广告
                // loadAd()
            })
        } else {
            let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
            // 低版本直接加载广告
            // loadAd()
        }
    }
}

2. 添加Info.plist隐私权限声明

必须在项目Info.plist中添加用户追踪权限的描述文案,否则系统会直接拦截权限申请弹窗,不会向用户展示:

  1. 右键Info.plist选择Open As -> Source Code
  2. 在<dict>标签内部添加如下键值对:
<key>NSUserTrackingUsageDescription</key>
<string>需要获取您的广告标识符以向您推送适配的个性化内容</string>

描述文案可根据实际业务场景调整,不能为空,否则会被App Store审核驳回

3. 调整调用时机适配系统规则

ATTrackingManager的权限申请仅能在应用进入前台活跃状态后触发,如果你遇到启动阶段弹窗不弹出的情况,可以将requestIDFA的调用时机调整到首屏页面的onAppear回调中执行,避免在应用未完成启动的阶段调用被系统忽略。

内容的提问来源于stack exchange,提问作者vinny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:36:06