原生(模板\自渲染)广告集成说明
原生广告(模板\自渲染)包含模板和自渲染两种形式的广告,开发者集成的时候根据业务需求决定用模板还是自渲染形式广告,多用于新闻信息流中,位于app顶部、中部、底部任意一处,横向贯穿整个app页面。
1、原生(模板\自渲染)广告接口说明
1.1 AMPSUnifiedNativeAd 接口说明
/**
* 原生(模板\自渲染)广告构造方法
* @param mContext 必须传入Activity的上下文
* @param parameters 请求参数配置
* @param listener 原生(模板\自渲染)广告请求回调
*/
public AMPSUnifiedNativeAd(Context context, AMPSRequestParameters parameters, AMPSUnifiedNativeLoadEventListener listener)
/**
* 请求原生(模板\自渲染)广告
*/
public void loadAd()
/**
* 获取价格
* @return 原生(模板\自渲染)广告价格
*/
public int getEcpm()
/**
* 获取额外的信息
* @return 返回渠道额外的信息
*/
public Map<String, Object> getMediaExtraInfo()
/**
* 宿主Activity.onResume()时调用,恢复广告状态
*/
public void resume()
/**
* 广告进入后台,activity不可见时调用
*/
public void pause()
/**
* 销毁广告
*/
public void destroy()
1.2 AMPSUnifiedNativeLoadEventListener 接口说明
/**
* 原生(模板\自渲染)广告请求监听器
*/
AMPSUnifiedNativeLoadEventListener {
/**
* 广告加载成功
* @param nativeItems 原生广告list列表
*/
public abstract void onAmpsAdLoad(List<AMPSUnifiedNativeItem> nativeItems);
/**
* 广告加载失败
* @param error 失败错误信息
*/
public abstract void onAmpsAdFailed(AMPSError error);
}
1.3 AMPSUnifiedNativeItem 接口说明
/**
* 原生(模板\自渲染)广告对象
*/
AMPSUnifiedNativeItem {
/**
* 广告是否有效
* @return
*/
boolean isValid();
/**
* 是否模板广告
* @return true 模板广告 false 自渲染广告
*/
boolean isExpressAd();
/**
* 渲染模板广告
*/
void render();
/**
* 获取模板广告view
* @return
*/
View getNativeExpressAdView();
/**
* 设置模板广告监听回调
* @param ampsNativeAdExpressListener
*/
void setNativeAdExpressListener(AMPSNativeAdExpressListener ampsNativeAdExpressListener);
/**
* 获取广告标题,可能为空
* @return
*/
String getTitle();
/**
* 广告描述,可能为空
* @return
*/
String getDesc();
/**
* 获取操作按钮,可能为文字或图片地址,可能为空
* @return
*/
String getActionButtonText();
/**
* 获取扩展信息,可能为空
* @return
*/
Map<String, Object> getExtras();
/**
* 获取广告来源文案
* @return
*/
String getAdSource();
/**
* 广告来源角标地址,可能为空,(百度、快手、趣盟)
* @return
*/
String getAdSourceLogoUrl();
/**
* 获取广告来源角标,可能为空,(倍孜、穿山甲、GM、华为、京东、Sigmob)
* @return
*/
View getAdSourceLogo();
/**
* 获取APPIcon地址,可能为空
* @return
*/
String getIconUrl();
/**
* 是否返回的是view对象,(华为渠道)
* @return false 返回的图片地址 true 返回的是view对象
*/
boolean isViewObject();
/**
* 获取广告主图,可能为空
* @return
*/
String getMainImageUrl();
/**
* 获取广告主图,可能为空,(华为渠道)
* @return
*/
AMPSUnifiedView getMainImageView();
/**
* 获取广告样式 AD_PATTERN_TEXT_IMAGE 图文 AD_PATTERN_3_IMAGES 三图 AD_PATTERN_VIDEO 视频
* AD_PATTERN_HTML 网页 AD_PATTERN_UNKNOWN 未知
* @return
*/
AMPSUnifiedPattern getAdPattern();
/**
* 获取广告图片集合,可能为空
* @return
*/
List<String> getImagesUrl();
/**
* 获取广告图片集合,可能为空,(华为渠道)
* @return
*/
List<AMPSUnifiedView> getMainImageViews();
/**
* 获取广告单价
* @return
*/
int getECPM();
/**
* 获取图片宽度,可能为0
* @return
*/
int getImageWidth();
/**
* 获取图片高度,可能为0
* @return
*/
int getImageHeight();
/**
* 获取下载类广告app信息,可能为空
* @return
*/
AMPSAppDetail getAppDetail();
/**
* 获取自渲染摇一摇、滑动交互view内容,可能为空,(百度、京东、趣盟、Sigmob渠道)
* @return
*/
AMPSUnifiedOptimizeController getOptimizeController();
/**
* 设置自渲染广告交互事件
* @param listener
*/
void setNativeAdEventListener(AMPSUnifiedAdEventListener listener);
/**
* 设置自渲染广告app下载监听事件,可根据需要设置下载监听器,非下载类设置无效
* @param listener
* @return
*/
void setDownloadListener(AMPSUnifiedDownloadListener listener);
/**
* 设置反馈监听事件,可根据需要设置(优量汇)
* @param listener
* @return
*/
void setNegativeFeedbackListener(AMPSUnifiedNegativeFeedbackListener listener);
/**
* 绑定广告到容器
* @param context 上下文
* @param rootView root容器View
* @param clickViews 可点击的view列表
* @param actionView 操作按钮view
*/
void bindAdToRootContainer(Activity context, AMPSUnifiedRootContainer rootView, List<View> clickViews, List<View> actionView);
/**
* 绑定广告到视频容器
* @param context
* @param stub
* @param listener
*/
void bindAdToMediaView(Activity context, AMPSUnifiedMediaViewStub stub, AMPSUnifiedVideoListener listener);
/**
* 宿主Activity.onResume()时调用,恢复广告状态
*/
void resume();
/**
* 广告进入后台,activity不可见时调用
*/
void pause();
/**
* 广告销毁
*/
void destroy();
}
1.4 AMPSNativeAdExpressListener 接口说明
/**
* 原生模板广告的回调对象
*/
AMPSNativeAdExpressListener {
/**
* 广告曝光
*/
void onAdShow();
/**
* 广告点击
*/
void onAdClicked();
/**
* 广告关闭
* @param view 关闭的单个广告view
*/
void onAdClosed(View view);
/**
* 广告渲染失败
* @param view 渲染失败的单个广告view
* @param msg 渲染失败的错误信息
* @param code 渲染失败的错误码
*/
void onRenderFail(View view, String msg, int code);
/**
* 广告渲染成功
* @param view 渲染成功的单个广告view
* @param width 单个广告view的宽,可能为0
* @param height 单个广告view的高,可能为0
*/
void onRenderSuccess(View view,float width, float height) ;
}
1.5 AMPSUnifiedOptimizeController 接口说明
/**
* 原生自渲染广告扩展交互优化控制器
*/
AMPSUnifiedOptimizeController {
/**
* 获取滑一滑交互,(百度、京东渠道支持)
* @param width 宽度
* @param height 高度
* @param repeatCount 重复次数
* @return
*/
View getOptimizeSlideView(int width, int height, int repeatCount);
/**
* 获取摇一摇交互,(百度、京东、趣盟、Sigmob渠道支持)
* @param width 宽度
* @param height 高度
* @return
*/
View getOptimizeShakeView(int width, int height);
}
1.6 AMPSUnifiedAdEventListener 接口说明
/**
* 原生(自渲染)交互监听对象
*/
AMPSUnifiedAdEventListener {
/**
* 广告曝光
*/
void onADExposed();
/**
* 广告点击
*/
void onADClicked();
/**
* 广告曝光失败
* @param errorCode 错误码
* @param errorMsg 错误信息
*/
void onADExposeError(int errorCode, String errorMsg);
}
1.7 AMPSUnifiedPattern 枚举值说明
enum AMPSUnifiedPattern {
//图文
AD_PATTERN_TEXT_IMAGE,
//组图
AD_PATTERN_3_IMAGES,
//视频
AD_PATTERN_VIDEO,
//未知
AD_PATTERN_UNKNOWN;
}
2、原生(模板\自渲染)广告请求示例
1)构建原生(模板\自渲染广告请求参数
AMPSRequestParameters parameter = new AMPSRequestParameters.Builder()
.setSpaceId(Constants.AMPS_SPACE_ID_NATIVE)//原生广告位id
.setTimeOut(5000)//设置超时时间
.setWidth(AMPSScreenUtil.getScreenWidth(this))//设置广告的宽,单位px
.setHeight(0)//设置广告的高,单位px,0代表自适应高度
.setAdCount(1)//设置请求原生广告的条数
.build();
2)实例化原生(模板\自渲染)广告
AMPSUnifiedNativeAd mUnifiedNativeAd = new AMPSUnifiedNativeAd(this, parameter, new AMPSUnifiedNativeLoadEventListener() {
@Override
public void onAmpsAdLoad(List<AMPSUnifiedNativeItem> nativeItems) {
Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onAmpsAdLoad");
if (nativeItems != null && !nativeItems.isEmpty()) {
for (AMPSUnifiedNativeItem unifiedItem : nativeItems) {
if(!unifiedItem.isValid()) {
continue;
}
if (unifiedItem.isExpressAd()) {
//渲染模板广告
renderNativeExpressAd(unifiedItem);
} else {
//自渲染广告
renderUnifiedNativeAd(unifiedItem);
}
}
}
}
@Override
public void onAmpsAdFailed(AMPSError ampsError) {
Log.e(AMPSConstants.AMPS_LOG_TAG,
TAG + " onAdError code:" + ampsError.getCode() + ";" +
" message:" + ampsError.getMessage());
}
});
3) 加载原生(模板\自渲染)广告
mUnifiedNativeAd.loadAd();
4) 渲染模板广告
renderNativeExpressAd(AMPSUnifiedNativeItem unifiedItem) {
//设置广告交互监听
unifiedItem.setNativeAdExpressListener(new AMPSNativeAdExpressListener() {
@Override
public void onAdShow() {
Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onAdShow");
}
@Override
public void onAdClicked() {
Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onAdClicked");
}
@Override
public void onAdClosed(View view) {
Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onAdClosed");
containerFl.removeView(view);
showView.setVisibility(View.GONE);
}
@Override
public void onRenderFail(View view, String msg, int code) {
Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onRenderFail");
showView.setVisibility(View.GONE);
}
@Override
public void onRenderSuccess(View view, float width, float height) {
Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + " onRenderSuccess ");
containerFl.removeAllViews();
containerFl.addView(view);
}
});
//渲染广告
unifiedItem.render();
}
5)渲染自渲染广告
renderUnifiedNativeAd(AMPSUnifiedNativeItem unifiedItem) {
//获取广告类型
AMPSUnifiedPattern pattern = unifiedItem.getAdPattern();
if (AMPSUnifiedPattern.AD_PATTERN_UNKNOWN.equals(pattern)) {
return;
}
Log.e(AMPSConstants.AMPS_LOG_TAG, TAG + "show unified " + pattern);
View itemView = null;
if (AMPSUnifiedPattern.AD_PATTERN_TEXT_IMAGE.equals(pattern)) {
//渲染图文广告
itemView = inflateImageText(unifiedItem);
} else if (AMPSUnifiedPattern.AD_PATTERN_3_IMAGES.equals(pattern)) {
//渲染组图广告
itemView = inflateGroupImage(unifiedItem);
} else if (AMPSUnifiedPattern.AD_PATTERN_VIDEO.equals(pattern)) {
//渲染视频广告
itemView = inflateVideoView(unifiedItem);
}
containerFl.removeAllViews();
containerFl.addView(itemView);
}
6) 在页面的onResume、onPause、onDestroy方法中调用广告实例对象的和广告item对象的resume、pause、destroy方法
@Override
protected void onResume() {
super.onResume();
if (mAMPSUnifiedNativeAd != null) {
mAMPSUnifiedNativeAd.resume();
}
//已经使用的广告需要调用resume方法
if (usedUnifiedNativeItems != null && usedUnifiedNativeItems.size()> 0) {
for (AMPSUnifiedNativeItem item:usedUnifiedNativeItems) {
item.resume();
}
}
}
@Override
protected void onPause() {
super.onPause();
if (mAMPSUnifiedNativeAd != null) {
mAMPSUnifiedNativeAd.pause();
}
//已经使用的广告需要调用pause方法
if (usedUnifiedNativeItems != null && usedUnifiedNativeItems.size()> 0) {
for (AMPSUnifiedNativeItem item:usedUnifiedNativeItems) {
item.pause();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mAMPSUnifiedNativeAd != null) {
mAMPSUnifiedNativeAd.destroy();
}
//已经使用的广告需要调用destroy方法
if (usedUnifiedNativeItems != null && usedUnifiedNativeItems.size()> 0) {
for (AMPSUnifiedNativeItem item:usedUnifiedNativeItems) {
item.destroy();
}
}
//未使用的广告需要调用destroy方法
if (unifiedNativeItems != null && unifiedNativeItems.size() > 0) {
for (AMPSUnifiedNativeItem item : unifiedNativeItems) {
item.destroy();
}
}
}