插屏广告
在 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);
}
@endclass 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")")
}
}过期广告
已加载但在过期前未展示的广告,会在同一广告对象上自动重新加载。在替换广告就绪之前,当前广告保持就绪状态,仍可展示。
- 如需在替换广告就绪时收到通知,请设置
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);
}// Add CLXAdExpirationDelegate to the protocols YourViewController adopts
interstitialAd?.expirationDelegate = self
func didReloadExpiredAd(_ expiredAd: CLXAd, with newAd: CLXAd) {
print("Expired interstitial ad replaced by an ad from \(newAd.networkName ?? "unknown")")
}