# Implement interstitial ads in iOS

> Implement interstitial ads in your iOS app. Load ad content, display it through Objective-C or Swift code, and use a delegate to handle ad events.

## Interstitial ad load example

Use `UADSLoadConfigurationBuilder` to construct a load request with the placement ID, mediation metadata, and optional ad markup for bidding, then pass it to `UADSInterstitialAd.load()`. The completion block receives the loaded `UADSInterstitialAd` instance on success. Retain it, as it's required to show the ad later, or an error object on failure.

1. **Objective-C**

   ```objective-c
   @property (strong) UADSInterstitialAd *interstitialAd;

   UADSLoadConfigurationBuilder *builder =
   [[UADSLoadConfigurationBuilder alloc] initWithPlacementId:placementId];
   builder = [builder withMediationInfo:self.mediationInfo];
   builder = [builder withAdMarkup:bidResponse];

   [UADSInterstitialAd load:[builder build]
               completion:^(UADSInterstitialAd *ad, id<UnityAdsError> error) {
     if (error) {
         NSLog(@"Failed: %ld %@", (long)error.code, error.message);
     } else {
         self.interstitialAd = ad;
     }
   }];
   ```

2. **Swift**

   ```swift
   var interstitialAd: UADSInterstitialAd?

   let config = UADSLoadConfigurationBuilder(placementId: placementId)
     .with(mediationInfo: mediationInfo)
     .with(adMarkup: bidResponse)
     .build()

   UADSInterstitialAd.load(config) { ad, error in
     if let error = error {
         print("Failed: \(error.code) \(error.message)")
     } else {
         self.interstitialAd = ad
     }
   }
   ```

## Interstitial ad show example

Call `show()` on the retained `UADSInterstitialAd` instance, passing a `UADSShowConfiguration` built with the presenting view controller, and a `UADSInterstitialShowDelegate`. The delegate provides callbacks for each stage of the ad's lifecycle: `showDidStart` when the ad displays, `showDidClick` when the user interacts with it, `showDidComplete` when it closes, and `showDidFail` if an error occurs.

1. **Objective-C**

   ```objective-c
   @interface MyDelegate : NSObject <UADSInterstitialShowDelegate>
   @end

   @implementation MyDelegate
   - (void)showDidStart:(UADSInterstitialAd *)unityAd {
   }
   - (void)showDidClick:(UADSInterstitialAd *)unityAd {
   }
   - (void)showDidComplete:(UADSInterstitialAd *)unityAd
                     with:(UADSShowFinishState)finishState {
   }
   - (void)showDidFail:(UADSInterstitialAd *)unityAd
               error:(id<UnityAdsError>)error {
   }
   @end

   UADSShowConfigurationBuilder *builder =
   [[UADSShowConfigurationBuilder alloc] init];
   builder = [builder withViewController:viewController];

   [self.interstitialAd show:[builder build] delegate:delegate];
   ```

2. **Swift**

   ```swift
   class MyDelegate: NSObject, UADSInterstitialShowDelegate {
   func showDidStart(_ unityAd: UADSInterstitialAd) {
   }

   func showDidClick(_ unityAd: UADSInterstitialAd) {
   }

   func showDidComplete(
       _ unityAd: UADSInterstitialAd,
       with finishState: UADSShowFinishState
   ) {
   }

   func showDidFail(
       _ unityAd: UADSInterstitialAd,
       error: UnityAdsError
   ) {
   }
   }

   let config = UADSShowConfigurationBuilder()
   .with(viewController: viewController)
   .build()

   interstitialAd?.show(config, delegate: delegate)
   ```

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