You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:57:01