> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudx.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 插屏广告

> 在 iOS 应用中集成 CloudX 插屏广告

<CodeGroup>
  ```objc Objective-C theme={null}
  @interface YourViewController () <CLXInterstitialDelegate, CLXAdRevenueDelegate>
  @property (nonatomic, strong) CLXInterstitial *interstitialAd;
  @property (nonatomic, assign) NSInteger retryAttempt;
  @end

  @implementation YourViewController

  - (void)createInterstitialAd {
      self.interstitialAd = [[CloudXCore shared] createInterstitialWithAdUnitId:@"your-interstitial-ad-unit-id"];
      self.interstitialAd.delegate = self;
      self.interstitialAd.revenueDelegate = self;
      [self.interstitialAd load];
  }

  - (void)showInterstitialAd {
      if (self.interstitialAd.isReady) {
          // 基本展示
          [self.interstitialAd showFromViewController:self];

          // 或使用可选的展示位置和自定义数据进行追踪
          // [self.interstitialAd showFromViewController:self placement:@"level_complete" customData:@"level:5,score:1000"];
      } else {
          NSLog(@"插屏广告尚未准备好");
      }
  }

  - (void)dealloc {
      [self.interstitialAd destroy];
  }

  #pragma mark - CLXInterstitialDelegate

  - (void)didLoadAd:(CLXAd *)ad {
      NSLog(@"插屏广告从 %@ 加载成功", ad.networkName);
      self.retryAttempt = 0;
  }

  - (void)didFailToLoadAd:(NSString *)adUnitId error:(CLXError *)error {
      NSLog(@"插屏广告加载失败: %@", error.localizedDescription);
      self.retryAttempt++;
      NSTimeInterval delay = pow(2.0, MIN(5, self.retryAttempt));
      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
          [self.interstitialAd load];
      });
  }

  - (void)didDisplayAd:(CLXAd *)ad {
      NSLog(@"插屏广告已展示");
  }

  - (void)didFailToDisplayAd:(CLXAd *)ad error:(CLXError *)error {
      NSLog(@"插屏广告展示失败: %@", error.localizedDescription);
      [self.interstitialAd load];
  }

  - (void)didHideAd:(CLXAd *)ad {
      NSLog(@"插屏广告已隐藏");
      [self.interstitialAd load]; // 为下次使用重新加载
  }

  - (void)didClickAd:(CLXAd *)ad {
      NSLog(@"插屏广告被点击");
  }

  #pragma mark - CLXAdRevenueDelegate

  - (void)didPayRevenueForAd:(CLXAd *)ad {
      NSLog(@"插屏广告收入: %@ 来自 %@", ad.revenue, ad.networkName);
  }

  @end
  ```

  ```swift Swift theme={null}
  class YourViewController: UIViewController, CLXInterstitialDelegate, CLXAdRevenueDelegate {
      private var interstitialAd: CLXInterstitial?
      private var retryAttempt = 0

      func createInterstitialAd() {
          interstitialAd = CloudXCore.shared.createInterstitial(adUnitId: "your-interstitial-ad-unit-id")
          interstitialAd?.delegate = self
          interstitialAd?.revenueDelegate = self
          interstitialAd?.load()
      }

      func showInterstitialAd() {
          if interstitialAd?.isReady == true {
              // 基本展示
              interstitialAd?.show(from: self)

              // 或使用可选的展示位置和自定义数据进行追踪
              // interstitialAd?.show(from: self, placement: "level_complete", customData: "level:5,score:1000")
          } else {
              print("插屏广告尚未准备好")
          }
      }

      deinit {
          interstitialAd?.destroy()
      }

      // MARK: - CLXInterstitialDelegate

      func didLoad(_ ad: CLXAd) {
          print("插屏广告从 \(ad.networkName ?? "unknown") 加载成功")
          retryAttempt = 0
      }

      func didFailToLoadAd(_ adUnitId: String, error: CLXError) {
          print("插屏广告加载失败: \(error.localizedDescription)")
          retryAttempt += 1
          let delay = pow(2.0, Double(min(5, retryAttempt)))
          DispatchQueue.main.asyncAfter(deadline: .now() + delay) { [weak self] in
              self?.interstitialAd?.load()
          }
      }

      func didDisplay(_ ad: CLXAd) {
          print("插屏广告已展示")
      }

      func didFailToDisplay(_ ad: CLXAd, error: CLXError) {
          print("插屏广告展示失败: \(error.localizedDescription)")
          interstitialAd?.load()
      }

      func didHide(_ ad: CLXAd) {
          print("插屏广告已隐藏")
          interstitialAd?.load() // 为下次使用重新加载
      }

      func didClick(_ ad: CLXAd) {
          print("插屏广告被点击")
      }

      // MARK: - CLXAdRevenueDelegate

      func didPayRevenue(for ad: CLXAd) {
          print("插屏广告收入: \(ad.revenue ?? 0) 来自 \(ad.networkName ?? "unknown")")
      }
  }
  ```
</CodeGroup>
