使用AdMob专用测试广告单元ID加载原生广告时提示Invalid template ID: -1
修复AdMob原生测试广告加载失败问题
问题根源
你使用的测试广告单元ID ca-app-pub-3940256099942544/2247696110 属于原生模板广告,但当前代码是针对基础原生广告的实现,两者不兼容,同时代码缺少关键的广告加载触发逻辑,导致出现Invalid template ID: -1错误和点击动作配置异常日志。
修复步骤
1. 补全广告加载触发逻辑
你的代码仅构建了AdLoader对象,但未启动广告加载请求。在build()方法后添加加载调用:
adLoader.loadAd(AdRequest.Builder().build())
2. 匹配测试ID与代码实现
你有两种修复路径可选:
选项A:切换到基础原生测试ID
将AdLoader的广告单元ID替换为适配基础原生广告的官方测试ID,无需修改现有回调逻辑:
AdLoader.Builder(this, "ca-app-pub-3940256099942544/3986624511") // 基础原生测试ID .forNativeAd { nativeAd: NativeAd -> if (isDestroyed) { nativeAd.destroy() return@forNativeAd } Log.i("NativeAd received", nativeAd.toString()) } .withAdListener(object : AdListener() { override fun onAdFailedToLoad(adError: LoadAdError) { Log.e("AdLoadError", adError.message) } }) .withNativeAdOptions(NativeAdOptions.Builder().build()) .build() .loadAd(AdRequest.Builder().build())
选项B:适配原生模板广告逻辑
如果要继续使用原模板测试ID,需修改代码以支持模板广告的视图绑定逻辑:
AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110") .forNativeAdView({ nativeAd: NativeAd, adView: NativeAdView -> if (isDestroyed) { nativeAd.destroy() return@forNativeAdView } // 绑定广告内容到模板视图(需根据你的布局ID调整) adView.headlineView = findViewById(R.id.ad_headline) adView.bodyView = findViewById(R.id.ad_body) (adView.headlineView as TextView).text = nativeAd.headline (adView.bodyView as TextView).text = nativeAd.body // 完成绑定 adView.setNativeAd(nativeAd) }, NativeAdOptions.Builder().build()) .withAdListener(object : AdListener() { override fun onAdFailedToLoad(adError: LoadAdError) { Log.e("AdLoadError", adError.message) } }) .build() .loadAd(AdRequest.Builder().build())
3. 验证基础配置
- 确保
play-services-ads版本23.0.0无需调整,该版本兼容上述两种实现 - 测试环境下无需手动设置测试设备,模拟器会自动被AdMob识别为测试环境
内容的提问来源于stack exchange,提问作者LordTAO
相关产品推荐
相关产品推荐

