自定义C2SBidding广 告
一、流程说明
TradPlusSDK也支持自定义的C2SBidding广告方便您使用我们服务器的bidding竞价功能。
C2SBidding和普通自定义广告差别在于加载流程。广告展示流程是一致的。
C2SBidding的加载流程如图:
⚠️ 返回给TradPlusSDK的ECPM单位为 美元
二、集成说明
1、创建自定义Adapter
- 创建您在 TradPlus后台定义的自定义类,继承 TradPlusBaseAdapter并重写相关方法
// 以百度激励视频C2S为例,自定义类名 BaiduIntersititalVideoC2SAdapter继承TPRewardAdapter
public class BaiduIntersititalVideoC2SAdapter extends TPRewardAdapter {
...
}
2、实现TradPlusSDK相关调用
- "getC2SBidding",SDK 开始竞价流程,自定义Adapter需要从三方SDK相关接口获取ECPM。
- "isBiddingLoaded",竞价已经结束,成功获取ECPM
- 获取失败,用"onC2SBiddingFailed(String code, String msg)"将错误原因回传给TradPlusSDK
- 获取成功,用"onC2SBiddingResult(map)",将price(美金)put到map中回传给TradPlusSDK
public class BaiduIntersititalVideoC2SAdapter extends TPRewardAdapter {
private OnC2STokenListener onC2STokenListener;
private boolean isBiddingLoaded;
// 第一步:发起C2SBidding请求
@Override
public void getC2SBidding(final Context context, final Map<String, Object> localParams, final Map<String, String> tpParams, final OnC2STokenListener onC2STokenListener) {
this.onC2STokenListener = onC2STokenListener;
loadCustomAd(context, localParams, tpParams);
}
@Override
public void loadCustomAd(Context context, Map<String, Object> userParams, Map<String, String> tpParams) {
// userParams 本地配置参数;tpParams 服务器下发参数
// 获取服务器下发参数
...
// 初始化BaiduSDK
...
// 请求广告
requestAd(context);
}
private void requestAd(Context context) {
// 第三步:竞价成功后的通知TradPlusSDK加载成功
if (onC2STokenListener != null && isBiddingLoaded) {
if (mLoadAdapterListener != null) {
mLoadAdapterListener.loadAdapterLoaded(null);
}
return;
}
// 第二步:根据三方文档获取ECPM
RewardVideoAd mRewardVideoAd = new RewardVideoAd(context, "unitId",
new RewardVideoAd.RewardVideoAdListener() {
@Override
public void onVideoDownloadSuccess() {
Log.i(TAG, "视频缓存成功");
if (onC2STokenListener != null) {
// 根据三方文档,loaded成功后获取ECPM
String ecpmLevel = mRewardVideoAd.getECPMLevel();
if (TextUtils.isEmpty(ecpmLevel)) {
//价格返回空,无意义,通过onC2STokenListener调用失败回调
onC2STokenListener.onC2SBiddingFailed("", "ecpmLevel is Empty");
return;
}
// 成功获取price,通过onC2STokenListener将价格传给TradPlusSDK(美金)
Map<String, Object> hashMap = new HashMap<>();
// key必须是"ecpm",value是double类型
hashMap.put("ecpm", Double.parseDouble(ecpmLevel));
onC2STokenListener.onC2SBiddingResult(hashMap);
}
isBiddingLoaded = true;
}
@Override
public void onVideoDownloadFailed() {
Log.i(TAG, "视频缓存失败");
// 根据三方文档,失败无法获取ecpm,将失败原因回传给TradPlusSDK
if (onC2STokenListener != null) {
onC2STokenListener.onC2SBiddingFailed("", "视频缓存失败");
}
}
// ...
}, false);
mRewardVideoAd.load();
}
}
三、C2SBidding示例说明
C2SBidding获取ECPM并加载广告的流程一般有两种:
-
常见流程:广告和ECPM同时拿到,例如:百度的C2SBidding
-
其他流程:先获取ECPM,竞价成功后在请求获取广告,例如:InMobi的横幅和插屏
1、广告和ECPM同时拿到的示例
- 在三方广告对象加载完成后获取ECPM
// 百度激励视频
private RewardVideoAd mRewardVideoAd;
...
// 按照百度文档请求广告,loaded成功后同时可获取ECPM
mRewardVideoAd = new RewardVideoAd(context, "unitId",
new RewardVideoAd.RewardVideoAdListener() {
@Override
public void onVideoDownloadSuccess() {
Log.i(TAG, "视频缓存成功");
if (onC2STokenListener != null) {
// 根据三方文档,loaded成功后获取ECPM
String ecpmLevel = mRewardVideoAd.getECPMLevel();
if (TextUtils.isEmpty(ecpmLevel)) {
//价格返回空,无意义,通过onC2STokenListener调用失败回调
onC2STokenListener.onC2SBiddingFailed("", "ecpmLevel is Empty");
return;
}
// 成功获取price,通过onC2STokenListener将价格传给TradPlusSDK(美金)
Map<String, Object> hashMap = new HashMap<>();
// key必须是"ecpm",value是double类型
hashMap.put("ecpm", Double.parseDouble(ecpmLevel));
onC2STokenListener.onC2SBiddingResult(hashMap);
}
isBiddingLoaded = true;
}
}
mRewardVideoAd.load();