Flutter iOS端Google Mobile Ads正式包仍显示测试广告如何解决
问题原因和解决步骤
首先明确核心问题是AdMob后台配置的全局测试IDFA导致所有iOS设备都被识别为测试设备,按以下顺序排查修改即可:
1. 立即删除AdMob后台的全局测试IDFA
你配置的00000000-0000-0000-0000-000000000000是iOS系统默认返回的无追踪权限IDFA,所有未同意用户追踪授权的设备都会返回这个值,将其加入AdMob测试设备列表等于给所有iOS设备强制返回测试广告,和打包模式无关。
删除后仅保留你自己真实测试设备的IDFA用于开发阶段测试即可。
2. 核对广告相关ID配置
- 确认
Constants类中存储的iOS横幅、插屏、激励广告单元ID,和AdMob后台对应应用下的正式广告单元ID完全一致,注意不要和Android的ID、或者AdMob应用ID搞混 - 确认info.plist中的
GADApplicationIdentifier参数填入的是AdMob后台的iOS应用ID,而非广告单元ID - 刚创建的广告单元需要等待2~4小时才会正式生效,新创建的单元建议等待后再测试
3. 检查Xcode打包和权限配置
- 打开iOS工程的Scheme配置,确认Run/Archive的Build Configuration为
Release,且Arguments Passed On Launch中没有添加任何Google Mobile Ads相关的调试参数 - iOS14及以上版本必须完成App Tracking Transparency(ATT)权限申请:
- 在info.plist中添加
NSUserTrackingUsageDescription字段,填写清晰的权限用途说明 - 在应用启动后、加载广告前主动调用权限申请接口,获取用户授权后再加载广告,未授权会导致正式广告填充率极低甚至无法加载
- 在info.plist中添加
4. 正确测试正式广告
- 删除测试设备IDFA、完成上述配置后,打Release包通过TestFlight安装到测试设备
- 测试时需要使用境外网络环境,国内网络无法正常加载Google正式广告,会直接返回测试广告或者加载失败
- 如果AdMob账号未完成支付信息验证、或者账号存在违规限制,也会导致无法返回正式广告,可登陆AdMob后台查看账号状态通知
可选优化
你当前使用的google_mobile_ads: ^0.13.4版本较旧,存在较多已知的广告加载适配问题,可升级到适配Flutter 2.5.x的1.x稳定版,减少底层库导致的异常问题。
内容的提问来源于stack exchange,提问作者anonymous-dev
相关产品推荐
相关产品推荐

