Interstitial ads are full-screen ads that appear at transition points in your app, such as between screens or during the pause between levels in a game. Your users can tap the ad to visit the destination, or close the ad and return to the app. For details, see Interstitial ad guidance and a case study.
To eliminate presentation latency and make sure an ad is available when a transition occurs, Google Mobile Ads SDK for React Native uses ad preloading to manage background loading, caching, and buffer replenishment.
This guide shows you how to integrate interstitial ads into a React Native app.
Prerequisites
Before you continue, do the following:
- Set up Google Mobile Ads SDK for React Native.
- Enable test ads and use the following test ad unit:
Android
ca-app-pub-3940256099942544/1033173712
iOS
ca-app-pub-3940256099942544/4411468910
Understand ad preloading
Ad preloading in Google Mobile Ads SDK for React Native automates ad loading and caching.
Ad preloading provides the following benefits:
- Reference management: maintains references until ads are shown.
- Automatic reloading: loads a new ad when one is retrieved from the cache.
- Managed retries: loads a new ad when one fails to load.
- Expiration handling: refreshes ads before expiring.
- Cache optimization: optimizes the cache order to deliver the highest priority ad.
To load ads manually, see the Load a single interstitial ad guide.
Start preloading
To start preloading ads, call the
InterstitialAdPreloader.start
method and pass your preloadId value, configuration settings, and event
callbacks to monitor buffer state changes:
export function startPreloader(
adUnitId: string,
preloadId: string,
customPreloadCallback?: PreloadCallback,
): boolean {
try {
const started = InterstitialAdPreloader.start(
preloadId,
{
request: {adUnitId},
bufferSize: 2,
},
{
// Called when an ad is preloaded into the buffer.
onAdPreloaded: (metadata) => {
console.log(`Interstitial ad preloaded for ${metadata.preloadId}`);
customPreloadCallback?.onAdPreloaded?.(metadata);
},
// Called when an ad fails to preload.
onAdFailedToPreload: (error: LoadAdError) => {
console.error('Failed to preload interstitial ad:', error.message);
customPreloadCallback?.onAdFailedToPreload?.(error);
},
// Called when all preloaded ads in the buffer have been shown.
onAdsExhausted: () => {
console.log('Preload buffer exhausted for interstitial ads.');
customPreloadCallback?.onAdsExhausted?.();
},
},
);
return started;
} catch (error) {
console.error('Error starting interstitial ad preloader:', error);
return false;
}
}
A preload ID is a string that uniquely identifies an ad preloading configuration. If you use the ad unit ID for a single preloading configuration in your app, use that ad unit ID as the preload ID. If your app requires multiple preloaders for the same ad unit ID, pass distinct strings for each preload ID.
When your app polls a preloaded ad from the buffer, Google Mobile Ads SDK for React Native
requests a replacement ad in the background to refill the buffer. If no
preloaded ads remain in the buffer, Google Mobile Ads SDK for React Native invokes the
onAdsExhausted callback.
Preload cache limits
Google Mobile Ads SDK for React Native enforces an app-wide limit on the total number of preloaded ads across all ad units and preload IDs:
- Default limit: Google holds a maximum of six preloaded ads in memory. This limit is shared across all formats and preload IDs.
- Recommended buffer: Two preloaded ads for each preload ID.
If your app reaches the app-wide limit, background requests for preloaded ads pause until existing ads are polled from the cache or destroyed. Preloading also temporarily pauses while a full-screen ad is actively displayed on screen.
Poll and show the ad
Before showing an ad, verify an ad is available by calling the
InterstitialAdPreloader.isAdAvailable
method. To retrieve the ad, call the
InterstitialAdPreloader.pollAd
method.
To listen for presentation events, like ad dismissals or display failures,
set the
adEventCallback property on the ad
instance before calling the show method.
The following example checks for ad availability, and listens for full-screen presentation events before showing the ad:
export function showPreloadedAd(
preloadId: string,
customAdEventCallback?: FullScreenAdEventCallback,
) {
if (InterstitialAdPreloader.isAdAvailable(preloadId)) {
const ad = InterstitialAdPreloader.pollAd(preloadId);
if (ad) {
ad.adEventCallback = {
// Called when the ad is presented on screen.
onAdShowedFullScreenContent: () => {
console.log('Preloaded interstitial ad showed full screen content.');
customAdEventCallback?.onAdShowedFullScreenContent?.();
},
// Called when the ad is closed by the user.
onAdDismissedFullScreenContent: () => {
console.log('Preloaded interstitial ad dismissed.');
customAdEventCallback?.onAdDismissedFullScreenContent?.();
ad.destroy();
},
// Called when presentation fails.
onAdFailedToShowFullScreenContent: (error) => {
console.error('Preloaded interstitial ad failed to show:', error);
customAdEventCallback?.onAdFailedToShowFullScreenContent?.(error);
ad.destroy();
},
// Called when an impression is recorded.
onAdImpression: () => {
console.log('Preloaded interstitial ad recorded an impression.');
customAdEventCallback?.onAdImpression?.();
},
// Called when the user taps the ad.
onAdClicked: () => {
console.log('Preloaded interstitial ad was clicked.');
customAdEventCallback?.onAdClicked?.();
},
// Called when the ad is estimated to have earned money.
onAdPaid: (adValue) => {
console.log(
`Preloaded interstitial ad paid: ${adValue.amountMicros}` +
` ${adValue.currencyCode}`,
);
customAdEventCallback?.onAdPaid?.(adValue);
},
};
ad.show();
}
} else {
console.log('No preloaded interstitial ad available in buffer.');
}
}
To release memory and resources, call the ad.destroy method in the
onAdDismissedFullScreenContent
and
onAdFailedToShowFullScreenContent
callbacks.
Read the response info
To inspect response info for the next preloaded ad without removing the ad from
the cache, call the
InterstitialAdPreloader.peekAdResponseInfo
method:
export function peekPreloadedAdResponseInfo(preloadId: string) {
if (InterstitialAdPreloader.isAdAvailable(preloadId)) {
const responseInfo = InterstitialAdPreloader.peekAdResponseInfo(preloadId);
if (responseInfo) {
console.log('Next preloaded ad response info:', responseInfo);
}
}
}
If an ad is available, the peekAdResponseInfo method returns a
ResponseInfo object containing information about
the loaded ad source and network adapters.
Clean up resources
If you no longer need to show ads for a specific preload ID for the rest
of the session, call the
InterstitialAdPreloader.destroy
method. This process stops preloading for that preload ID and frees unused
preloaded ads from memory.
The following example stops preloading:
export function destroyPreloader(preloadId: string) {
InterstitialAdPreloader.destroy(preloadId);
}
After your user dismisses the ad or the ad fails to show, destroy individual polled ad instances. For details, see Poll and show the ad.
View the full example
The following example component starts preloading on mount, tracks available ad counts, and provides controls to show preloaded interstitial ads:
Replace the following:
- INTERSTITIAL_AD_UNIT_ID with your ad unit ID.
- PRELOAD_ID with your preloader ID.
Next steps
After you integrate interstitial ads, explore the following topics: