How to Add AdMob to an Expo App in 2026 (the Right Way)
expo-ads-admob is gone — react-native-google-mobile-ads with a config plugin is the standard. Complete setup for app IDs, ad units, and Play Console ad declaration.
Adding AdMob to an Expo app used to mean expo-ads-admob. That package was removed from the Expo SDK starting with SDK 46, and the standard replacement is react-native-google-mobile-ads (by Invertase) with its Expo config plugin. Here is the full, working setup for 2026 — including the two mistakes that cause most AdMob crashes.
Step 1: Install the package
npx expo install react-native-google-mobile-adsThe package ships its own Expo config plugin, which configures the native iOS and Android projects for you — no manual build.gradle or Podfile edits needed with EAS Build / prebuild.
Step 2: Register the App ID in app config
Create an app entry in the AdMob console for each platform, then wire the App IDs into app.json / app.config.ts:
{
"react-native-google-mobile-ads": {
"android_app_id": "ca-app-pub-XXXXXXXXXXXXXXXX~YYYYYYYYYY",
"ios_app_id": "ca-app-pub-XXXXXXXXXXXXXXXX~YYYYYYYYYY"
}
}The plugin reads this key and injects the IDs into AndroidManifest.xml and Info.plist at prebuild time.
The #1 mistake: App IDs use a tilde (
ca-app-pub-3940256099942544~3347511713), Ad Unit IDs use a slash (ca-app-pub-3940256099942544/6300978111). Putting an Ad Unit ID in the app config crashes the app at startup with a cryptic GADInvalidInitializationException.
Step 3: Show test ads first
Never develop against real ad units — clicking your own live ads is an easy way to get your AdMob account suspended. Google provides demo ad units for every format:
import { BannerAd, BannerAdSize, TestIds } from "react-native-google-mobile-ads";
<BannerAd
unitId={__DEV__ ? TestIds.BANNER : "ca-app-pub-XXXX/YYYY"}
size={BannerAdSize.ANCHORED_ADAPTIVE_BANNER}
/>Only swap in production ad unit IDs for release builds.
Step 4: Handle consent (EEA/GDPR)
If you serve ads to users in the EEA or UK, you must use Google's User Messaging Platform (UMP) for consent — the SDK exposes it through AdsConsent:
import { AdsConsent } from "react-native-google-mobile-ads";
const info = await AdsConsent.requestInfoUpdate();
if (info.isConsentFormAvailable) {
const { status } = await AdsConsent.loadAndShowConsentFormIfRequired();
}Initialize the Mobile Ads SDK only after consent is resolved, and check canRequestAds before serving ads to European users.
Step 5: Declare ads in Google Play Console
Before releasing on Android, set Policy and programmes → App content → Ads → "Yes, my app contains ads" in Play Console. Skipping this declaration is a policy violation, not an optional nicety.
The lazy way: AdMob pre-wired
BowlerKit's Expo template ships with react-native-google-mobile-ads already integrated — banner placements, consent flow, and a reviewed configuration surface gated behind EXPO_PUBLIC_ADMOB_ENABLED, with safe fallback to Google's demo IDs until you add your own. See the quick start and pair it with the Play Store assets guide to finish your release checklist.