AdMob原生广告mediaContent非空但MediaView视频不显示问题
AdMob原生广告媒体区域空白问题修复
我已在应用中成功接入AdMob原生广告,但媒体内容区域的视频无法正常展示,即使mediaContent对象不为空,对应位置仍显示空白区域。我不确定该问题是否仅在应用上架应用商店、使用正式广告ID时才会正常展示,目前我已尝试使用正式广告单元ID测试,问题仍存在。

问题原因&修复方案
这个问题和应用是否上架、是否使用正式广告ID没有关系,是代码实现中遗漏了AdMob必填配置、存在逻辑错误导致的,按以下步骤修改即可:
- 遗漏MediaView与NativeAdView的绑定
这是导致媒体区域空白的核心原因。你目前仅调用了setMediaContent方法给MediaView传入了媒体内容对象,但AdMob SDK要求必须将MediaView实例注册到NativeAdView中,否则不会触发媒体内容渲染。在媒体内容赋值的代码块中补充如下代码,且必须保证这行代码在setNativeAd调用前执行:binding.nativeAdView.mediaView = binding.adMedia - 正文文本赋值逻辑错误
你在给广告正文TextView赋值时,错误传入了标题变量,虽然这个问题不会直接导致媒体区域空白,但会造成广告内容显示异常,将对应代码修改为:if (body.isNullOrEmpty()) { binding.adBody.visibility = INVISIBLE } else { binding.adBody.visibility = View.VISIBLE binding.adBody.text = body } - MediaView固定高度导致素材适配失败
你当前给MediaView写死了175dp的固定高度,当返回的视频/图片素材宽高比和固定高度不匹配时,SDK会放弃渲染媒体内容。将布局中MediaView的高度改为wrap_content即可,SDK会自动根据返回素材的宽高比计算适配的渲染高度:<com.google.android.gms.ads.nativead.MediaView android:id="@+id/ad_media" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" /> - 注意广告素材类型的差异
并非所有原生广告都包含视频素材,可通过mediaContent.hasVideoContent()判断当前返回的广告是否带视频内容,如果返回false,MediaView会自动渲染广告主图,无需额外处理。你当前使用的ca-app-pub-3940256099942544/1044960115是AdMob官方专门返回视频素材的测试广告单元ID,修复完上述问题后即可正常看到视频播放效果。
实现优化建议
- 不要在RecyclerView的ViewHolder绑定方法(即你当前的
bindAdData方法)中每次绑定都新建AdLoader请求广告,会造成重复请求、广告资源浪费、内存泄漏问题。建议提前预加载广告缓存,绑定视图时直接传入已加载完成的NativeAd对象渲染即可。 - 所有广告对应的视图控件(图标、标题、正文、CTA按钮、评分栏、广告主名称、价格、商店信息、MediaView)都必须注册到NativeAdView对应的属性中,否则不仅可能出现渲染异常,还会违反AdMob平台政策,存在账号受限风险。
内容的提问来源于stack exchange,提问作者Dr Mido
相关产品推荐
相关产品推荐

