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
相关产品推荐
相关产品推荐

