Bidding Android iOS 快应用 SDK H5 SDK Media API 常见问题

信息流/详情页插入/视频贴片/沉浸式视频流广告

简介

基本信息

信息流广告/详情页插入广告/视频贴片/沉浸式视频流广告,都可使用优量汇提供的接入文档进行广告接入

权限等级:开放

适用场景:优量汇为您提供了多种的广告模板样式,在新建广告位时支持只出图文广告或只出视频广告,也支持图文和视频广告混出。为保证广告位填充率,建议尽量选择图文和视频广告混出。如样式满足您的诉求,您可直接使用展示

分类:广告具体布局,可参考下方图片:

上图下文 上文下图 双图双文 三小图双文
左图右文 左文右图 横版纯图片 竖版纯图片
单图单文(文字浮层) 上文下图(文字浮层) 上图下文(文字浮层) 沉浸式视频流

自定义模板调参标准如下:

左文右图/
左图右文
上图下文/
上文下图
双图双文 纯图片
图片(广告元素) 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;
@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 播放状态更新回调

其中,视频播放过程中,会有如下几种状态

枚举变量 枚举含义
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()
}
  1. 在您要展示的视图中对获得的平台模板广告进行展示。这里以展示在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。

 文档反馈

腾讯公司 版权所有