Select platform: [Android (beta)
![New](https://developers.google.com/static/admob/images/new.svg)](https://developers.google.com/admob/android/next-gen/rewarded-interstitial "View this page for the Android (beta) platform docs.") [Android](https://developers.google.com/admob/android/rewarded-interstitial "View this page for the Android platform docs.") [iOS](https://developers.google.com/admob/ios/rewarded-interstitial "View this page for the iOS platform docs.") [Unity](https://developers.google.com/admob/unity/rewarded-interstitial "View this page for the Unity platform docs.") [Flutter](https://developers.google.com/admob/flutter/rewarded-interstitial "View this page for the Flutter platform docs.")

<br />

[Rewarded interstitial](https://support.google.com/admob/answer/9884467) is a type
of incentivized ad format that lets you offer rewards for ads that appear
automatically during natural app transitions. Unlike rewarded ads, users aren't
required to opt in to view a rewarded interstitial.

## Prerequisites

- Google Mobile Ads SDK 19.2.0 or higher.

<!-- -->

- Complete the [Get started guide](https://developers.google.com/admob/android/quick-start).

## Implementation

The primary steps to integrate rewarded interstitial ads are as follows:

- Load an ad
- Register for full screen event callbacks
- Handle the reward callback
- Display the ad
- \[Optional\] Validate SSV callbacks

### Load an ad

Loading an ad is accomplished using the static `load()` method on the
`RewardedInterstitialAd` class. The load method requires a Context, your ad
unit ID, an `AdRequest` object, and a
`RewardedInterstitialAdLoadCallback` to be notified when ad loading succeeds or
fails. The loaded `RewardedInterstitialAd` object is provided as a parameter in
the `onRewardedInterstitialAdLoaded()` callback.

The following example shows how to load a `RewardedInterstitialAd` in your
`MainActivity`.  

### Java

    RewardedInterstitialAd.load(
        MainActivity.this,
        "<var translate="no">AD_UNIT_ID</var>",
        new AdRequest.Builder().build(),
        new RewardedInterstitialAdLoadCallback() {
          @Override
          public void onAdLoaded(RewardedInterstitialAd ad) {
            Log.d(TAG, "Ad was loaded.");
            rewardedInterstitialAd = ad;
          }

          @Override
          public void onAdFailedToLoad(LoadAdError loadAdError) {
            Log.d(TAG, "onAdFailedToLoad: " + loadAdError.getMessage());
            rewardedInterstitialAd = null;
          }
        });  
    https://github.com/googleads/googleads-mobile-android-examples/blob/6252f89e35ae5b73053ed3f74bf551114920b7ad/java/admob/RewardedInterstitialExample/app/src/main/java/com/google/ads/rewardedinterstitialexample/MainActivity.java#L214-L232

### Kotlin

    RewardedInterstitialAd.load(
      this,
      "<var translate="no">AD_UNIT_ID</var>",
      AdRequest.Builder().build(),
      object : RewardedInterstitialAdLoadCallback() {
        override fun onAdLoaded(rewardedAd: RewardedInterstitialAd) {
          Log.d(TAG, "Ad was loaded.")
          rewardedInterstitialAd = rewardedAd
        }

        override fun onAdFailedToLoad(adError: LoadAdError) {
          Log.d(TAG, "onAdFailedToLoad: ${adError.message}")
          rewardedInterstitialAd = null
        }
      },
    )  
    https://github.com/googleads/googleads-mobile-android-examples/blob/6252f89e35ae5b73053ed3f74bf551114920b7ad/kotlin/admob/RewardedInterstitialExample/app/src/main/java/com/google/android/gms/example/rewardedinterstitialexample/MainActivity.kt#L170-L187

Replace <var translate="no">AD_UNIT_ID</var> with your ad unit ID.


| **Tip:** You can use ad load calls to build up a cache of preloaded ads before you intend to show them, so that ads can be shown with zero latency when needed. Since ads expire after an hour, you should clear this cache and reload with new ads every hour.

<br />

### Register for callbacks

In order to receive notifications for presentation events, you must pass a
`FullScreenContentCallback` object to the setter on your ad. The
`FullScreenContentCallback` object handles callbacks for when the ad presents
successfully or unsuccessfully, and when it is dismissed. The following code
shows how to set an anonymous `FullScreenContentCallback` object within your
`RewardedInterstitialAdLoadCallback`:  

### Java

    rewardedInterstitialAd.setFullScreenContentCallback(
        new FullScreenContentCallback() {
          @Override
          public void onAdDismissedFullScreenContent() {
            // Called when fullscreen content is dismissed.
            Log.d(TAG, "The ad was dismissed.");
            // Make sure to set your reference to null so you don't
            // show it a second time.
            rewardedInterstitialAd = null;
            if (googleMobileAdsConsentManager.canRequestAds()) {
              loadRewardedInterstitialAd();
            }
          }

          @Override
          public void onAdFailedToShowFullScreenContent(AdError adError) {
            // Called when fullscreen content failed to show.
            Log.d(TAG, "The ad failed to show.");
            // Make sure to set your reference to null so you don't
            // show it a second time.
            rewardedInterstitialAd = null;
          }

          @Override
          public void onAdShowedFullScreenContent() {
            // Called when fullscreen content is shown.
            Log.d(TAG, "The ad was shown.");
          }

          @Override
          public void onAdImpression() {
            // Called when an impression is recorded for an ad.
            Log.d(TAG, "The ad recorded an impression.");
          }

          @Override
          public void onAdClicked() {
            // Called when ad is clicked.
            Log.d(TAG, "The ad was clicked.");
          }
        });  
    https://github.com/googleads/googleads-mobile-android-examples/blob/6252f89e35ae5b73053ed3f74bf551114920b7ad/java/admob/RewardedInterstitialExample/app/src/main/java/com/google/ads/rewardedinterstitialexample/MainActivity.java#L314-L354

### Kotlin

    rewardedInterstitialAd?.fullScreenContentCallback =
      object : FullScreenContentCallback() {
        override fun onAdDismissedFullScreenContent() {
          // Called when fullscreen content is dismissed.
          Log.d(TAG, "Ad was dismissed.")
          // Don't forget to set the ad reference to null so you
          // don't show the ad a second time.
          rewardedInterstitialAd = null
        }

        override fun onAdFailedToShowFullScreenContent(adError: AdError) {
          // Called when fullscreen content failed to show.
          Log.d(TAG, "Ad failed to show.")
          // Don't forget to set the ad reference to null so you
          // don't show the ad a second time.
          rewardedInterstitialAd = null
        }

        override fun onAdShowedFullScreenContent() {
          // Called when fullscreen content is shown.
          Log.d(TAG, "Ad showed fullscreen content.")
        }

        override fun onAdImpression() {
          // Called when an impression is recorded for an ad.
          Log.d(TAG, "Ad recorded an impression.")
        }

        override fun onAdClicked() {
          // Called when an ad is clicked.
          Log.d(TAG, "Ad was clicked.")
        }
      }  
    https://github.com/googleads/googleads-mobile-android-examples/blob/6252f89e35ae5b73053ed3f74bf551114920b7ad/kotlin/admob/RewardedInterstitialExample/app/src/main/java/com/google/android/gms/example/rewardedinterstitialexample/MainActivity.kt#L262-L299

### Show the ad

| **Key Point:** Before displaying a rewarded interstitial ad to users, you must present the user with an intro screen that provides clear reward messaging and an option to skip the ad before it starts. [Learn more](https://support.google.com/admob/answer/9884467)

When you show a rewarded interstitial ad, you use an
`OnUserEarnedRewardListener` object to handle reward events.  

### Java

    rewardedInterstitialAd.show(
        MainActivity.this,
        new OnUserEarnedRewardListener() {
          @Override
          public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
            Log.d(TAG, "The user earned the reward.");
            // Handle the reward.
            int rewardAmount = rewardItem.getAmount();
            String rewardType = rewardItem.getType();
          }
        });  
    https://github.com/googleads/googleads-mobile-android-examples/blob/6252f89e35ae5b73053ed3f74bf551114920b7ad/java/admob/RewardedInterstitialExample/app/src/main/java/com/google/ads/rewardedinterstitialexample/MainActivity.java#L358-L371

### Kotlin

    rewardedInterstitialAd?.show(this) { rewardItem ->
      Log.d(TAG, "User earned the reward.")
      // Handle the reward.
      val rewardAmount = rewardItem.amount
      val rewardType = rewardItem.type
    }  
    https://github.com/googleads/googleads-mobile-android-examples/blob/6252f89e35ae5b73053ed3f74bf551114920b7ad/kotlin/admob/RewardedInterstitialExample/app/src/main/java/com/google/android/gms/example/rewardedinterstitialexample/MainActivity.kt#L303-L311

### \[Optional\] Validate server-side verification (SSV) callbacks

Apps that require extra data in [server-side
verification](https://developers.google.com/admob/android/ssv) callbacks should use the
custom data feature of rewarded ads. Any string value set on a rewarded ad
object is passed to the `custom_data` query parameter of the SSV callback. If no
custom data value is set, the `custom_data` query parameter value won't be
present in the SSV callback.

The following code sample demonstrates how to set custom data on a rewarded
interstitial ad object before requesting an ad.  

### Java

    RewardedInterstitialAd.load(
        context,
        AD_UNIT_ID,
        new AdRequest.Builder().build(),
        new RewardedInterstitialAdLoadCallback() {
          @Override
          public void onAdLoaded(RewardedInterstitialAd ad) {
            rewardedInterstitialAd = ad;
    ServerSideVerificationOptions options =
    new ServerSideVerificationOptions.Builder()
    .setCustomData("<var translate="no">SAMPLE_CUSTOM_DATA_STRING</var>")
    .build();
    rewardedInterstitialAd.setServerSideVerificationOptions(options);
          }
        });  
    https://github.com/googleads/googleads-mobile-android-examples/blob/6252f89e35ae5b73053ed3f74bf551114920b7ad/java/advanced/APIDemo/app/src/main/java/com/google/android/gms/snippets/RewardedInterstitialAdSnippets.java#L32-L46

### Kotlin

    RewardedInterstitialAd.load(
      context,
      AD_UNIT_ID,
      AdRequest.Builder().build(),
      object : RewardedInterstitialAdLoadCallback() {
        override fun onAdLoaded(ad: RewardedInterstitialAd) {
          rewardedInterstitialAd = ad
    val options =
    ServerSideVerificationOptions.Builder().setCustomData("<var translate="no">SAMPLE_CUSTOM_DATA_STRING</var>").build()
    rewardedInterstitialAd?.setServerSideVerificationOptions(options)
    }
    },
    )  
    https://github.com/googleads/googleads-mobile-android-examples/blob/6252f89e35ae5b73053ed3f74bf551114920b7ad/kotlin/advanced/APIDemo/app/src/main/java/com/google/android/gms/snippets/RewardedInterstitialAdSnippets.kt#L30-L42

Replace <var translate="no">SAMPLE_CUSTOM_DATA_STRING</var> with your custom data.

If you want to set the custom reward string, you must do so before showing the
ad.
| **Key Point:** The custom reward string is [percent
| escaped](https://en.wikipedia.org/wiki/Percent-encoding) and might require decoding when parsed from the SSV callback.

## Examples on GitHub

- Rewarded Interstitial ads example: [Java](https://github.com/googleads/googleads-mobile-android-examples/tree/main/java/admob/RewardedInterstitialExample) \| [Kotlin](https://github.com/googleads/googleads-mobile-android-examples/tree/main/kotlin/admob/RewardedInterstitialExample)

## Next steps

Explore the following topics:

- [User privacy](https://developers.google.com/admob/android/privacy)
- [Optimized SDK initialization and ad loading
  (beta)](https://developers.google.com/admob/android/optimize-initialization)