优推 YT SDK 开屏广告

适用于本仓库 SDK 6.5.1。API 以所安装版本的 framework 公开头为准。

接入概览

页面需要强持有广告实例。完成隐私流程、页面已加入 window 且 App 处于前台后,在主线程调用 loadSplash。将下面的广告位占位符替换为平台分配的开屏广告位,并将隐私与请求配置中的 YTMakeRequestConfig 放在同一 .m 文件中。

#import <YTIFLYADLib/YTIFLYADLib.h>

@interface SplashViewController : UIViewController <YTIFLYSplashAdDelegate>
@property (nonatomic, strong) YTIFLYSplashAd *splashAd;
@end

@implementation SplashViewController

- (void)loadSplash {
    [self clearSplash];
    YTIFLYSplashAd *ad = [[YTIFLYSplashAd alloc] initWithAdUnitId:@"YOUR_SPLASH_AD_UNIT_ID"];
    ad.delegate = self;
    ad.currentViewController = self;
    self.splashAd = ad;
    [ad ytifly_loadAdWithRequestConfig:YTMakeRequestConfig()];
}

- (void)ytifly_splashAdDidReady:(YTIFLYSplashAd *)ad {
    if (ad != self.splashAd || !self.view.window ||
        UIApplication.sharedApplication.applicationState != UIApplicationStateActive ||
        ![ad ytifly_isAdValid]) return;
    YTIFLYSplashAdConfig *config = [[YTIFLYSplashAdConfig alloc] init];
    config.traceDuration = 5;
    config.muteOnStart = YES;
    [ad ytifly_showAdFromRootViewController:self config:config];
}

- (void)ytifly_splashAd:(YTIFLYSplashAd *)ad didFailWithError:(YTIFLYAdError *)error {
    if (ad != self.splashAd) return;
    NSLog(@"Splash failed: %d %@", error.errorCode, error.errorDescription);
    // 结束本次开屏等待,让用户继续进入 App。
}

- (void)clearSplash {
    self.splashAd.delegate = nil;
    [self.splashAd ytifly_destroy];
    self.splashAd = nil;
}

- (void)dealloc {
    [self clearSplash];
}

@end

这段示例在 DidReady 时尝试展示。若业务还未满足展示条件,应暂存实例,在条件满足后重新检查 ytifly_isAdValid 再展示;离开该广告流程时调用 clearSplash。不要在 viewDidAppear: 每次触发时无条件重复请求。

展示配置行为
traceDuration倒计时 3~5 秒,默认 5 秒,越界值回退为 5 秒
mediumBottomView自定义底部品牌区,媒体设置视图及高度
customWindow可选;使用与当前展示页面相符的 window
muteOnStart视频初始静音,默认 YES
muteButtonHidden是否隐藏视频静音按钮,默认 NO
headingInteractionEnabledYES 表示将摇一摇改为扭一扭,不代表关闭交互
showNoAds是否显示“免除广告”按钮;点击后的业务处理由媒体实现

可左右滚动查看完整表格

开屏由 SDK 挂载到宿主 window,不需要媒体自己 presentViewController:。倒计时关闭使用 ytifly_splashAdDidClose:,点击跳过使用 ytifly_splashAdDidSkip:;视频播放完毕和点击跳转不等于倒计时关闭。启动流程应分别处理超时、失败、跳过与关闭,避免仅等待某一个回调而阻塞进入首页。

页面状态与主线程要求见生命周期与排错。