# Implement interstitial ads in Android

> Implement interstitial ads in your Android app. Load ad content, display it through Java code, and use a listener to manage ad events.

## Interstitial ad load example

Use `LoadConfiguration.Builder` to construct a load request with the placement ID, optionally including mediation metadata and ad markup for bidding. Pass the built configuration to `InterstitialAd.load()` along with a `LoadListener`. The `onAdLoaded` callback receives the loaded `InterstitialAd` instance on success, or a `UnityAdsError` on failure. Retain the ad instance, as it's required to show the ad later.

Only mediation adapters set mediation metadata and ad markup. If you integrate Unity Ads directly, omit them.

Ads expire a set time after they load if they aren't shown. Set `onAdExpired` on the loaded ad instance to detect this and clear your reference. Calling `show()` on an expired ad fails. Do this in the same block where you store the ad, then use the callback to discard the stale reference and trigger a new `load()` call so a valid ad is ready the next time you need one.

1. **Java**

   ```java
   InterstitialAd.load(loadConfig, (interstitialAd, error) -> {
       if (interstitialAd != null) {
           // Ad loaded successfully, ready to be shown
           this.interstitialAd = interstitialAd;
           interstitialAd.setOnAdExpired(expiredAd -> {
               this.interstitialAd = null;
               // reload here
           });
       } else {
           // Handle load error
       }
   });
   ```

2. **Kotlin**

   ```kotlin
   InterstitialAd.load(loadConfig, { interstitialAd, error ->
       if (interstitialAd != null) {
           // Ad loaded successfully, ready to be shown
           this.interstitialAd = interstitialAd
           interstitialAd.onAdExpired = AdExpiredListener { _ ->
               this.interstitialAd = null
               // reload here
           }
       } else {
           // Handle load error
       }
   })
   ```

## Interstitial ad show example

Call `show()` on the retained `InterstitialAd` instance, passing the activity, a `ShowConfiguration`, and an `InterstitialShowListener`. The listener provides callbacks for each stage of the ad's lifecycle: `onStarted` when the ad displays, `onClicked` when the user interacts with it, `onCompleted` when it closes, and `onFailed` if an error occurs — with the error details available via the `UnityAdsError` argument.

1. **Java**

   ```java
     loadedInterstitialAd.show(activity, new ShowConfiguration.Builder().build(), new InterstitialShowListener()
     {
        @Override
        public void onStarted(@NonNull InterstitialAd ad)   
        { /* displayed */ }

        @Override
        public void onClicked(@NonNull InterstitialAd ad)   
        { /* clicked */ }

        @Override
        public void onCompleted(@NonNull InterstitialAd ad, @NonNull ShowFinishState state) 
        { /* hidden */ }

        @Override
        public void onFailed(@NonNull InterstitialAd ad, @NonNull UnityAdsError error)      
        { /* failed */ }
     } );

   ```

2. **Kotlin**

   ```kotlin
   loadedInterstitialAd.show(activity, ShowConfiguration.Builder().build(), object : InterstitialShowListener 
   {
     override fun onStarted(ad: InterstitialAd)                            
        { /* displayed */ }
     override fun onClicked(ad: InterstitialAd)                            
        { /* clicked */ }
     override fun onCompleted(ad: InterstitialAd, state: ShowFinishState)  
        { /* hidden */ }
     override fun onFailed(ad: InterstitialAd, error: UnityAdsError)       
        { /* failed */ }
   })
   ```

**Next steps**: To improve your implementation, refer to the [Implement rewarded ads in Android](/ads-android/4.21.0/sdk-integration/rewarded-ads.md) documentation.
