Help Center/Details/

New - iOS自渲染贴片广告

简介

贴片广告: 贴片广告是一种视频广告形式,开发者可以将广告位设置在其APP内的视频播放前/播放中/播放结束后。贴片广告的时长可以设置成固定时长,如5s/15s等;也可以不限制固定时长,在5-60s范围内由系统返回收益最高的广告,帮助开发者实现收益最大化。贴片广告目前仅支持自渲染,可以使用穿山甲默认播放器,也可以申请使用开发者自己的播放器。

支持的广告尺寸:横版视频 (宽高比:1.78)

权限

自渲染贴片广告:默认需要申请权限
SDK版本要求: 3400及以上

自渲染贴片广告请求方法

使用说明

自渲贴片广告使用BUNativeAdsManager对象调用loadAdDataWithCount: 请求广告,通过设置BUNativeAdsManagerDelegate、BUVideoAdViewDelegate、BUNativeAdDelegate代理,获取广告相关素材、以及点击等回调。

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

BUNativeAdsManager

请求广告时需要传入广告位对象,广告位对象创建时必须传入广告位ID及广告基本配置BUAdSlot

必传参数:

字段定义 字段名称 字段类型 备注
BUAdSlot / / 基本配置
slotID 代码位 代码位ID

使用BUAdSlot创建广告基本信息,使用BUNativeAdsManager调用loadAdDataWithCount: 请求广告

BUNativeAdsManager *nad = [BUNativeAdsManager new];
BUAdSlot *slot = [[BUAdSlot alloc] init];
slot.ID = self.viewModel.slotID;
slot.AdType = BUAdSlotAdTypePaster;
slot.position = BUAdSlotPositionTop;
slot.imgSize = [BUSize sizeBy:BUProposalSize_Feed690_388];
nad.adslot = slot;
nad.delegate = self;
[nad loadAdDataWithCount:3];

注意:loadAdDataWithCount请求数建议一次请求不超过3个

接收广告加载结果

回调方法 注释
nativeAdsManagerSuccessToLoad: nativeAds: 加载成功回调;在此回调中进行相关的数据插入处理
nativeAdsManager:didFailWithError: 返回的错误码(error)表示广告加载失败的原因,所有错误码详情请见链接。Link

BUNativeAdDelegate回调说明

回调方法 注释
nativeAdDidLoad: 广告物料加载成功
nativeAd:didFailWithError: 返回的错误码(error)表示广告加载失败的原因,所有错误码详情请见链接。Link
nativeAdDidBecomeVisible: 广告显示回调
nativeAdDidCloseOtherController: interactionType: 此回调在广告跳转到其他控制器时,该控制器被关闭时调用interactionType:此参数可区分是打开的appstore/网页/视频广告详情页面
nativeAdDidClick:withView: 除视频区域外,点击会响应此回调方法
nativeAd:dislikeWithReason: dislike按钮点击回调,需要在此回调方法中进行响应的数据处理

自定义播放器

媒体可能会希望使用自己工程里的播放器,对视频播放更多细节进行控制。当广告物料BUMaterial中的allowCustomVideoPlayerYES时,允许媒体通过BUMaterialMeta提供的 videoUrl进行视频播放,同时媒体需要使用BUVideoAdReportor协议方法进行埋点上报。

自定义播放器埋点上报

媒体需要使用BUNativeAdRelatedView中的videoAdReportor进行视频播放埋点的上报。

1. 创建埋点上报工具对象
BUNativeAdRelatedView *nativeAdRelatedView = [[BUNativeAdRelatedView alloc] init];
/// @param nativeAd 广告物料
[nativeAdRelatedView refreshData:nativeAd];
2. 埋点上报

埋点的上报由BUVideoAdReportor协议提供接口,根据不同的播放状态进行上报。

/// the reportor of video ad in feed, auto created by system if video ads in feed is customd.
@protocol BUVideoAdReportor <NSObject data-tomark-pass >

@required

/// report did start play video
/// @param duration total duration of video, unit ms
- (void)didStartPlayVideoWithVideoDuration:(NSTimeInterval)duration;

/// report did start play video auto, designed by developer
/// @param duration total duration of video, unit ms
- (void)didAutoStartPlayWithVideoDuration:(NSTimeInterval)duration;

/// report did play to the end of video
- (void)didFinishVideo;

/// report did pause video
/// @param duration duration of video that user watched
- (void)didPauseVideoWithCurrentDuration:(NSTimeInterval)duration;

/// report did resume video from paused
/// @param duration duration of video that user watched
- (void)didResumeVideoWithCurrentDuration:(NSTimeInterval)duration;

/// report did break video playing, maybe change another video or disappear from screen and so on
/// @param duration duration of video that user watched
- (void)didBreakVideoWithCurrentDuration:(NSTimeInterval)duration;

/// report did click video view, auto implement by Pangle, developers need not call this method
/// @param duration duration of video that user watched
- (void)didClickVideoViewWithCurrentDuration:(NSTimeInterval)duration;

/// report sth. wrong with playing
/// @param error error
- (void)didPlayFailedWithError:(NSError *)error;

@end

在自定义播放状态改变时进行埋点上报

- (void)reportPangleWithStatus:(BUDVideoViewStatus)status {
    [super reportPangleWithStatus:status];
    if (self.currentAdIndex >= self.currentAds.count) {
        return;
    }
    
    BUDPasterContentView *currentAdView  = self.adViews[self.currentAdIndex];
    id <BUVideoAdReportor> reportor = currentAdView.videoAdReportor;
    BUDVideoView *view = currentAdView.customVideoView;
    switch (status) {
        case BUDVideoViewStatusPlaying: {
            NSTimeInterval duration = view.durationOfCurrentItem;
            [reportor didStartPlayVideoWithVideoDuration:duration];
        }
            break;
        case BUDVideoViewStatusPaused: {
            NSTimeInterval duration = view.watchedDurationOfCurrentItem;
            [reportor didPauseVideoWithCurrentDuration:duration];
        }
            break;
        case BUDVideoViewStatusStopped: {
            [reportor didFinishVideo];
        }
            break;
        case BUDVideoViewStatusResumed: {
            NSTimeInterval duration = view.watchedDurationOfCurrentItem;
            [reportor didResumeVideoWithCurrentDuration:duration];
        }
            break;
        case BUDVideoViewStatusAbort: {
            NSTimeInterval duration = view.watchedDurationOfCurrentItem;
            [reportor didBreakVideoWithCurrentDuration:duration];
        }
        default:
            break;
    }
}
事件说明:
事件名称 上报时机 含义
didStartPlayVideoWithVideoDuration: 视频开始时上报 视频开始播放上报此事件,duration为视频时长
didPauseVideoWithCurrentDuration: 视频暂停时上报 视频暂停是上报此事件,duration为视频暂停时视频已播放的时长
didFinishVideo 视频播放完成时上报 视频播放完成时上报此事件
didResumeVideoWithCurrentDuration: 视频复播时上报 视频复播时上报此事件,duration为视频复播时视频已播放的时长
didBreakVideoWithCurrentDuration: 视频播放异常时上报 视频播放异常时上报,duration为出现异常时视频已播放的时长

资源

详细接入可参照Demo中的BUDCustomVideoPlayerViewController类,广告加载请求部分可参照loadAdData方法

SDK播放器接入

媒体使用SDK播放器,需要使用BUNativeAdRelatedView中的videoAdView添加到自渲染的广告视图中,此时视频播放以及埋点有SDK控制。

BUNativeAdRelatedView *nativeAdRelatedView = [[BUNativeAdRelatedView alloc] init];
/// @param nativeAd 广告物料
[nativeAdRelatedView refreshData:nativeAd];
[self addSubview:nativeAdRelatedView.videoAdView];

详细接入可参照Demo中的BUDPasterContentView类,BUNativeAdRelatedView内容需要使用refreshData:来刷新

贴片广告的切换

多个贴片广告媒体可以根据需求进行切换或是顺序调整,每个贴片广告的时长可以通过BUMaterialMeta的属性videoDuration获取。

贴片广告点击事件

媒体自渲染的贴片广告需要使用registerContainer:withClickableViews:clickableViews注册绑定点击的View

BUNativeAd *ad = self.currentAds[self.currentAdIndex];
BUDPasterContentView *currentAdView = self.adViews[self.currentAdIndex];
...
// 注册点击事件
[ad registerContainer:currentAdView withClickableViews:@[currentAdView.creativeBtn]];
ad.rootViewController = self;
// 刷新UI
[currentAdView refreshUIWithModel:ad];
点击事件回调:
回调方法 注释 备注
- (void)videoAdViewDidClick: SDK播放器点击事件 仅适用SDK播放器
- (void)videoAdViewDidCloseOtherController: 此回调在广告跳转到其他控制器时,该控制器被关闭时调用interactionType:此参数可区分是打开的appstore/网页/视频广告详情页面。用于SDK播放器点击关闭控制器的回调。 仅适用于SDK播放器
- (void)nativeAdDidClick:withView: 整个广告区域点击事件,使用SDK播放器的话,表示非视频区域点击事件
- (void)nativeAdDidCloseOtherController:interactionType: 此回调在广告跳转到其他控制器时,该控制器被关闭时调用interactionType:此参数可区分是打开的appstore/网页/视频广告详情页面
- (void)nativeAd:dislikeWithReason: 使用BUNativeAdRelatedView中提供的关闭按钮,在点击关闭按钮的回调

详细可参照Demo中的BUDPasterBaseViewController

注意事项

1、在物料加载成功方法里获取相关广告信息赋值后,需调用 registerContainer:withClickableViews:clickableViews注册绑定点击的View并刷新数据源refreshData:。
2、每次获取物料信息后需要刷新调用refreshData:方法

Did the content solve your problem?
Contact us