The Google Mobile Ads package supports the following ad formats. Pick the format that best fits the placement in your app:
- App open — full screen, shown as your app is brought to the foreground.
- Banner — component based, occupies a fixed area of your UI (anchored, adaptive, collapsible).
- Interstitial — full screen, shown at natural transition points.
- Rewarded — full screen, rewards the user for completing an action.
- Rewarded interstitial — full screen reward format that does not require opt-in.
- Native — component based, rendered with your own layout.
Two additional guides cover cross-cutting integration patterns:
- React hooks — every hook in the library (fullscreen, app open manager, Ad Manager interstitial, native, multi-format, and pools) and the shared fullscreen lifecycle.
- Google Ad Manager — Ad Manager (GAM) specific components and options.
Complete your consent flow before calling mobileAds().initialize() or loading an ad. Keep this
page focused on format behavior; follow Consent & privacy basics for the
integration sequence and regional requirements.
Always use test ads while developing. Using production ad units on a device that is not registered as a test device can get your AdMob account suspended.
- Load fullscreen ads before the natural transition where you plan to show them, then show only
after the loaded event or
status === 'loaded'. - Keep one load in flight per ad instance. The v17 hook API coalesces concurrent
load()calls; with class APIs, guard your own loading state. - Let the Google Mobile Ads SDK refresh a mounted banner according to the refresh interval configured for its ad unit. Do not add a second JavaScript refresh timer. Reload manually only for a lifecycle reason, such as the documented iOS foreground case.
- Do not retain loaded inventory indefinitely. Google documents a four-hour window for app open ads
and a one-hour expiry on Android for
interstitial and
rewarded interstitial ads.
Other formats and platforms do not share one universal SDK expiry. For held pooled inventory, this library applies
a conservative one-hour publisher reload-policy default to non-app-open formats; it is not a
claim about every native SDK cache. Reload stale inventory before showing it. Pool handles
expose
isStaleByPolicy()when you use pools. - Capture impression revenue through
onPaid,AdEventType.PAID,NativeAdEventType.PAID, or a hook'srevenue, depending on the API. See Impression-level ad revenue and Revenue telemetry and auction diagnostics.
To keep a buffer of ready-to-show ads and poll at show time, see
Preload pools and multi-format recipes.
For destroy(), structured errors, and other v17 deltas, see Migrating to v17.