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

iOS集成AdMob:ATT与GDPR弹窗顺序及个性化广告判断问题

关于iOS AdMob集成的两个核心问题解答

1. ATT授权弹窗与GDPR合规表单的展示顺序

顺序非常重要,正确的流程是先完成UMP(GDPR/CCPA等区域合规)的同意收集流程,再发起ATT授权请求。

原因如下:

  • 区域合规优先级高于平台级追踪授权:如果用户在GDPR表单中拒绝了所有数据收集权限,后续请求ATT授权(用于获取IDFA)就失去了意义,反而可能违反合规要求。
  • UMP的同意状态会影响ATT请求的必要性:只有当用户同意了个性化广告相关权限后,请求IDFA才能最大化广告收益;若用户仅同意非个性化广告,IDFA对广告投放没有帮助,无需发起ATT请求。

建议调整你的代码顺序,先调用requestLatestConsentForm(),在UMP流程完成后(无论用户是否同意),再根据同意状态决定是否调用requestIDFA()。

2. 判断用户是否同意个性化广告的方法

UMPConsentInformation.sharedInstance.consentStatus仅能表示用户已给出同意决策,但无法区分是同意个性化广告还是仅同意非个性化广告。你可以通过以下方式获取具体的同意细节:

方法1:读取UMP的具体同意状态

通过UMPConsentInformation.sharedInstance的adPersonalizationConsentStatus属性判断用户是否同意个性化广告:

// 在用户提交同意表单后调用
func configureAdsAfterConsent() {
    let consentInfo = UMPConsentInformation.sharedInstance
    guard consentInfo.consentStatus == .obtained else { return }
    
    let allowsPersonalization = consentInfo.adPersonalizationConsentStatus == .granted
    // 配置广告请求:仅当同意个性化时,才允许投放个性化广告
    let config = GADMobileAds.sharedInstance().configuration
    config.requestNonPersonalizedAdsOnly = !allowsPersonalization
    
    GADMobileAds.sharedInstance().start(completionHandler: nil)
}

方法2:结合ATT授权状态优化投放逻辑

如果用户同时同意ATT授权和个性化广告,投放个性化广告;若仅同意其中一项或都不同意,则投放非个性化广告:

func configureAdsAfterConsent() {
    let consentInfo = UMPConsentInformation.sharedInstance
    guard consentInfo.consentStatus == .obtained else { return }
    
    let hasATTAuthorization = ATTrackingManager.trackingAuthorizationStatus == .authorized
    let allowsPersonalization = consentInfo.adPersonalizationConsentStatus == .granted
    
    let config = GADMobileAds.sharedInstance().configuration
    // 仅当两者都同意时,才允许个性化广告
    config.requestNonPersonalizedAdsOnly = !(hasATTAuthorization && allowsPersonalization)
    
    GADMobileAds.sharedInstance().start(completionHandler: nil)
}

对你现有代码的修改建议

在loadForm方法的表单提交回调中,替换原有的启动广告逻辑,改为上述配置方法,并根据同意状态决定是否请求ATT:

form?.present(
    from: UIApplication.shared.windows.first!.rootViewController! as UIViewController,
    completionHandler: { dismissError in
        if UMPConsentInformation.sharedInstance.consentStatus == .obtained {
            self.configureAdsAfterConsent()
            // 仅当同意个性化广告时,才发起ATT授权请求
            if UMPConsentInformation.sharedInstance.adPersonalizationConsentStatus == .granted {
                self.requestIDFA()
            }
        }
    })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:05:25