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

iOS Objective-C实现Google AdMob GDPR同意表单不显示问题求助

解决AdMob GDPR同意表单无法显示的问题

兄弟,我仔细扒了你的代码,发现几个核心逻辑和顺序问题,这就是表单一直弹不出来的根源:

问题分析

  • 流程顺序完全搞反了:AdMob的GDPR合规流程要求先获取用户地区的合规信息(requestConsentInfoUpdateForPublisherIdentifiers),再根据返回状态决定是否显示表单。你现在先创建表单、直接尝试显示,之后才请求信息更新,整个流程逻辑颠倒了。
  • 提前强制设置了同意状态:你直接把consentStatus设为PACConsentStatusPersonalized,这会让SDK默认用户已经完成了同意选择,自然不会再触发表单显示。
  • 表单加载与显示时机错误:你在表单还没完成loadWithCompletionHandler加载的情况下就调用presentFromViewController,这时候表单资源还没准备好,肯定无法正常显示。

修正后的代码

下面是完全符合官方流程的修正版代码:

#import "boogagoogleform.h"
#import <PersonalizedAdConsent/PersonalizedAdConsent.h>

@interface boogagoogleform ()
@end

@implementation boogagoogleform

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 第一步:先请求同意信息更新,这是整个流程的起点
    [PACConsentInformation.sharedInstance requestConsentInfoUpdateForPublisherIdentifiers:@[ @"pub-012345678" ] completionHandler:^(NSError *_Nullable error) {
        if (error) {
            NSLog(@"同意信息更新失败: %@", error);
            return;
        }
        
        // 信息更新成功后,判断是否需要显示同意表单
        if (PACConsentInformation.sharedInstance.isConsentFormRequired) {
            [self loadAndPresentConsentForm];
        } else {
            // 用户所在地区无需显示表单,或已完成同意选择
            PACConsentStatus status = PACConsentInformation.sharedInstance.consentStatus;
            NSLog(@"当前同意状态: %ld", (long)status);
        }
    }];
}

- (void)loadAndPresentConsentForm {
    NSURL *privacyURL = [NSURL URLWithString:@"https://www.your.com/privacyurl"];
    PACConsentForm *form = [[PACConsentForm alloc] initWithApplicationPrivacyPolicyURL:privacyURL];
    form.shouldOfferPersonalizedAds = YES;
    form.shouldOfferNonPersonalizedAds = YES;
    form.shouldOfferAdFree = NO;
    
    // 先完成表单加载,成功后再弹出显示
    [form loadWithCompletionHandler:^(NSError *_Nullable error) {
        NSLog(@"表单加载完成. 错误: %@", error);
        if (error) {
            NSLog(@"表单加载失败: %@", error);
            return;
        }
        
        // 加载成功后,从当前ViewController弹出表单
        [form presentFromViewController:self dismissCompletion:^(NSError *_Nullable error, BOOL userPrefersAdFree) {
            if (error) {
                NSLog(@"表单显示失败: %@", error);
            } else if (userPrefersAdFree) {
                // 用户选择无广告版本,这里处理跳转或购买逻辑
                NSLog(@"用户选择无广告版本");
            } else {
                // 获取用户最终的同意选择
                PACConsentStatus status = PACConsentInformation.sharedInstance.consentStatus;
                NSLog(@"用户同意状态: %ld", (long)status);
            }
        }];
    }];
}

@end

额外测试提示

  • 确保你的pub-012345678是真实有效的AdMob发布者ID,别用示例占位符。
  • 隐私政策URL必须是可正常访问的有效链接,否则表单可能加载失败。
  • 测试时可以模拟欧盟地区环境,在requestConsentInfoUpdateForPublisherIdentifiers前添加以下代码(上线前记得移除):
    PACConsentInformation.sharedInstance.debugGeography = PACDebugGeographyEEA;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:13:10