AdMob & Monetization

Earn revenue from your Android app with Google AdMob ad formats and smart monetization strategies

Setup Banner Interstitial Rewarded

Table of Contents

Monetization Overview

Google AdMob is the leading mobile ad platform for Android. It serves banner, interstitial, rewarded, and native ads — paying you when users view or click ads in your app.

Your Android App ↓ Google Mobile Ads SDK ↓ AdMob Ad Server → Advertisers ↓ Revenue (CPM / CPC) → Your AdMob Account
Ad FormatAppearanceBest For
BannerSmall strip at top/bottomContinuous passive income
InterstitialFull-screen between screensLevel transitions, natural breaks
RewardedFull-screen, user opts inExtra lives, coins, premium content
NativeMatches app UI designFeed lists, content screens

1AdMob Setup

Setting up AdMob involves creating an account, registering your app, adding the Mobile Ads SDK, and initializing it with your App ID before loading any ads.

Step-by-step setup

  1. Create account at admob.google.com
  2. Add your app → get App ID (format: ca-app-pub-XXXX~YYYY)
  3. Create ad units for each format → get Ad Unit IDs
  4. Add SDK dependency and initialize in Application class
  5. Use test ad unit IDs during development

Gradle dependency

Kotlin — app/build.gradle.ktsdependencies { implementation("com.google.android.gms:play-services-ads:23.0.0") }

AndroidManifest.xml

XML — AndroidManifest.xml<manifest> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application ... > <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-XXXXXXXXXXXXXXXX~YYYYYYYYYY" /> </application> </manifest>

Initialize Mobile Ads SDK

Kotlin — MyApplication.ktclass MyApplication : Application() { override fun onCreate() { super.onCreate() MobileAds.initialize(this) { initializationStatus -> Log.d("AdMob", "SDK initialized: ${initializationStatus.adapterStatusMap}") } } }

Test ad unit IDs (development only)

Kotlin — Google test ad unitsobject TestAdUnits { const val BANNER = "ca-app-pub-3940256099942544/6300978111" const val INTERSTITIAL = "ca-app-pub-3940256099942544/1033173712" const val REWARDED = "ca-app-pub-3940256099942544/5224354917" const val NATIVE = "ca-app-pub-3940256099942544/2247696110" }

3Interstitial Ads

Interstitial ads are full-screen ads shown at natural transition points — between levels, after completing a task, or when navigating between major screens. Preload them before showing.

Load and show interstitial

Kotlin — InterstitialAdHelper.ktclass InterstitialAdHelper(private val activity: Activity) { private var interstitialAd: InterstitialAd? = null fun loadAd(adUnitId: String) { InterstitialAd.load( activity, adUnitId, AdRequest.Builder().build(), object : InterstitialAdLoadCallback() { override fun onAdLoaded(ad: InterstitialAd) { interstitialAd = ad Log.d("AdMob", "Interstitial loaded") setupCallbacks(ad) } override fun onAdFailedToLoad(error: LoadAdError) { interstitialAd = null Log.e("AdMob", "Interstitial failed: ${error.message}") } } ) } private fun setupCallbacks(ad: InterstitialAd) { ad.fullScreenContentCallback = object : FullScreenContentCallback() { override fun onAdDismissedFullScreenContent() { interstitialAd = null loadAd(TestAdUnits.INTERSTITIAL) // preload next } override fun onAdFailedToShowFullScreenContent(error: AdError) { interstitialAd = null } } } fun showAd() { interstitialAd?.show(activity) ?: run { Log.d("AdMob", "Interstitial not ready yet") loadAd(TestAdUnits.INTERSTITIAL) } } }

Show at natural break points

Kotlin — Show after level completeclass GameActivity : AppCompatActivity() { private lateinit var interstitialHelper: InterstitialAdHelper override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) interstitialHelper = InterstitialAdHelper(this) interstitialHelper.loadAd(TestAdUnits.INTERSTITIAL) } private fun onLevelComplete() { showLevelCompleteDialog() interstitialHelper.showAd() // natural break point } }

Frequency capping

Kotlin — Limit ad frequencyclass AdFrequencyManager(context: Context) { private val prefs = context.getSharedPreferences("ad_prefs", Context.MODE_PRIVATE) fun canShowInterstitial(minIntervalMs: Long = 60_000): Boolean { val lastShown = prefs.getLong("last_interstitial", 0) return System.currentTimeMillis() - lastShown >= minIntervalMs } fun recordInterstitialShown() { prefs.edit().putLong("last_interstitial", System.currentTimeMillis()).apply() } }

4Rewarded Ads

Rewarded ads let users opt in to watch a video ad in exchange for in-app rewards — extra lives, coins, or premium features. They have the highest engagement and eCPM of standard ad formats.

Load and show rewarded ad

Kotlin — RewardedAdHelper.ktclass RewardedAdHelper(private val activity: Activity) { private var rewardedAd: RewardedAd? = null fun loadAd(adUnitId: String) { RewardedAd.load( activity, adUnitId, AdRequest.Builder().build(), object : RewardedAdLoadCallback() { override fun onAdLoaded(ad: RewardedAd) { rewardedAd = ad Log.d("AdMob", "Rewarded ad loaded") } override fun onAdFailedToLoad(error: LoadAdError) { rewardedAd = null Log.e("AdMob", "Rewarded ad failed: ${error.message}") } } ) } fun showAd(onRewardEarned: (Int) -> Unit) { val ad = rewardedAd if (ad == null) { Toast.makeText(activity, "Ad not ready. Try again.", Toast.LENGTH_SHORT).show() loadAd(TestAdUnits.REWARDED) return } ad.fullScreenContentCallback = object : FullScreenContentCallback() { override fun onAdDismissedFullScreenContent() { rewardedAd = null loadAd(TestAdUnits.REWARDED) } } ad.show(activity) { rewardItem -> Log.d("AdMob", "User earned: ${rewardItem.amount} ${rewardItem.type}") onRewardEarned(rewardItem.amount.toInt()) } } }

Reward button in UI

Kotlin — Watch ad for coinsclass ShopActivity : AppCompatActivity() { private lateinit var rewardedHelper: RewardedAdHelper private var coinBalance = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) rewardedHelper = RewardedAdHelper(this) rewardedHelper.loadAd(TestAdUnits.REWARDED) binding.btnWatchAd.setOnClickListener { rewardedHelper.showAd { rewardAmount -> coinBalance += rewardAmount binding.tvCoins.text = "Coins: $coinBalance" Toast.makeText(this, "You earned $rewardAmount coins!", Toast.LENGTH_SHORT).show() } } } }

Rewarded vs interstitial

AspectInterstitialRewarded
User choiceShown automaticallyUser taps to watch
EngagementLowerHigher
eCPM (revenue)MediumHighest
Best useScreen transitionsIn-app currency, lives, unlocks
User sentimentCan feel intrusiveFeels fair — user opts in

5App Monetization Strategies

Beyond ads, successful Android apps combine multiple revenue streams. Choose a strategy that matches your app category, user base, and retention goals.

Monetization models

ModelHow It WorksBest For
Free + AdsAdMob banner/interstitial/rewardedCasual games, utility apps
FreemiumFree app, paid premium featuresProductivity, fitness apps
In-App PurchasesBuy coins, remove ads, unlock contentGames, media apps
SubscriptionMonthly/yearly recurring paymentStreaming, SaaS, news
Paid AppOne-time purchase on Play StorePro tools, niche apps
HybridAds + IAP + subscription tiersMost top-grossing apps

Hybrid strategy example

Free Tier Premium Tier ($4.99/mo) ───────── ────────────────────── Banner ads at bottom No ads Interstitial every 3 levels Unlimited levels Watch rewarded ad for coins 1000 coins/month included Basic features All features unlocked

Remove ads with in-app purchase

Kotlin — Hide ads for premium usersclass AdManager(private val context: Context) { private val prefs = context.getSharedPreferences("billing", Context.MODE_PRIVATE) fun isPremiumUser(): Boolean = prefs.getBoolean("is_premium", false) fun shouldShowAds(): Boolean = !isPremiumUser() fun setupBanner(adView: AdView) { if (shouldShowAds()) { adView.visibility = View.VISIBLE adView.loadAd(AdRequest.Builder().build()) } else { adView.visibility = View.GONE } } }

AdMob policy essentials

  • Never click your own ads or encourage users to click
  • Use test ad units during development — real clicks on test builds violate policy
  • Don't place ads too close to buttons (accidental clicks)
  • Disclose data collection in your privacy policy
  • Follow Google Play Families Policy if targeting children

Optimize revenue

TipImpact
Use rewarded ads for optional boostsHigher eCPM, better UX
Enable AdMob mediationMore advertisers compete → higher bids
Cap interstitial frequencyLower uninstall rate, better retention
A/B test ad placementFind balance of revenue vs retention
Target tier-1 countriesHigher CPM in US, UK, CA, AU

6Hands-On Exercises

1

Complete AdMob setup — create account, add app, integrate SDK, initialize with test App ID.

2

Add an adaptive banner ad at the bottom of MainActivity. Handle pause/resume/destroy lifecycle.

3

Implement interstitial ads shown after completing a task. Preload the next ad after dismiss.

4

Add a "Watch Ad for Coins" button with rewarded ads. Grant in-app reward on completion.

5

Implement frequency capping — show interstitials no more than once per minute.

6

Build a premium toggle that hides all ads when the user "purchases" remove-ads (simulate with SharedPreferences).

7

Bonus: Write a monetization plan for a game app — choose ad formats, IAP items, and subscription tier.

AdMob & Monetization MCQ Practice

10 Basic MCQs 10 Advanced MCQs

10 Basic AdMob & Monetization MCQs

1

AdMob is?

ADatabase
BGoogle mobile advertising platform
CLayout editor
DKotlin compiler
Explanation: Monetize apps with banner, interstitial, rewarded ads.
2

App ID format?

AAPI-34
Bcom.example.app
Cca-app-pub-XXXX~YYYY
DSHA-256 only
Explanation: Declared in manifest meta-data APPLICATION_ID.
3

Banner ads are?

AIn-app purchase
BFull screen only
CVideo only
DRectangular ads at top or bottom
Explanation: Persistent small format while using app.
4

Interstitial ads show?

AFull-screen at natural breaks
BAlways on launch
CIn notification
DSQL query
Explanation: Between levels or screen transitions — preload first.
5

Rewarded ads give?

AFree premium forever
BUser reward after watching video ad
CRoot access
DNo SDK
Explanation: User opts in for coins, extra life, etc.
6

Test ad units during dev?

ANo ads in debug
BProduction IDs only
CGoogle sample ad unit IDs
DRandom IDs
Explanation: Avoid invalid traffic on your real ad units.
7

MobileAds.initialize?

ABanned API 34
BOptional
CReplaces manifest
DRequired before loading ads
Explanation: Call in Application onCreate.
8

AdView lifecycle?

Apause/resume/destroy with Activity
BIgnore lifecycle
COnce forever
DService only
Explanation: Prevent leaks and wasted impressions.
9

INTERNET permission for ads?

ANot needed
BRequired for ad network requests
CDangerous runtime
DCamera
Explanation: Normal permission in manifest.
10

eCPM means?

AAd size
BError code
CEffective cost per thousand impressions
DGradle metric
Explanation: Revenue metric — varies by region and format.

10 Advanced AdMob & Monetization MCQs

11

Adaptive banner?

AFixed 320x50 only
BWidth-matched banner for better fill rate
CInterstitial type
DRewarded
Explanation: AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize.
12

UMP SDK purpose?

ARoom migration
BImage loading
CGDPR/consent messaging for ads
DCamera
Explanation: User Messaging Platform for consent in EEA/UK.
13

Ad failed to load LoadAdError?

AGradle sync
BIgnore always
CSuccess
DCheck network, ad unit ID, initialization, policy
Explanation: Log error code and message; retry with backoff.
14

Mediation in AdMob?

AMultiple ad networks compete in waterfall
BOne network only
CFree IAP
DFirebase Auth
Explanation: Increase fill rate and eCPM via mediation adapters.
15

App open ads?

ABanner only
BShown when user opens/resumes app
CSQL open
DDeprecated all
Explanation: Format for cold/warm start — use carefully for UX.
16

Invalid traffic risk?

ANo policy
BEncouraged in dev
CClicking your own ads gets account banned
DAutomatic money
Explanation: Never click production ads; use test devices.
17

Rewarded callback onUserEarnedReward?

ADelete data
BShow another ad
CCharge user
DGrant in-app reward here
Explanation: Verify reward amount/type; sync with game economy.
18

Native ads?

ACustom layout matching app UI with ad assets
BBanner only
CNo layout
DManifest
Explanation: NativeAdView binds headline, image, CTA.
19

Child-directed app ads?

ASame as gambling apps
BTag for Families policy — restricted ad behavior
CMore intrusive ads
DNo AdMob
Explanation: Design for Families compliance required.
20

Hybrid monetization?

AIAP banned
BAds only legal
CAds + IAP + subscriptions combined
DSubscriptions only Google
Explanation: Freemium: ads for free tier, remove ads via purchase.
Click an option to select, then check answers.

AdMob & Monetization Interview Q&A

15 topic-focused questions for interviews and revision.

1AdMob setup overview.easy
Answer: Create AdMob account, register app, add SDK, manifest App ID, initialize, create ad units, use test IDs in dev.
2Show banner ad steps.easy
Answer: AdView in layout, load AdRequest.Builder().build(), lifecycle pause/resume/destroy.
3Interstitial best practices.medium
Answer: Preload before show; natural breaks only; don't show on every click; reload after dismiss.
4Rewarded ad flow.medium
Answer: Load RewardedAd, show with callback, onUserEarnedReward grant benefit, onAdDismissed preload next.
5Why test ad units.easy
Answer: Prevent self-impression invalid activity on production ad units during development.
6GDPR consent with UMP.hard
Answer: Request consent info update; show form if required; pass consent to ad requests.
7Improve ad revenue ethically.medium
Answer: Good UX placement, mediation, rewarded opt-in, target correct audience, A/B test formats.
8AdMob vs Play Billing.medium
Answer: AdMob ads for free users; Billing for IAP/subscriptions — often combined.
9Handle no fill.medium
Answer: Hide ad container gracefully; retry load; consider mediation.
10Families policy apps.hard
Answer: Use Families ad SDK config; no personalized ads if required; content rating alignment.
11Track ad performance.easy
Answer: AdMob dashboard: impressions, eCPM, match rate; Firebase Analytics integration.
12Don't block UI with ads.easy
Answer: Async load; don't wait on main thread; show content first.
13App open ad caution.medium
Answer: Can annoy users if overused — cap frequency; skip if recent interstitial shown.
14Remove ads IAP pattern.medium
Answer: SharedPreferences flag adFree; hide AdView when purchased.
15Policy violations to avoid.hard
Answer: Encouraging clicks, deceptive placement, ads on lock screen without consent.