> ## 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 () <CLXRewardedDelegate, CLXAdRevenueDelegate>
  @property (nonatomic, strong) CLXRewarded *rewardedAd;
  @property (nonatomic, assign) NSInteger retryAttempt;
  @end

  @implementation YourViewController

  - (void)createRewardedAd {
      self.rewardedAd = [[CloudXCore shared] createRewardedWithAdUnitId:@"your-rewarded-ad-unit-id"];
      self.rewardedAd.delegate = self;
      self.rewardedAd.revenueDelegate = self;
      [self.rewardedAd load];
  }

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

          // 或使用可选的展示位置和自定义数据进行追踪
          // [self.rewardedAd showFromViewController:self placement:@"bonus_coins" customData:@"level:5,coins:100"];
      } else {
          NSLog(@"激励视频广告尚未准备好");
      }
  }

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

  #pragma mark - CLXRewardedDelegate

  - (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.rewardedAd load];
      });
  }

  - (void)didDisplayAd:(CLXAd *)ad {
      NSLog(@"激励视频广告已展示");
  }

  - (void)didFailToDisplayAd:(CLXAd *)ad error:(CLXError *)error {
      NSLog(@"激励视频广告展示失败: %@", error.localizedDescription);
      [self.rewardedAd load];
  }

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

  - (void)didClickAd:(CLXAd *)ad {
      NSLog(@"激励视频广告被点击");
  }

  - (void)didRewardUserForAd:(CLXAd *)ad withReward:(CLXReward *)reward {
      NSLog(@"用户获得奖励: %ld %@", (long)reward.amount, reward.label);
      // 向用户发放奖励
  }

  #pragma mark - CLXAdRevenueDelegate

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

  @end
  ```

  ```swift Swift theme={null}
  class YourViewController: UIViewController, CLXRewardedDelegate, CLXAdRevenueDelegate {
      private var rewardedAd: CLXRewarded?
      private var retryAttempt = 0

      func createRewardedAd() {
          rewardedAd = CloudXCore.shared.createRewarded(adUnitId: "your-rewarded-ad-unit-id")
          rewardedAd?.delegate = self
          rewardedAd?.revenueDelegate = self
          rewardedAd?.load()
      }

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

              // 或使用可选的展示位置和自定义数据进行追踪
              // rewardedAd?.show(from: self, placement: "bonus_coins", customData: "level:5,coins:100")
          } else {
              print("激励视频广告尚未准备好")
          }
      }

      deinit {
          rewardedAd?.destroy()
      }

      // MARK: - CLXRewardedDelegate

      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?.rewardedAd?.load()
          }
      }

      func didDisplay(_ ad: CLXAd) {
          print("激励视频广告已展示")
      }

      func didFailToDisplay(_ ad: CLXAd, error: CLXError) {
          print("激励视频广告展示失败: \(error.localizedDescription)")
          rewardedAd?.load()
      }

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

      func didClick(_ ad: CLXAd) {
          print("激励视频广告被点击")
      }

      func didRewardUser(for ad: CLXAd, with reward: CLXReward) {
          print("用户获得奖励: \(reward.amount) \(reward.label)")
          // 为用户发放奖励
      }

      // MARK: - CLXAdRevenueDelegate

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