请输入
菜单

插屏广告

  • 🚀 采用预加载机制提升用户体验
  • ⚠️ 注意处理生命周期防止内存泄漏
  • 🔧 推荐使用标准化回调处理流程

1. 加载广告

objective-c 复制代码
#import <MCSDK/MCSDK.h>    

@interface InterstitialVC () <MCAdDelegate, MCAdRevenueDelegate>

@property (nonatomic, strong) MCInterstitialAd *interstitialAd;
@property (nonatomic, assign) NSInteger retryAttempt; // 重试次数计数器

@end

@implementation InterstitialVC

// 插屏聚合单元ID,需要替换为您的实际聚合单元ID
#define InterstitialPlacementID @"your mediation unit id"

// 场景ID,用于区分不同的广告展示场景
#define InterstitialSceneID @""

#pragma mark - Load Ad
- (void)loadAd {
    // 如果广告对象不存在,则创建新的插屏广告实例
    if (!self.interstitialAd) {
        self.interstitialAd = [[MCInterstitialAd alloc] initWithPlacementId:InterstitialPlacementID];
    }
    // 设置广告代理和收益代理
    self.interstitialAd.delegate = self;
    self.interstitialAd.revenueDelegate = self;
    
    // 开始加载广告
    [self.interstitialAd loadAd];
}

#pragma mark - MCAdDelegate
// 广告加载成功
- (void)didLoadAd:(MCAdInfo *)ad {
    // 重置重试次数
    self.retryAttempt = 0;
}

// 广告加载失败
- (void)didFailToLoadAdWithError:(MCError *)error {

     // 我们建议您使用指数递增的延迟进行重试,最大延迟时间为8秒或最大重试次数为3次
     if (self.retryAttempt >= 3) {
        return;
    }
    self.retryAttempt++;
    // 计算延迟时间:2的幂次方,最大为8秒
    NSInteger delaySec = pow(2, MIN(3, self.retryAttempt));

    // 延迟重试加载广告
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delaySec * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        [self.interstitialAd loadAd];
    });
}

// 广告展示成功
- (void)didDisplayAd:(MCAdInfo *)ad {
    // 预加载下一个广告
    [self.interstitialAd loadAd];
}

// 广告关闭
- (void)didHideAd:(MCAdInfo *)ad { 
    // 预加载下一个广告
    [self.interstitialAd loadAd];
}

// 广告点击
- (void)didClickAd:(MCAdInfo *)ad {

}

// 广告展示失败
- (void)didFailToDisplayAd:(MCAdInfo *)ad withError:(MCError *)error { 
    // 预加载下一个广告
    [self.interstitialAd loadAd];
}

// 广告视频开始播放(如果是视频广告)
- (void)didAdVideoStarted:(MCAdInfo *)ad { }

// 广告视频播放完成(如果是视频广告)
- (void)didAdVideoCompleted:(MCAdInfo *)ad { }

#pragma mark - MCAdRevenueDelegate
// 收益跟踪回调
- (void)didPayRevenueForAd:(MCAdInfo *)ad {

}

2. 展示广告

objective-c 复制代码
// 检查广告是否准备就绪
if ([self.interstitialAd isReady]) {
    // 展示广告,传入当前视图控制器和场景ID
    [self.interstitialAd showAdWithViewController:self withExtra:@{kMCAPIPlacementScenarioIDKey:@"场景id"}];
} else {
    // 如果广告未准备好,重新加载
    [self.interstitialAd loadAd];
}

3. 销毁广告

objective-c 复制代码
[self.interstitialAd destroyAd];

4. 设置自定义参数

objective-c 复制代码
- (void)loadAd {
    // 创建插屏广告实例
    MCInterstitialAd *interstitialAd = [[MCInterstitialAd alloc] initWithPlacementId:self.placementID];
    interstitialAd.delegate = self;
    interstitialAd.revenueDelegate = self;
    
    // 设置加载时的额外参数
    [interstitialAd setLoadExtraParameter:@{
        @"userData": @"test_userData"
    }];
    
    // 设置展示时的额外参数
    [interstitialAd setExtraParameter:@{
        @"test_extra_key": @"test_extra_value"
    }];
    
    // 开始加载广告
    [interstitialAd loadAd];
    self.interstitialAd = interstitialAd;
}

- (void)didLoadAd:(MCAdInfo *)ad {
    // 获取自定义参数
    NSString *originDataJsonString = ad.originData;
}  
上一个
激励视频广告
下一个
开屏广告
最近修改: 2025-07-21Powered by