Interstitial ads are full-screen ads that cover the interface of their host app. They're typically displayed at natural transition points in the flow of an app, such as between activities or during the pause between levels in a game. When an app shows an interstitial ad, the user has the choice to either tap on the ad and continue to its destination or close it and return to the app.
This guide explains how to integrate interstitial ads into an Android app.
Prerequisites
Always test with test ads
When building and testing your apps, make sure you use test ads rather than live, production ads. Failure to do so can lead to suspension of your account.
The easiest way to load test ads is to use our dedicated test ad unit ID for Android interstitials:
/21775744923/example/interstitial
It's been specially configured to return test ads for every request, and you're free to use it in your own apps while coding, testing, and debugging. Just make sure you replace it with your own ad unit ID before publishing your app.
For details on GMA Next-Gen SDK test ads, see Enable test ads .
Load an ad
To load an ad, GMA Next-Gen SDK offers the following:
-
Load with the single ad loading API .
-
Load with the ad preloading API , which eliminates the need for manual ad loading and caching.
Load with the single ad loading API
The following example shows you how to load a single ad:
Kotlin
import
com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback
import
com.google.android.libraries.ads.mobile.sdk.common.AdRequest
import
com.google.android.libraries.ads.mobile.sdk.common.FullScreenContentError
import
com.google.android.libraries.ads.mobile.sdk.common.LoadAdError
import
com.google.android.libraries.ads.mobile.sdk.interstitial.InterstitialAd
import
com.google.android.libraries.ads.mobile.sdk.interstitial.InterstitialAdEventCallback
import
com.google.android.libraries.ads.mobile.sdk.MobileAds
class
InterstitialActivity
:
Activity
()
{
private
var
interstitialAd
:
InterstitialAd?
=
null
override
fun
onCreate
(
savedInstanceState
:
Bundle?)
{
super
.
onCreate
(
savedInstanceState
)
// Load ads after you initialize GMA Next-Gen SDK
.
InterstitialAd
.
load
(
AdRequest
.
Builder
(
AD_UNIT_ID
).
build
(),
object
:
AdLoadCallback<InterstitialAd>
{
override
fun
onAdLoaded
(
ad
:
InterstitialAd
)
{
// Interstitial ad loaded.
interstitialAd
=
ad
}
override
fun
onAdFailedToLoad
(
adError
:
LoadAdError
)
{
// Interstitial ad failed to load.
interstitialAd
=
null
}
},
)
}
companion
object
{
// Sample interstitial ad unit ID.
const
val
AD_UNIT_ID
=
"/21775744923/example/interstitial"
}
}
Java
import
com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback
;
import
com.google.android.libraries.ads.mobile.sdk.common.AdRequest
;
import
com.google.android.libraries.ads.mobile.sdk.common.FullScreenContentError
;
import
com.google.android.libraries.ads.mobile.sdk.common.LoadAdError
;
import
com.google.android.libraries.ads.mobile.sdk.interstitial.InterstitialAd
;
import
com.google.android.libraries.ads.mobile.sdk.interstitial.InterstitialAdEventCallback
;
import
com.google.android.libraries.ads.mobile.sdk.MobileAds
;
class
InterstitialActivity
extends
Activity
{
// Sample interstitial ad unit ID.
private
static
final
String
AD_UNIT_ID
=
"/21775744923/example/interstitial"
;
private
InterstitialAd
interstitialAd
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
// Load ads after you initialize GMA Next-Gen SDK
.
InterstitialAd
.
load
(
new
AdRequest
.
Builder
(
AD_UNIT_ID
).
build
(),
new
AdLoadCallback<InterstitialAd>
()
{
@Override
public
void
onAdLoaded
(
@NonNull
InterstitialAd
interstitialAd
)
{
// Interstitial ad loaded.
AdLoadCallback
.
super
.
onAdLoaded
(
interstitialAd
);
InterstitialActivity
.
this
.
interstitialAd
=
interstitialAd
;
}
@Override
public
void
onAdFailedToLoad
(
@NonNull
LoadAdError
adError
)
{
// Interstitial ad failed to load.
AdLoadCallback
.
super
.
onAdFailedToLoad
(
adError
);
interstitialAd
=
null
;
}
}
);
}
}
Load with the ad preloading API
To start preloading, do the following:
-
Initialize a preload configuration with an ad request.
-
Start the preloader for interstitial ads with your ad unit ID and preload configuration:
Kotlin
private
fun
startPreloading
(
adUnitId
:
String
)
{
val
adRequest
=
AdRequest
.
Builder
(
adUnitId
).
build
()
val
preloadConfig
=
PreloadConfiguration
(
adRequest
)
InterstitialAdPreloader
.
start
(
adUnitId
,
preloadConfig
)
}
Java
private
void
startPreloading
(
String
adUnitId
)
{
AdRequest
adRequest
=
new
AdRequest
.
Builder
(
adUnitId
).
build
();
PreloadConfiguration
preloadConfig
=
new
PreloadConfiguration
(
adRequest
);
InterstitialAdPreloader
.
start
(
adUnitId
,
preloadConfig
);
}
Ads are continuously made available as you show them. The following example polls for an ad from the preloader:
Kotlin
// Polling returns the next available ad and loads another ad in the background.
val
ad
=
InterstitialAdPreloader
.
pollAd
(
adUnitId
)
Java
// Polling returns the next available ad and loads another ad in the background.
final
InterstitialAd
ad
=
InterstitialAdPreloader
.
pollAd
(
adUnitId
);
Set the InterstitialAdEventCallback
The InterstitialAdEventCallback
handles events related to displaying your InterstitialAd
. Before showing the interstitial ad, make sure to set the
callback:
Kotlin
// Listen for ad events.
interstitialAd
?.
adEventCallback
=
object
:
InterstitialAdEventCallback
{
override
fun
onAdShowedFullScreenContent
()
{
// Interstitial ad did show.
}
override
fun
onAdDismissedFullScreenContent
()
{
// Interstitial ad did dismiss.
interstitialAd
=
null
}
override
fun
onAdFailedToShowFullScreenContent
(
fullScreenContentError
:
FullScreenContentError
)
{
// Interstitial ad failed to show.
interstitialAd
=
null
}
override
fun
onAdImpression
()
{
// Interstitial ad did record an impression.
}
override
fun
onAdClicked
()
{
// Interstitial ad did record a click.
}
}
Java
// Listen for ad events.
interstitialAd
.
setAdEventCallback
(
new
InterstitialAdEventCallback
()
{
@Override
public
void
onAdShowedFullScreenContent
()
{
// Interstitial ad did show.
InterstitialAdEventCallback
.
super
.
onAdShowedFullScreenContent
();
}
@Override
public
void
onAdDismissedFullScreenContent
()
{
// Interstitial ad did dismiss.
InterstitialAdEventCallback
.
super
.
onAdDismissedFullScreenContent
();
interstitialAd
=
null
;
}
@Override
public
void
onAdFailedToShowFullScreenContent
(
@NonNull
FullScreenContentError
fullScreenContentError
)
{
// Interstitial ad failed to show.
InterstitialAdEventCallback
.
super
.
onAdFailedToShowFullScreenContent
(
fullScreenContentError
);
initerstitialAd
=
null
;
}
@Override
public
void
onAdImpression
()
{
// Interstitial ad did record an impression.
InterstitialAdEventCallback
.
super
.
onAdImpression
();
}
@Override
public
void
onAdClicked
()
{
// Interstitial ad did record a click.
InterstitialAdEventCallback
.
super
.
onAdClicked
();
}
}
);
Show the ad
To show an interstitial ad, use the show()
method.
Kotlin
// Show the ad.
interstitialAd
?.
show
(
this
@InterstitialActivity
)
Java
// Show the ad.
interstitialAd
.
show
(
InterstitialActivity
.
this
);
Some best practices
- Consider whether interstitial ads are the right type of ad for your app.
- Interstitial ads work best in apps with natural transition points. The conclusion of a task within an app, like sharing an image or completing a game level, creates such a point. Make sure you consider at which points in your app's workflow you'll display interstitial ads and how the user is likely to respond.
- Remember to pause the action when displaying an interstitial ad.
- There are a number of different types of interstitial ads: text, image, video, and more. It's important to make sure that when your app displays an interstitial ad, it also suspends its use of some resources to allow the ad to take advantage of them. For example, when you make the call to display an interstitial ad, be sure to pause any audio output being produced by your app.
- Allow for adequate loading time.
- Just as it's important to make sure you display interstitial ads at an
appropriate time, it's also important to make sure the user doesn't have to
wait for them to load. Loading the ad in advance by calling
load()before you intend to callshow()can ensure that your app has a fully loaded interstitial ad at the ready when the time comes to display one. - Don't flood the user with ads.
- While increasing the frequency of interstitial ads in your app might seem like a great way to increase revenue, it can also degrade the user experience and lower clickthrough rates. Make sure that users aren't so frequently interrupted that they're no longer able to enjoy the use of your app.
Example
Download and run the example app that demonstrates the use of the GMA Next-Gen SDK .

