信息流/详情页插入/视频贴片/沉浸式视频流广告
简介
基本信息
信息流广告/详情页插入广告/视频贴片/沉浸式视频流广告,都可使用优量汇提供的接入文档进行广告接入
权限等级:开放
适用场景:优量汇为您提供了多种的广告模板样式,在新建广告位时支持只出图文广告或只出视频广告,也支持图文和视频广告混出。为保证广告位填充率,建议尽量选择图文和视频广告混出。如样式满足您的诉求,您可直接使用展示
分类:广告具体布局,可参考下方图片:
上图下文 | 上文下图 | 双图双文 | 三小图双文 |
---|---|---|---|
左图右文 | 左文右图 | 横版纯图片 | 竖版纯图片 |
---|---|---|---|
单图单文(文字浮层) | 上文下图(文字浮层) | 上图下文(文字浮层) | 沉浸式视频流 |
---|---|---|---|
自定义模板调参标准如下:
左文右图/ 左图右文 |
上图下文/ 上文下图 |
双图双文 | 纯图片 | |
---|---|---|---|---|
图片(广告元素) | 300>图片宽度>30 300>图片高度>30 |
横图:宽高比在40%-79%之间(高/宽) | 横图:宽高比在40%-79%之间(高/宽) | 横图:宽高比在40%-79%之间(高/宽) |
标题(广告元素) | 颜色、大小(>0) 上下左右边距(>0) |
颜色、大小(>0) 上下左右边距(>0) |
颜色、大小(>0) 上下左右边距(>0) |
无 |
描述(广告元素) | 颜色、大小(>0) 上下左右边距(>0) |
颜色、大小(>0) 上下左右边距(>0) |
颜色、大小(>0) 上下左右边距(>0) |
无 |
关闭按钮(互动) | 有无 | 有无 | 有无 | |
背景 | 颜色(按照 RGB 标准) | 颜色(按照 RGB 标准) | 颜色(按照 RGB 标准) | 颜色(按照 RGB 标准) |
按钮(互动) | 无 | 无 | 背景颜色、边框颜色、字体颜色、字体大小(>0) | 无 |
注意:以下接入代码示例只适用于上述广告位。误用其他广告位 ID 使用该接口,则会导致无广告返回。
主要API
生命周期事件回调
您可以实现全部或部分GDTNativeExpressAdDelegate,以跟踪点击成功或者平台模板广告请求失败等广告生命周期事件。
@protocol GDTNativeExpressAdDelegete <NSObject>
@optional
- (void)nativeExpressAdSuccessToLoad:views;
- (void)nativeExpressAdFailToLoad: error;
- (void)nativeExpressAdViewRenderSuccess;
- (void)nativeExpressAdViewRenderFail;
- (void)nativeExpressAdViewExposure;
- (void)nativeExpressAdViewClicked;
- (void)nativeExpressAdViewClosed;
- (void)nativeExpressAdViewWillPresentScreen;
- (void)nativeExpressAdViewDidPresentScreen;
- (void)nativeExpressAdViewWillDissmissScreen;
- (void)nativeExpressAdViewDidDissmissScreen;
- (void)nativeExpressAdViewApplicationWillEnterBackground;
- (void)nativeExpressAdView:playerStatusChanged;
- (void)nativeExpressAdViewWillPresentVideoVC;
- (void)nativeExpressAdViewDidPresentVideoVC;
- (void)nativeExpressAdViewWillDismissVideoVC;
- (void)nativeExpressAdViewDidDismissVideoVC;
@end
在实现上述事件回调之前,请务必先设置delegate:
Objective-C
self.nativeExpressAd.delegate = self;
Swift
nativeExpressAd.delegate = self
回调函数列表
回调函数名 | 回调函数含义 |
---|---|
nativeExpressAdSuccessToLoad:views | 拉取平台模板广告成功 |
nativeExpressAdFailToLoad:error | 拉取平台模板广告失败 |
nativeExpressAdViewRenderSuccess | 平台模板广告渲染成功 |
nativeExpressAdViewRenderFail | 平台模板广告渲染失败 |
nativeExpressAdViewExposure | 平台模板广告曝光回调 |
nativeExpressAdViewClicked | 平台模板广告点击回调 |
nativeExpressAdViewClosed | 平台模板广告被关闭 |
nativeExpressAdViewWillPresentScreen | 点击平台模板广告,即将弹出全屏广告页 |
nativeExpressAdViewDidPresentScreen | 点击平台模板广告,弹出全屏广告页 |
nativeExpressAdViewWillDissmissScreen | 全屏广告页将要关闭 |
nativeExpressAdViewDidDissmissScreen | 全屏广告页已经关闭 |
nativeExpressAdViewApplicationWillEnterBackground | 当点击应用下载或者广告调用系统程序打开时调用 |
nativeExpressAdView:playerStatusChanged | 平台模板视频广告 player 播放状态更新回调 |
nativeExpressAdViewWillPresentVideoVC | 平台视频模板详情页将要展示 |
nativeExpressAdViewDidPresentVideoVC | 平台视频模板详情页已经展示 |
nativeExpressAdViewWillDismissVideoVC | 平台视频模板详情页将要消失 |
nativeExpressAdViewDidDismissVideoVC | 平台视频模板详情页已经消失 |
其中,视频播放过程中,会有如下几种状态
枚举变量 | 枚举含义 |
---|---|
GDTMediaPlayerStatusInitial | 初始状态 |
GDTMediaPlayerStatusLoading | 加载中 |
GDTMediaPlayerStatusStarted | 开始播放 |
GDTMediaPlayerStatusPaused | 用户行为导致暂停 |
GDTMediaPlayerStatusStoped | 播放停止 |
GDTMediaPlayerStatusError | 播放出错 |
接入代码示例
加载并显示平台模板广告
请勿使用平台模板2.0广告位调用平台模板的接口,否则不会返回广告!!!
1.在您的试图控制器中导入头文件,声明您会实现GDTNativeExpressAdDelegate协议:
Objective-C
#import "GDTNativeExpressAd.h"
#import "GDTNativeExpressAdView.h"
@interface NativeExpressAdViewController : UIViewController <GDTNativeExpressAdDelegete>
@property (nonatomic, strong) NSArray *expressAdViews;
@property (nonatomic, strong) GDTNativeExpressAd *nativeExpressAd;
Swift
UIViewController,UITableViewDelegate,UITableViewDataSource,GDTNativeExpressAdDelegete {
private var expressAdViews:Array<GDTNativeExpressAdView>!
private var nativeExpressAd:GDTNativeExpressAd!
...
}
2.在试图控制器的ViewDidLoad中的实现文件中初始化并加载广告数据。如果您的广告是视频和图文混出类型,则您可以在这里定义视频播放器的属性:
Objective-C
- (void)viewDidLoad
{
[super viewDidLoad];
// 支持视频广告的 PlacementId 会混出视频与图片广告
self.nativeExpressAd = [[GDTNativeExpressAd alloc] initWithPlacementId:@"YOUR_PLACEMENT_ID" adSize:CGSizeMake(self.widthSlider.value, self.heightSlider.value)];
self.nativeExpressAd.delegate = self;
// 配置视频播放属性
self.nativeExpressAd.maxVideoDuration = (NSInteger)self.maxVideoDurationSlider.value; // 如果需要设置视频最大时长,可以通过这个参数来进行设置
self.nativeExpressAd.videoAutoPlayOnWWAN = self.videoAutoPlaySwitch.on;
self.nativeExpressAd.videoMuted = self.videoMutedSwitch.on;
[self.nativeExpressAd loadAd:(int)self.adCountSlider.value];
}
Swift
override func viewDidLoad() {
super.viewDidLoad()
nativeExpressAd = GDTNativeExpressAd.init(placementId: YOUR_PLACEMENT_ID, adSize: CGSize(width: Int(widthSlider.value), height: Int(heightSlider.value)))
nativeExpressAd.delegate = self
nativeExpressAd.videoAutoPlayOnWWAN = videoAutoPlaySwitch.isOn
nativeExpressAd.videoMuted = videoMutedSwitch.isOn
nativeExpressAd.load(Int(adCountSlider.value))
}
3.将YOUR_PLACEMENT_ID替换成你自己的PLACEMENTID。
4.实现获取广告成功的回调,在回调里做数据处理,并且为平台模板广告的展现做准备。这里以展示在TableView中为例。
Objective-C
- (void)nativeExpressAdSuccessToLoad:(GDTNativeExpressAd
*)nativeExpressAd views:(NSArray<__kindof
GDTNativeExpressAdView *> *)views
{
self.expressAdViews = [NSArray arrayWithArray:views];
if (self.expressAdViews.count) {
[self.expressAdViews enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
GDTNativeExpressAdView *expressView = (GDTNativeExpressAdView *)obj;
expressView.controller = self;
if ([expressView isAdValid]) {
[expressView render];
}
}];
}
// 广告位 render 后刷新 tableView
[self.tableView reloadData];
}
Swift
func nativeExpressAdSuccess(toLoad nativeExpressAd: GDTNativeExpressAd!, views: [GDTNativeExpressAdView]!) {
expressAdViews = Array.init(views)
if expressAdViews.count > 0 {
for obj in expressAdViews {
let expressView:GDTNativeExpressAdView = obj
expressView.controller = self
if expressView.adValid {
expressView.render()
}
}
}
tableView.reloadData()
}
- 在您要展示的视图中对获得的平台模板广告进行展示。这里以展示在TableView中为例。这里推荐开发者使用SDK给出的推荐尺寸。完整参考代码如下:
Objective-C
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row % 2 == 0) {
// cell 高度取 adView render 后的值,这里的值是SDK算出来的
UIView *view = [self.expressAdViews objectAtIndex:indexPath.row / 2];
return view.bounds.size.height;
} else {
return 44;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;
if (indexPath.row % 2 == 0) {
cell = [self.tableView dequeueReusableCellWithIdentifier:@"nativeexpresscell" forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UIView *subView = (UIView *)[cell.contentView viewWithTag:1000];
if ([subView superview]) {
[subView removeFromSuperview];
}
UIView *view = [self.expressAdViews objectAtIndex:indexPath.row / 2];
view.tag = 1000;
[cell.contentView addSubview:view];
} else {
cell = [self.tableView dequeueReusableCellWithIdentifier:@"splitnativeexpresscell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor grayColor];
}
return cell;
}
Swift
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row % 2 == 0 {
let view: UIView = expressAdViews[indexPath.row/2]
return view.bounds.size.height
}
return 44
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell:UITableViewCell!
if indexPath.row % 2 == 0 {
cell = tableView.dequeueReusableCell(withIdentifier: "nativeexpresscell", for: indexPath)
cell.selectionStyle = .none
let subView: UIView? = cell!.contentView.viewWithTag(1000)
if (subView?.superview != nil) {
subView?.removeFromSuperview()
}
let view: UIView = expressAdViews[indexPath.row / 2]
view.tag = 1000
cell.contentView.addSubview(view)
} else {
cell = tableView.dequeueReusableCell(withIdentifier: "splitnativeexpresscell", for: indexPath)
cell.backgroundColor = .gray
}
return cell
}
在不展示平台模板广告时执行调试
在您的ViewController里实现如下回调,处理平台模板广告加载失败的问题:
Objective-C
- (void)nativeExpressAdRenderFail:(GDTNativeExpressAdView
*)nativeExpressAdView
{
NSLog(@"Express Ad Render Fail");
}
- (void)nativeExpressAdFailToLoad:(GDTNativeExpressAd *)nativeExpressAd error:(NSError *)error
{
NSLog(@"Express Ad Load Fail : %@",error);
}
Swift
func nativeExpressAdFail(toLoad nativeExpressAd: GDTNativeExpressAd!, error: Error!) {
print("Express Ad Load Fail : \(error)")
}
func nativeExpressAdViewRenderFail(_ nativeExpressAdView: GDTNativeExpressAdView!) {
print(#function)
}
多阶底价能力
接入多阶底价能力分2步:
step1:
找优量汇运营同学开通广告位的多阶底价权限并提供底价配置信息;
step2:
通过GDTNativeExpressAdView类的eCPMLevel属性查看当前广告对应的底价层级。
/**
返回广告的eCPM等级
@return 成功返回一个包含数字的string,比如@"2"表示底价等级为2,@""或nil表示无权限或后台异常
*/
@property (nonatomic, readonly) NSString *eCPMLevel;
实时竞价能力
接入实时竞价能力分2步:
step1:
找优量汇运营同学开通广告位的实时竞价权限;
step2:
当广告拉取成功后,通过GDTNativeExpressAdView类的eCPM属性获取本条广告实时的eCPM价格,单位是分。
/**
返回广告的eCPM,单位:分
@return 成功返回一个大于等于0的值,-1表示无权限或后台出现异常
*/
- (NSInteger)eCPM;
说明:
当无权限调用该接口时,SDK会返回错误码-1。