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

求基于最新API的Kotlin Compose实现AdMob NativeAds最简代码

适配Jetpack Compose的Google AdMob NativeAds最简实现

1. 添加依赖

在app级build.gradle.kts中引入最新AdMob及Compose相关依赖:

dependencies {
    implementation("com.google.android.gms:play-services-ads:22.6.0") // 请使用官方最新版本
    implementation("androidx.compose.ui:ui:1.5.4") // 匹配你的Compose版本
}

2. 配置Manifest

在AndroidManifest.xml的<application>标签内添加AdMob应用ID:

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="你的AdMob应用ID"/>

3. 初始化AdMob

在自定义Application类或启动Activity中完成初始化:

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        MobileAds.initialize(this) {}
    }
}

4. 广告加载ViewModel

用ViewModel管理广告生命周期,避免内存泄漏:

import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.google.android.gms.ads.AdLoader
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.nativead.NativeAd
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch

class NativeAdViewModel : ViewModel() {
    private val _nativeAd = MutableStateFlow<NativeAd?>(null)
    val nativeAd: StateFlow<NativeAd?> = _nativeAd

    fun loadNativeAd(context: Context, adUnitId: String) {
        val adLoader = AdLoader.Builder(context, adUnitId)
            .forNativeAd { ad -> _nativeAd.value = ad }
            .build()

        viewModelScope.launch {
            adLoader.loadAd(AdRequest.Builder().build())
        }
    }

    override fun onCleared() {
        super.onCleared()
        _nativeAd.value?.destroy()
    }
}

5. Compose广告展示组件

用Compose原生组件构建广告UI,直接绑定广告数据:

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Button
import androidx.compose.material3.Card
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.android.gms.ads.nativead.NativeAd

@Composable
fun NativeAdView(adUnitId: String) {
    val viewModel: NativeAdViewModel = viewModel()
    val nativeAd = viewModel.nativeAd.collectAsState().value
    val context = LocalContext.current

    if (nativeAd == null) {
        viewModel.loadNativeAd(context, adUnitId)
        Text(text = "加载广告中...", modifier = Modifier.padding(16.dp))
        return
    }

    Card(
        modifier = Modifier
            .fillMaxWidth()
            .padding(8.dp)
    ) {
        Column(modifier = Modifier.padding(16.dp)) {
            nativeAd.headline?.let {
                Text(text = it, modifier = Modifier.padding(bottom = 8.dp))
            }
            nativeAd.body?.let {
                Text(text = it, modifier = Modifier.padding(bottom = 8.dp))
            }
            nativeAd.callToAction?.let {
                Button(
                    onClick = { nativeAd.performClick() },
                    modifier = Modifier.fillMaxWidth()
                ) {
                    Text(text = it)
                }
            }
            nativeAd.icon?.drawable?.let { icon ->
                Image(
                    painter = painterResource(id = icon),
                    contentDescription = "广告图标",
                    modifier = Modifier.size(48.dp)
                )
            }
        }
    }
}

6. 使用示例

在你的Compose页面中直接调用组件:

@Composable
fun HomeScreen() {
    Column {
        // 页面其他内容
        NativeAdView(adUnitId = "你的原生广告单元ID")
    }
}

内容的提问来源于stack exchange,提问作者Robert Jamison

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:00:12