插屏广告

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

@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

过期广告

已加载但在过期前未展示的广告,会在同一广告对象上自动重新加载。在替换广告就绪之前,当前广告保持就绪状态,仍可展示。

  • 如需在替换广告就绪时收到通知,请设置 expirationDelegate。自动加载完成的替换广告不会再次触发 didLoadAd:(Swift 为 didLoad(_:))。
  • 如果在替换广告加载期间展示广告,替换广告会被保留,并在广告关闭后变为就绪,届时会调用 expirationDelegate。
  • 如果在替换广告加载期间调用 load(包括在 didHideAd:(Swift 为 didHide(_:))中调用 load),不会发起第二次请求。您会先收到携带新广告的 didLoadAd:,随后收到 didReloadExpiredAd:withNewAd:(Swift 为 didReloadExpiredAd(_:with:))。
  • 如果在过期广告仍处于已加载状态时替换广告加载失败,会触发 didFailToLoadAd:error:(Swift 为 didFailToLoadAd(_:error:)),广告不再就绪。请再次调用 load,并延迟一段时间后重试,避免立即循环重试。
// Add CLXAdExpirationDelegate to the protocols YourViewController adopts
self.interstitialAd.expirationDelegate = self;

- (void)didReloadExpiredAd:(CLXAd *)expiredAd withNewAd:(CLXAd *)newAd {
    NSLog(@"Expired interstitial ad replaced by an ad from %@", newAd.networkName);
}