Skip to main content

插播广告

MediaVideo Demo地址#

一、集成建议#

  • V9.3.0.1开始支持Google Ad Manager 插播广告,插播广告也叫in stream video ad、贴片广告、pre-roll,一般出现在视频播放前。
  • 广告会在位于应用内容视频播放器顶部的单独视频播放器中播放,广告样式如下图:
  • 加载时需传入展示广告的容器

注意事项#

  • 不建议在oneLayerLoadFailedonAdFailed回调中执行广告加载的方法。对广告平台方来说,短时间内多次请求,不容易得到填充,同时会造成多次无效请求,也可能会导致应用卡顿;如果产品逻辑要在这里发起请求,开发者需要控制时间间隔和次数,比如分别在10S、30S、60S后发起请求。
  • 不建议在onAdLoaded回调中直接执行广告展示的方法,这可能导致用户体验不佳,SDK有广告会过期自动补充功能,加载成功后会回调onAdLoaded。开发者无法精准控制广告展示的时机。可配合产品逻辑在收到onAdLoaded回调后,判断isReady()是否有可用广告,再展示广告。
  • TPMediaVideo需要在主线程loadAd()和Start()
  • 插播广告在程序切换到后台时会暂停播放,如需切换前台继续播放广告,可在生命周期onPause()和onResume()中分别调用tpCustomMediaVideoAd.pause()和tpCustomMediaVideoAd.resume()方法控制

二、加载广告#

  • 创建广告对象TPMediaVideo,并传入广告位ID
  • 设置广告监听
  • 加载广告
    • 传入展示广告所需容器
    • 适应IMA的VideoAdPlayer接口所创建的VideoAdPlayerAdapter类,VideoAdPlayerAdapter具体实现请参考Demo或者IMA文档
private RelativeLayout mContainer;
private VideoAdPlayerAdapter videoAdPlayerAdpter;
...
TPMediaVideo tpMediaVideo = new TPMediaVideo(context,"在TP平台创建的广告位ID");
tpMediaVideo.setAdListener(new MediaVideoAdListener());
// 推荐容器使用RelativeLayout,使广告videoview居中显示
adContainer = new RelativeLayout(context);
// 容器和VideoAdPlayerAdapter为必传参数
tpMediaVideo.loadAd(mContainer,videoAdPlayerAdpter);

三、展示广告#

  • 广告加载成功后,获取TP缓存好的广告,调用start()方法展示广告
  • 开发者可以通过监听onAdLoaded()回调或者调用isReady()检查广告是否已经加载成功
  • start()中参数为广告场景ID。具体使用,请看广告场景的调用时机和用途说明。不用直接传null。
tpMediaVideo.setAdListener(new MediaVideoAdListener() {
@Override
public void onAdLoaded(TPAdInfo tpAdInfo) {
// 广告加载成功
ShowMeidaVideo();
}
});
...
private void ShowMeidaVideo() {
// 获取广告缓存
TPCustomMediaVideoAd tpCustomMediaVideoAd = tpMediaVideo.getVideoAd();
// 展示
tpCustomMediaVideoAd.start(null);
}

四、回调监听#

tpMediaVideo.setAdListener(new MediaVideoAdListener() {
@Override
public void onAdLoaded(TPAdInfo tpAdInfo) {
// 一次loadAd后,广告加载成功
}
@Override
public void onAdFailed(TPAdError error) {
// 一次loadAd后,广告加载失败
}
@Override
public void onAdClicked(TPAdInfo tpAdInfo) {
// 跳转按钮被点击
}
@Override
public void onAdResume(TPAdInfo tpAdInfo) {
// 暂停后,广告继续播放
}
@Override
public void onAdPause(TPAdInfo tpAdInfo) {
// 展示后,广告暂停播放
}
@Override
public void onAdVideoStart(TPAdInfo tpAdInfo) {
// 广告开始播放
}
@Override
public void onAdVideoEnd(TPAdInfo tpAdInfo) {
// 广告播放结束
}
@Override
public void onAdVideoError(TPAdInfo tpAdInfo, TPAdError error) {
// 广告播放失败
}
@Override
public void onAdSkiped(TPAdInfo tpAdInfo) {
// 可跳转的广告,用户点击跳过
}
@Override
public void onAdTapped(TPAdInfo tpAdInfo) {
// 视频区域被点击
}
@Override
public void onAdProgress(TPAdInfo tpAdInfo, float progress, double totaltime) {
// 当前播放进度 progress
// 广告总时长 totaltime
}
});
  • V9.7.10.1新增回调监听
// 获取广告缓存对象,通过该对象设置监听,callback中可以拿到插播所有的AdEvent事件
tpCustomMediaVideoAd.setIMAEventListener(new TPMediaVideoAdapter.OnIMAEventListener() {
@Override
public void onEvent(Object adEvent) {
Log.i(TAG,"AdEvent = "+((AdEvent)adEvent).getType());
}
});

五、其他API#

5.1 TPMediaVideo#

API说明
isReady()检查是否有可用广告。返回true,表示有可用广告。
setCustomParams(Map<String, Object> map)自定义key-value。需要在loadAd前面调用。
onDestroy()销毁,释放TPMediaVideod相关对象。

5.2 TPCustomMediaVideoAd#

API说明
pause()播放后暂停
resume()暂停后继续播放广告
setCustomShowData(Map<String,Object> customShowData)自定义数据,展示广告前面调用。
getCustomNetworkObj()获取IMA广告对象AdsManager。AdsManager adsManager = (AdsManager)tpCustomMediaVideoAd.getCustomNetworkObj();
onDestroy()销毁,释放IMA相关对象。

5.3 隐藏UI倒计时#

  • 默认显示UI倒计时
Map<String, Object> mLocalExtras = new HashMap<>();
mLocalExtras.put("ima_ui_countdown",2); // 1 显示;其他 隐藏
tpMediaVideo.setCustomParams(mLocalExtras);
// loadAd前面设置
tpMediaVideo.loadAd(mContainer);

5.4 自定义设置本地语言#

Map<String, Object> mLocalExtras = new HashMap<>();
mLocalExtras.put("ima_setting_language","en"); // 举例设置 英语
tpMediaVideo.setCustomParams(mLocalExtras);
// loadAd前面设置
tpMediaVideo.loadAd(mContainer);