Android项目迁移Jetpack Compose后AdMob广告加载失败求助
旧Jetpack Compose项目AdMob测试ID加载失败(错误码3)排查方案
错误码对应含义
- 错误码3(
ERROR_CODE_NO_FILL):AdMob服务器接收请求成功,但无可用广告。不过官方测试ID理应始终有填充,因此问题出在旧项目的配置或测试环境。 - 之前的错误码1(
ERROR_CODE_INVALID_REQUEST)已解决,说明自有广告单元ID的配置已修正,但测试ID的逻辑仍存在问题。
逐一排查以下要点
1. 确认测试广告单元ID的正确性
必须使用AdMob官方提供的横幅测试ID:ca-app-pub-3940256099942544/6300978111,不要混淆应用ID(Manifest中带~xxx后缀的ID)和广告单元ID,也不要使用自行创建的测试单元ID。
2. 核对Manifest中的应用ID
确保AndroidManifest.xml内的com.google.android.gms.ads.APPLICATION_ID与AdMob后台注册的应用ID完全一致,包括后缀的~xxx部分,新旧项目需保持统一:
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-9528408865218303~2434754358"/>
3. 验证测试设备的状态
- 运行旧项目时,查看Logcat会输出类似
Use AdRequest.Builder.addTestDevice("XXXX-XXXX-XXXX-XXXX")的日志,将该设备ID添加到广告请求中:val adRequest = AdRequest.Builder() .addTestDevice("你的设备ID") .build() - 模拟器默认属于测试设备,但自定义模拟器可能需要手动添加设备ID;实体机必须将ID添加到AdMob后台的测试设备列表,或通过代码
addTestDevice标记。
4. 对齐新旧项目的依赖版本
检查旧项目Module级build.gradle中的AdMob依赖版本,必须与新项目完全一致,例如:
implementation "com.google.android.gms:play-services-ads:22.6.0"
版本不一致会引发Jetpack Compose环境下的兼容性冲突。
5. 补全广告加载的代码逻辑
你提供的代码仅初始化了AdView,缺少广告加载操作,建议补充加载逻辑并添加错误监听以排查细节:
AndroidView( factory = { context -> AdView(context).apply { setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, deviceCurrentWidth)) adUnitId = unitId // 执行广告加载 loadAd(AdRequest.Builder().build()) // 添加错误监听,获取更详细的失败信息 adListener = object : AdListener() { override fun onAdFailedToLoad(error: LoadAdError) { Log.e("AdMobDebug", "失败详情: ${error.responseInfo}") } } } } )
同时确认deviceCurrentWidth的计算是否正确,错误的宽度会导致广告尺寸不匹配,进而触发无填充错误。
6. 检查旧项目的发布与隐私设置
- 如果旧项目已上架应用商店,AdMob可能限制调试版本的测试广告加载,确保运行的是未签名的调试安装包。
- 检查设备是否开启「限制广告跟踪」,该选项会阻止测试广告加载,需临时关闭。
最后尝试清理缓存
若以上步骤均无效,可清理旧项目的构建缓存(Android Studio菜单栏File -> Invalidate Caches / Restart),或创建新的Compose模块逐步迁移旧项目代码,排查是否存在遗留配置或第三方库冲突。
内容的提问来源于stack exchange,提问作者bababenben
相关产品推荐
相关产品推荐

