Help Center/Details/

开屏广告

简介

开屏广告主要是 APP 启动时展示的全屏广告视图,开发只要按照接入标准就能够展示设计好的视图。展示完毕后自动关闭并进入应用的主界面。

支持的广告尺寸:开屏广告的尺寸为开发者请求广告时设置的尺寸,建议设置的请求尺寸传入与展示区域大小保持一致,避免素材变形。

权限

SDK渲染开屏广告: 默认开放
模板渲染开屏广告: 需要申请

SDK渲染开屏广告

使用说明

SDK渲染开屏广告使用BUSplashAdView对象调用loadAdData方法请求广告,使用addSubview添加广告进行展示,通过设置BUSplashAdDelegate代理,获取广告、展示、点击、关闭、跳转等回调。

创建广告位对象、请求广告、展示广告

BUSplashAdView

请求广告时需要传入广告位对象,广告位对象创建时必须传入广告位ID

必传参数:
字段定义 字段名称 字段类型 备注
SlotID 代码位 NSString 广告位id
frame 尺寸 CGRect 广告请求尺寸
可选参数:
字段定义 字段名称 字段类型 备注
hideSkipButton 是否隐藏跳过按钮 BOOL类型 是否自定义跳过按钮 BOOL类型 默认为NO
tolerateTimeout 超时时间 NSTimeInterval 默认超时时间为3.5s
needSplashZoomOutAd 是否设置点睛广告 BOOL 是否需要点睛广告 默认为NO
注:3200-3500版本有效, 3600以及以上版本无效

使用BUSplashAdView创建对象,使用BUSplashAdView调用loadAdData请求广告

CGRect frame = [UIScreen mainScreen].bounds;
self.splashAdView = [[BUSplashAdView alloc] initWithSlotID:normal_splash_ID frame:frame];
// tolerateTimeout = CGFLOAT_MAX , The conversion time to milliseconds will be equal to 0
self.splashAdView.tolerateTimeout = 10;
self.splashAdView.delegate = self;
//optional
self.splashAdView.needSplashZoomOutAd = YES;
UIWindow *keyWindow = self.window;
self.startTime = CACurrentMediaTime();
[self.splashAdView loadAdData];
[keyWindow.rootViewController.view addSubview:self.splashAdView];
self.splashAdView.rootViewController = keyWindow.rootViewController;

接收广告加载结果

BUSplashAdDelegate
回调方法 注释
splashAd: didFailWithError: 返回的错误码(error)表示广告加载失败的原因,所有错误码详情请见链接Link
splashAdDidLoad 广告加载成功回调
BUSplashAdDelegate回调说明
回调方法 注释
splashAdDidLoad: SDK渲染开屏广告加载成功回调
splashAd: didFailWithError: 返回的错误码(error)表示广告加载失败的原因,所有错误码详情请见链接Link
splashAdWillVisible: SDK渲染开屏广告即将展示
splashAdDidClick: SDK渲染开屏广告点击回调
splashAdDidClose: SDK渲染开屏广告关闭回调,当用户点击广告时会直接触发此回调,建议在此回调方法中直接进行广告对象的移除操作
splashAdWillClose: SDK渲染开屏广告即将关闭回调
splashAdDidCloseOtherController:(BUSplashAdView *)splashAd interactionType: 此回调在广告跳转到其他控制器时,该控制器被关闭时调用。interactionType:此参数可区分是打开的appstore/网页/视频广告详情页面
splashAdDidClickSkip: 用户点击跳过按钮时会触发此回调,可在此回调方法中处理用户点击跳转后的相关逻辑
splashAdCountdownToZero: 倒计时为0时会触发此回调,如果客户端使用了此回调方法,建议在此回调方法中进行广告的移除操作

通过设置BUSplashAdDelegate代理,获取广告的点击、关闭、跳转等回调。其他代理方法详见AppDelegate类/BUDSplashViewController#pragma mark - BUSplashAdView部分

注意事项

  1. 开屏广告的请求最好放在didFinishLaunchingWithOptions回调方法中进行相关的处理,避免任何形式的缓存处理,开屏广告的请求统一放在前台进行相关的处理
  2. 避免出现展示广告的window被提前释放或取错window的情况
  3. splashAd: didFailWithError: 回调方法中做广告对象移除操作,避免广告请求失败时导致的一些特定场景
  4. 确认设置Allow Arbitrary Loads权限,避免某些广告资源无法加载情景的发生
  5. 开屏广告的超时时间建议设置为3.5s以上,确保和自身项目的请求超时时间不冲突,避免出现请求失败的场景
  6. 开屏广告返回的是一个view,客户端直接展示view即可。如果要在底部添加自身logo,需要缩小的开屏广告的展示区域,此时请求的时候宽和高填写裁剪后宽和高即可,即请求尺寸为屏幕宽*(屏幕高-logo高)
  7. splashAdDidClicksplashAdDidClickSkipsplashAd:didFailWithErrorsplashAdDidCloseOtherController: interactionTypesplashAdCountdownToZero回调方法中进行广告的移除操作,避免异常情况的发生: [self.splashView removeSplashView];

资源

详细接入可参照demo中的AppDelegate类/BUDSplashViewController类,广告加载展示请求部分可参照AppDelegate类中的addSplashAD方法/BUDSplashViewController类中buildupDefaultSplashView方法

模版渲染开屏广告

使用说明

模版渲染开屏广告使用BUNativeExpressSplashView对象调用loadAdData方法请求广告,使用addSubview添加广告对象进行广告的展示,通过设置BUNativeExpressSplashViewDelegate代理,获取广告、展示、点击、关闭、跳转等回调。

创建广告位对象、请求广告、展示广告

BUNativeExpressSplashView

请求广告时需要传入广告位对象,广告位对象创建时必须传入广告位ID

必传参数:
字段定义 字段名称 字段类型 备注
slotID 代码位 NSString 代码位ID
adSize 广告尺寸 CGSize 广告请求尺寸
可选参数:
字段定义 字段名称 字段类型 备注
hideSkipButton 是否自定义跳过按钮 BOOL 是否自定义跳过按扭 默认为NO
tolerateTimeout 超时时间 NSTimeInterval 默认超时时间为3.5s

使用BUNativeExpressSplashView创建对象,使用BUNativeExpressSplashView调用loadAdData请求广告,使用addSubview添加广告对象来进行广告的展示

self.splashView = [[BUNativeExpressSplashView alloc] initWithSlotID:self.viewModel.slotID adSize:self.splashFrame.size rootViewController:self];
    self.splashView.delegate = self;
    self.splashView.tolerateTimeout = 10;
    /***
    广告加载成功的时候,会立即渲染WKWebView。
    如果想预加载的话,建议一次最多预加载三个广告,如果超过3个会很大概率导致WKWebview渲染失败。
    */
    [self.splashView loadAdData];
    [self.navigationController.view addSubview:self.splashView];

自定义跳过按钮样式

BUNativeExpressSplashView对象的hideSkipButton属性设置为YES即可,客户端自行实现跳过按钮的样式及相关跳转逻辑即可

接收广告加载结果

BUNativeExpressSplashViewDelegate

回调方法 注释
nativeExpressSplashView: didFailWithError: 返回的错误码(error)表示广告加载失败的原因,所有错误码详情请见链接。Link
nativeExpressSplashViewDidLoad 广告加载成功回调
nativeExpressSplashViewRenderFail: error: 渲染失败,网络原因或者硬件原因导致渲染失败,可以更换手机或者网络环境测试。建议升级到穿山甲平台最新版本SDK
nativeExpressSplashViewRenderSuccess: 渲染成功回调

BUNativeExpressSplashViewDelegate回调说明

回调方法 注释
nativeExpressSplashViewDidLoad: 广告物料加载成功回调
nativeExpressSplashView: didFailWithError: 返回的错误码(error)表示广告加载失败的原因,所有错误码详情请见链接。Link
nativeExpressSplashViewRenderSuccess: 渲染成功回调
nativeExpressSplashViewRenderFail: error: 渲染失败,网络原因或者硬件原因导致渲染失败,可以更换手机或者网络环境测试。建议升级到穿山甲最新版本
SDKnativeExpressSplashViewWillVisible: 模版开屏广告即将展示
nativeExpressSplashViewDidClick: 点击回调
nativeExpressSplashViewDidClickSkip: 点击跳过回调
nativeExpressSplashViewCountdownToZero: 倒计时为0时会触发此回调,如果客户端使用了此回调方法,建议在此回调方法中进行广告的移除操作,并将广告对象置为nil
nativeExpressSplashViewDidClose: 广告关闭回调,当用户点击广告时会直接触发此回调,建议在此回调方法中直接进行广告对象的移除操作,并将广告对象置为nil
nativeExpressSplashViewFinishPlayDidPlayFinish:didFailWithError: 广告播放完成会触发此回调
nativeExpressSplashViewDidCloseOtherController: interactionType: 此回调在广告跳转到其他控制器时,该控制器被关闭时调用interactionType:此参数可区分是打开的appstore/网页/视频广告详情页面

通过设置BUNativeExpressSplashViewDelegate代理,获取广告的点击、关闭、跳转等回调。其他代理方法可参见BUDExpressSplashViewController#pragma mark - SplashAdView部分

注意事项

  1. 开屏广告的请求最好放在didFinishLaunchingWithOptions回调方法中进行相关的处理,避免任何形式的缓存处理,开屏广告的请求统一放在前台进行相关的处理
  2. 避免出现展示广告的window提前释放或取错window的情况
  3. nativeExpressSplashView: didFailWithError:回调方法中做广告对象移除操作,避免广告请求失败时导致的一些特定场景,切记在remove广告视图前调用removeSplashView方法,否则可能出现倒计时有问题或者视频播放有问题,并将广告对象做置空处理
  4. 确认设置了Allow Arbitrary Loads权限,避免某些广告资源无法加载情景的发生
  5. 开屏广告的超时时间默认设置为3.5s,确保和自身项目的请求超时时间不冲突,避免出现请求失败的场景
  6. 开屏广告返回的是一个view,客户端直接展示view即可。如果要在底部添加自身logo,需要缩小的开屏广告的展示区域,此时请求的时候宽和高填写裁剪后宽和高即可,即请求尺寸为屏幕宽*(屏幕高-logo高)
  7. splashAdDidClicksplashAdDidClickSkipsplashAd:didFailWithErrorsplashAdDidCloseOtherController: interactionTypesplashAdCountdownToZero回调方法中进行广告的移除操作,避免异常情况的发生。开发者需要先调用穿山甲提供的removeSplashView方法,再用removeFromSuperview从父试图移除,需要两次移除操作;
  8. 需要在removeFromSuperview前调用removeSplashView方法,否则可能出现倒计时有问题或者视频播放有问题。[self removeSplashAdView];
  9. 如果使用非AppDelegate中的window进行开屏广告的展示,避免提前释放window导致广告无法点击跳转情况的发生
  10. 开屏广告目前暂不支持直接addSubview到window上,否则可能出现点击广告跳转异常场景。
  11. 开屏广告自定跳过按钮在3706之后版本修改为媒体自己处理倒计时,3706之前的版本是SDK处理的倒计时

资源

详细接入可参照Demo中的BUDExpressSplashViewController类,广告加载展示请求部分可参照BUDExpressSplashViewController类中buildupDefaultSplashView方法

创新样式 - 开屏点睛

开屏点睛广告使用方法: 初始化, 增加 needSplashZoomOutAd 设置
若接入了开屏点睛样式,则必须实现以下逻辑

    BUSplashAdView *splashView = [[BUSplashAdView alloc] initWithSlotID:self.viewModel.slotID frame:self.splashFrame];    
    splashView.delegate = self;
    splashView.rootViewController = self;
    splashView.tolerateTimeout = 3;
    //optional 3600版本开始,开发者不需要设置此方法,是否展示点睛样式通过穿山甲平台进行设置。 
    splashView.needSplashZoomOutAd = YES;
    [splashView loadAdData];
    [self.navigationController.view addSubview:splashView];
    self.splashView = splashView;

回调方法的修改, 需要拿到浮窗 view , 调用转场动画
- (void)splashAdDidLoad:(BUSplashAdView *)splashAd {
    [self pbud_logWithSEL:_cmd msg:@""];
    if (splashAd.zoomOutView) {
        // Add this view to your container
        [self.view addSubview:splashAd.zoomOutView];
        splashAd.zoomOutView.rootViewController = self;
        splashAd.zoomOutView.delegate = self;
    }
}


- (void)splashAdDidClick:(BUSplashAdView *)splashAd {
    if (splashAd.zoomOutView) {
        [splashAd.zoomOutView removeFromSuperview];
    }
    [splashAd removeFromSuperview];
    [self pbud_logWithSEL:_cmd msg:@""];
}


- (void)splashAdDidClickSkip:(BUSplashAdView *)splashAd {
    [self handleSplashDimiss:splashAd];
    // 'zoomOutView' is nil, there will be no subsequent operation to completely remove splashAdView and avoid memory leak
    // 'zoomOutView' is not nil,do nothing
    if (!splashAd.zoomOutView) {
        [self removeSplashAdView];
    }
    [self pbud_logWithSEL:_cmd msg:@""];
}


- (void)splashAdCountdownToZero:(BUSplashAdView *)splashAd {
    [self handleSplashDimiss:splashAd];
    // 'zoomOutView' is nil, there will be no subsequent operation to completely remove splashAdView and avoid memory leak
    // 'zoomOutView' is not nil,do nothing
    if (!splashAd.zoomOutView) {
        [self removeSplashAdView];
    }
    [self pbud_logWithSEL:_cmd msg:@""];
}

动画效果可参照 demo 中的实现进行修改
- (void)handleSplashDimiss:(BUSplashAdView *)splashAd {
    if (splashAd.zoomOutView) {
        [[BUDAnimationTool sharedInstance] transitionFromView:splashAd toView:splashAd.zoomOutView];
    } else{
        [splashAd removeFromSuperview];
    }
}
浮窗生命周期的回调可参照 BUSplashZoomOutViewDelegate 文件
Did the content solve your problem?
Contact us