如何在Jetpack Compose中展示AdMob横幅广告?
Jetpack Compose 实现AdMob横幅广告的方案说明
首先明确结论:目前谷歌官方尚未提供纯Compose实现的AdMob广告组件,所有可用的横幅广告实现方案都需要基于AndroidView互操作API对接传统Android View体系下的AdView组件。但你可以将整个加载逻辑封装为独立的Composable函数,调用体验和原生Compose组件完全一致。
具体实现流程如下:
- 第一步:确保你已经在项目中引入了AdMob官方依赖,并且完成了AndroidManifest中AdMob应用ID的基础配置
- 第二步:封装可复用的横幅广告Composable组件,示例代码如下:
@Composable fun AdmobBannerAd( adUnitId: String, modifier: Modifier = Modifier, adSize: AdSize = AdSize.BANNER ) { // 缓存AdView实例避免页面重组时重复创建广告 val currentAdView = remember { mutableStateOf<AdView?>(null) } AndroidView( modifier = modifier.fillMaxWidth(), factory = { context -> AdView(context).apply { setAdSize(adSize) this.adUnitId = adUnitId currentAdView.value = this // 加载广告请求 loadAd(AdRequest.Builder().build()) } } ) // 页面销毁时同步销毁广告实例,避免内存泄漏 DisposableEffect(Unit) { onDispose { currentAdView.value?.destroy() } } }
- 第三步:在需要展示广告的页面直接调用封装好的组件即可,示例如下:
Column( modifier = Modifier.fillMaxSize() ) { // 其他业务UI内容 Text(text = "页面主内容") // 底部展示横幅广告 AdmobBannerAd( adUnitId = "你的广告单元ID", modifier = Modifier.align(Alignment.CenterHorizontally) ) }
注意:如果需要使用自适应尺寸的横幅广告,可以根据屏幕宽度动态计算AdSize参数传入即可,不需要额外修改封装逻辑。广告的加载回调、点击事件监听等都可以在
AndroidView的factory块中直接对接原生AdView的API,和传统XML开发的使用逻辑完全一致。
内容的提问来源于stack exchange,提问作者Jeeva
相关产品推荐
相关产品推荐

