Admob in compose

Admob in compose

 

libs.versions.toml

[versions] playServicesAds = "23.2.0" [libraries] play-services-ads = { module = "com.google.android.gms:play-services-ads", version.ref = "playServicesAds" }
 

build.gradle(module:App)

admob_nativeads_compose
farimarwatUpdated Nov 1, 2025
// ads implementation (libs.play.services.ads) implementation ("io.github.farimarwat:admobnative-compose:1.2") val multidex_version = "2.0.1" implementation("androidx.multidex:multidex:$multidex_version") implementation ("androidx.lifecycle:lifecycle-process:2.8.3")
 
Android DevelopersAndroid DevelopersEnable multidex for apps with over 64K methods  |  Android Studio  |  Android Developers
class LCApplication : MultiDexApplication() { override fun onCreate() { super.onCreate() // for firebase FirebaseApp.initializeApp(applicationContext) // remote config val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 0 } remoteConfig.setConfigSettingsAsync(configSettings) // ads MobileAds.initialize(this) {} AppOpenAdsManager( this, "ca-app-pub-3940256099942544/9257395921" ) }
 
 

Banner Ads

Google for DevelopersGoogle for DevelopersBanner ads  |  Android  |  Google for Developers
import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.AndroidView import com.google.android.gms.ads.AdRequest import com.google.android.gms.ads.AdSize import com.google.android.gms.ads.AdView @Composable fun AdMobBanner( modifier: Modifier = Modifier, adSize: AdSize, ) { AndroidView(modifier = modifier, factory = { AdView(it).apply { setAdSize(adSize) adUnitId = "ca-app-pub-3940256099942544/9214589741" loadAd(AdRequest.Builder().build()) } }) }

Interstitial Ads

Google for DevelopersGoogle for DevelopersInterstitial ads  |  Android  |  Google for Developers
import android.app.Activity import com.google.android.gms.ads.AdRequest import com.google.android.gms.ads.LoadAdError import com.google.android.gms.ads.interstitial.InterstitialAd import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback fun adMobInterstitial( context: Activity, ) { InterstitialAd.load( context, "ca-app-pub-3940256099942544/1033173712", AdRequest.Builder().build(), object : InterstitialAdLoadCallback() { override fun onAdFailedToLoad(p0: LoadAdError) { super.onAdFailedToLoad(p0) } override fun onAdLoaded(interstitialAd: InterstitialAd) { interstitialAd.show(context) } } ) }
 

Rewarded Ads

Google for DevelopersGoogle for DevelopersRewarded ads  |  Android  |  Google for Developers
import android.app.Activity import android.widget.Toast import com.google.android.gms.ads.AdError import com.google.android.gms.ads.AdRequest import com.google.android.gms.ads.FullScreenContentCallback import com.google.android.gms.ads.LoadAdError import com.google.android.gms.ads.OnUserEarnedRewardListener import com.google.android.gms.ads.rewarded.RewardItem import com.google.android.gms.ads.rewarded.RewardedAd import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback fun adMobRewarded( context: Activity, ) { val adRequest = AdRequest.Builder().build() RewardedAd.load( context, "ca-app-pub-3940256099942544/5224354917", adRequest, object : RewardedAdLoadCallback() { override fun onAdFailedToLoad(adError: LoadAdError) { } override fun onAdLoaded(rewardedAd: RewardedAd) { super.onAdLoaded(rewardedAd) rewardedAd.fullScreenContentCallback = object : FullScreenContentCallback() { override fun onAdDismissedFullScreenContent() { super.onAdDismissedFullScreenContent() adMobRewarded(context) onAdDismissedFullScreenContent() } override fun onAdFailedToShowFullScreenContent(p0: AdError) { super.onAdFailedToShowFullScreenContent(p0) } } rewardedAd.show(context,object : OnUserEarnedRewardListener { override fun onUserEarnedReward(p0: RewardItem) { Toast.makeText(context, "Add finished", Toast.LENGTH_SHORT).show() } }) } }) }
 

AppOpen Ads

Google for DevelopersGoogle for DevelopersApp Open Ads  |  Android  |  Google for Developers
import android.app.Activity import android.app.Application import android.content.Context import android.os.Bundle import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.ProcessLifecycleOwner import com.google.android.gms.ads.AdError import com.google.android.gms.ads.AdRequest import com.google.android.gms.ads.FullScreenContentCallback import com.google.android.gms.ads.LoadAdError import com.google.android.gms.ads.appopen.AppOpenAd import com.google.android.gms.ads.appopen.AppOpenAd.AppOpenAdLoadCallback import java.util.Date interface OnShowAdCompleteListener { fun onShowAdComplete() } class AppOpenAdsManager() : Application.ActivityLifecycleCallbacks { private var currentActivity: Activity? = null private lateinit var adUnit: String private val lifecycleEventObserver = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { currentActivity?.let { showAdIfAvailable(it) } } } constructor(application: Application, adUnitId: String) : this() { this.adUnit = adUnitId application.registerActivityLifecycleCallbacks(this) ProcessLifecycleOwner.get().lifecycle.addObserver(lifecycleEventObserver) } override fun onActivityCreated(p0: Activity, p1: Bundle?) { //"Not yet implemented") } override fun onActivityStarted(p0: Activity) { //"Not yet implemented") } override fun onActivityResumed(p0: Activity) { currentActivity = p0 } override fun onActivityPaused(p0: Activity) { currentActivity = null } override fun onActivityStopped(p0: Activity) { //"Not yet implemented") } override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) { //"Not yet implemented") } override fun onActivityDestroyed(p0: Activity) { //"Not yet implemented") } private var appOpenAds: AppOpenAd? = null private var isLoadingAd = false private var isShowingAd = false private var loadTime: Long = 0 private fun loadAd(context: Context) { if (isLoadingAd or isAdAvailable()) { return } isLoadingAd = true val request = AdRequest.Builder().build() AppOpenAd.load( context, adUnit, request, object : AppOpenAdLoadCallback() { override fun onAdFailedToLoad(p0: LoadAdError) { super.onAdFailedToLoad(p0) isLoadingAd = false } override fun onAdLoaded(p0: AppOpenAd) { super.onAdLoaded(p0) appOpenAds = p0 isLoadingAd = false loadTime = Date().time } } ) } private fun isAdAvailable(): Boolean = appOpenAds != null private fun showAdIfAvailable(activity: Activity) { showAdIfAvailable(activity, object : OnShowAdCompleteListener { override fun onShowAdComplete() { } }) } private fun showAdIfAvailable( activity: Activity, onShowAdCompleteListener: OnShowAdCompleteListener, ) { if (isShowingAd) { return } if (!isAdAvailable()) { onShowAdCompleteListener.onShowAdComplete() loadAd(activity) return } appOpenAds!!.fullScreenContentCallback = object : FullScreenContentCallback() { override fun onAdShowedFullScreenContent() { super.onAdShowedFullScreenContent() } override fun onAdFailedToShowFullScreenContent(p0: AdError) { appOpenAds = null isShowingAd = false onShowAdCompleteListener.onShowAdComplete() loadAd(activity) } override fun onAdDismissedFullScreenContent() { appOpenAds = null isShowingAd = false onShowAdCompleteListener.onShowAdComplete() loadAd(activity) } } isShowingAd = true appOpenAds!!.show(activity) } }
 
 

Native ads

@Composable fun DemoScreen(){ val context = LocalContext.current val adstate = rememberNativeAdState( context = context, adUnitId = "ca-app-pub-3940256099942544/2247696110", refreshInterval = 60000 ) Text(text = "Small Native") //Small Banner BannerAdAdmobSmall(loadedAd = adstate) Spacer(modifier = Modifier.height(10.dp)) Text(text = "Medium Native") //Medium Banner BannerAdAdmobMedium(loadedAd = adstate) }
 
 

Example - All Ads Demo

import android.app.Activity import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import com.farimarwat.composenativeadmob.nativead.BannerAdAdmobMedium import com.farimarwat.composenativeadmob.nativead.BannerAdAdmobSmall import com.farimarwat.composenativeadmob.nativead.rememberNativeAdState import com.google.android.gms.ads.AdSize @Composable fun StatusScreen() { Column( modifier = Modifier .fillMaxSize() .verticalScroll(rememberScrollState()), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { val context = LocalContext.current val adstate = rememberNativeAdState( context = context, adUnitId = "ca-app-pub-3940256099942544/2247696110", refreshInterval = 60000 ) Spacer(modifier = Modifier.height(100.dp)) Text(text = "BANNER") AdMobBanner(modifier = Modifier.fillMaxWidth(), adSize = AdSize.BANNER) Spacer(modifier = Modifier.height(10.dp)) Text(text = "FULL_BANNER") AdMobBanner(modifier = Modifier.fillMaxWidth(), adSize = AdSize.FULL_BANNER) Spacer(modifier = Modifier.height(10.dp)) Text(text = "LARGE_BANNER") AdMobBanner(modifier = Modifier.fillMaxWidth(), adSize = AdSize.LARGE_BANNER) Spacer(modifier = Modifier.height(10.dp)) Text(text = "SMART_BANNER") AdMobBanner(modifier = Modifier.fillMaxWidth(), adSize = AdSize.SMART_BANNER) Spacer(modifier = Modifier.height(10.dp)) Text(text = "FLUID") AdMobBanner(modifier = Modifier.fillMaxWidth(), adSize = AdSize.FLUID) Spacer(modifier = Modifier.height(10.dp)) Text(text = "INVALID") AdMobBanner(modifier = Modifier.fillMaxWidth(), adSize = AdSize.INVALID) Spacer(modifier = Modifier.height(10.dp)) Text(text = "Interstitial") Button(onClick = { adMobInterstitial(context = context as Activity) }) { Text(text = "Show Interstitial Ad") } Spacer(modifier = Modifier.height(10.dp)) Text(text = "Rewarded") Button(onClick = { adMobRewarded(context = context as Activity) }) { Text(text = "Show Rewarded Ad") } Spacer(modifier = Modifier.height(10.dp)) Text(text = "Small Native") //Small Banner BannerAdAdmobSmall(loadedAd = adstate) Spacer(modifier = Modifier.height(10.dp)) Text(text = "Medium Native") //Medium Banner BannerAdAdmobMedium(loadedAd = adstate) Spacer(modifier = Modifier.height(200.dp)) } }