原生广告(模版\自渲染\draw)
注意: 原生广告具体实现可参考Demo中NativeAdUnifiedActivity、NativeAdUnifiedListActivity、NativeAdUnifiedRecycleActivity等
自渲染广告: 聚合SDK返回物料,建议由开发者根据自己的广告设计自行UI适配和展示。
1. 主要API
1.1 WMNativeAd
- com.windmill.sdk.natives.WMNativeAd
| 方法名 | 方法介绍 |
|---|---|
| WMNativeAd(Context context, WMNativeAdRequest request) | 构造方法。参数说明:activity(展示广告的 activity)、request(广告请求对象)。 |
| setAdSourceStatusListener(WMAdSourceStatusListener adSourceStatusListener) | 设置广告源层级加载回调,需要在广告load 之前设置 |
| loadAd(NativeAdLoadListener nativeAdLoadListener) | 请求广告。参数说明:nativeAdLoadListener(请求广告相关状态会通过 nativeAdLoadListener 通知开发者)。 |
| List getNativeADDataList() | 广告拉取成功后,获取广告集合。 |
| setFilter(WMAdFilter filter) | 广告源加载及播放过滤设置,具体使用见高级设置->广告过滤->广告对象级广告源过滤器设置。 |
| setCustomGroup(Map<String, String> customGroup) | 广告对象级自定义广告源分组,可设置多个分组,每个分组下可设置多个广告源。 |
| setActivityChannelFilterList(Set<Integer> channelIds) | 广告对象加载时渠道 Activity 透传过滤,设置渠道对应 id 后加载时传给三方渠道加载的参数由 activity 改为 context。 目前不支持传 context 的渠道:vivo,vivoadn。 |
| checkValidAdCaches() | 查询当前广告位的所有缓存信息的AdInfo对象、在广告加载成功后调用。 |
| getLoadFailMessages() | 获取当前广告位详细报错信息,包含广告源的详细错误信息。返回 String 类型(可能会为 null)。在 onError() 回调之后之后调用。 |
| getAdInfo() | 获取当前Ready最高价格的AdInfo信息。 |
| destroy() | 销毁广告。 |
1.2 WMNativeAdRequest
- com.windmill.sdk.natives.WMNativeAdRequest
| 方法名 | 方法介绍 |
|---|---|
| WMNativeAdRequest(String placementId, String userId, int adCount, Map options) | 构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选,不要超过65个字符, 超过限制后会导致数据计算异常)、adCount(请求广告数量)、options(扩展参数,可传任意)。 |
1.3 NativeAdLoadListener
- com.windmill.sdk.natives.WMNativeAd$NativeAdLoadListener
| 方法名 | 方法介绍 |
|---|---|
| onFeedAdLoad(String placementId) | 广告成功加载。参数说明:placementId(广告位Id)。 |
| onError(WindMillError error, String placementId) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和message)、placementId(报错的广告位Id)。 |
1.4 WMNativeAdData
- com.windmill.sdk.natives.WMNativeAdData
| 方法名 | 方法介绍 |
|---|---|
| getAppInfo() | 获取下载类广告六要素信息,媒体可根据需要自行展示。 |
| getInteractionType() | 获取广告交互类型。取值范围:WMConstants.INTERACTION_TYPE_DOWNLOAD、WMConstants.INTERACTION_TYPE_BROWSER、WMConstants.INTERACTION_TYPE_UNKNOWN |
| getAdPatternType() | 获取广告样式。取值范围:WMNativeAdDataType.NATIVE_UNKNOWN、WMNativeAdDataType.NATIVE_SMALL_IMAGE_AD、WMNativeAdDataType.NATIVE_BIG_IMAGE_AD、WMNativeAdDataType.NATIVE_GROUP_IMAGE_AD、WMNativeAdDataType.NATIVE_VIDEO_AD |
| getExpressAdView() | 获取模版渲染的广告View |
| getCTAText() | 获取创意按钮文案 |
| getTitle() | 获取广告的Tittle |
| getDesc() | 获取广告的描述 |
| getAdLogo() | 获取广告的Logo |
| getIconUrl() | 获取广告的Icon |
| getImageUrlList() | 获取广告的图片地址,已废弃,建议用getImageList |
| getImageList() | 获取广告的图片信息集合:宽、高、url等 |
| getVideoCoverImage() | 获取视频广告图片信息:宽、高、url等 |
| getCustomizeVideo() | 获取自定义视频信息:url等 |
| startVideo() | 播放视频广告 |
| pauseVideo() | 暂停视频广告 |
| resumeVideo() | 恢复视频广告 |
| stopVideo() | 停止视频广告 |
| setVideoProgressUpdateInterval(int intervalMs) | 设置原生自渲染视频进度更新的时间间隔,单位毫秒,默认1000毫秒。参数说明:intervalMs(毫秒,视频进度更新的时间间隔)。(4.7.3及以上版本支持) 支持设置原生自渲染视频进度回调间隔渠道:穿山甲、美数、小米、荣耀、广点通、倍业 |
| getVideoDuration() | 获取原生自渲染视频广告时长,返回视频时长单位毫秒,如果获取不到,则返回 -1。(4.7.3及以上版本支持) 支持获取原生自渲染视频时长的渠道:穿山甲、美数(播放前获取不到)、小米、荣耀、广点通、倍业、快手、百度、趣盟、OPPO、华为 支持获取原生自渲染Draw视频时长的渠道:穿山甲、百度、广点通 |
| setVideoMute(boolean isMute) | 设置是否静音播放。参数说明:isMute(是否静音播放)。(4.7.3及以上版本支持) 支持原生类型以及渠道: 1、模版渲染:快手、荣耀、章鱼(4.8.0及以上版本支持) 2、自渲染:广点通、百度、美数、倍业、华为、荣耀、VIVO、章鱼(4.8.0及以上版本支持) 3、自渲染draw:广点通、百度、快手、章鱼(4.8.0及以上版本支持) |
| render() | 广告渲染方法 |
| isExpressAd() | 是否为模版渲染广告 |
| isNativeDrawAd() | 是否为原生Draw广告 |
| isReady() | 广告是否可用 |
| destroy() | 销毁广告单元对象 |
| connectAdToView(Activity activity, WMNativeAdContainer adContainer, WMNativeAdRender adRender) | 自渲染具体实现方法。参数说明:activity(展示广告的 activity)、adContainer(ToBid提供的根容器)、adRender(广告渲染实现类对象)。 |
| bindImageViews(Context context, List imageViews, int defaultImageRes) | 图片渲染绑定方法。参数说明:context(展示广告的 上下文)、imageViews(需要渲染的ImageView集合)、defaultImageRes(图片渲染失败默认展示的资源)。 |
| bindViewForInteraction(Context context, View view, List clickableViews, List creativeViewList, View disLikeView) | 绑定广告交互的方法。参数说明:context(展示广告的 上下文)、clickableViews(可点击的View的列表)、creativeViewList(用于下载或者拨打电话的创意View集合)、disLikeView(dislike按钮View)。 |
| setInteractionListener(NativeAdInteractionListener adInteractionListener) | 设置广告交互监听。参数说明:adInteractionListener(广告交互监听回调对象)。 |
| void setMediaViewOption(WMVideoOption videoOption) | 设置视频播放参数,在bindMediaView之前调用。 |
| void bindMediaView(Context context, ViewGroup mediaLayout) | 绑定视频Video方法。参数说明:context(展示广告的 上下文)、mediaLayout(装video的容器)。 |
| setMediaListener(NativeADMediaListener nativeADMediaListener) | 设置自渲染Video监听。参数说明:nativeADMediaListener(视频播放监听回调对象)。 |
| setDislikeInteractionCallback(Activity activity, DislikeInteractionCallback dislikeInteractionCallback) | 设置Dislike监听。参数说明:activity(dislike弹窗的acticity)、dislikeInteractionCallback(dislike监听回调对象)。 |
| setDownloadListener(AppDownloadListener appDownloadListener) | 设置广告下载监听。参数说明:appDownloadListener(广告下载监听回调对象)。 |
| getInteractionWidgetView(int width, int height, int actionType, final AdShakeViewListener listener) | 获取信息流交互组件(摇一摇组件)(仅Sigmob和百度支持)组件宽高、交互类型(目前为0)listener:交互完成之后的回调 |
1.5 NativeAdInteractionListener
- com.windmill.sdk.natives.WMNativeAdData$NativeAdInteractionListener
| 方法名 | 方法介绍 |
|---|---|
| onADExposed(AdInfo adInfo) | 广告曝光。参数说明:adInfo(广告信息,具体可看其内部成员变量)。 |
| onADError(AdInfo adInfo, WindMillError error) | 广告展示失败。参数说明:adInfo(广告信息,具体可看其内部成员变量)、error(报错信息,具体可看其内部code和message)。 |
| onADRenderSuccess(AdInfo adInfo, View view, float width, float height) | 广告渲染成功。参数说明:adInfo(广告信息,具体可看其内部成员变量)、view(模版渲染的广告view)、width(view宽度)、height(view高度)。 |
| onADClicked(AdInfo adInfo) | 广告点击。参数说明:adInfo(广告信息,具体可看其内部成员变量)。 |
1.6 NativeADMediaListener
- com.windmill.sdk.natives.WMNativeAdData$NativeADMediaListener
| 方法名 | 方法介绍 |
|---|---|
| onVideoLoad() | 视频加载成功。 |
| onVideoError(WindMillError error) | 视频播放失败。参数说明:error(报错信息,具体可看其内部code和message)。 |
| onVideoStart() | 视频开始播放。 |
| onVideoPause() | 视频暂停播放。 |
| onVideoResume() | 视频恢复播放。 |
| onVideoCompleted() | 视频完成播放。 |
1.61 NativeADMediaListenerExt
继承NativeADMediaListener接口
- com.windmill.sdk.natives.WMNativeAdData$NativeADMediaListenerExt
| 方法名 | 方法介绍 |
|---|---|
| onVideoProgressUpdate(long current, long duration) | 原生自渲染视频播放进度更新。(4.7.3及以上版本支持) 参数说明:current(当前播放时间,单位毫秒)、duration(视频总时长,单位毫秒) 支持原生自渲染渠道:穿山甲、美数、小米、荣耀、广点通、倍业 |
1.7 AppDownloadListener
- com.windmill.sdk.natives.WMNativeAdData$AppDownloadListener
| 方法名 | 方法介绍 |
|---|---|
| onIdle() | 下载静止状态。 |
| onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) | 下载活动状态。参数说明:totalBytes(下载总字节)、currBytes(当前下载字节)、fileName(下载文件名)、appName(下载App名字)。 |
| onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) | 下载暂停状态。参数说明:totalBytes(下载总字节)、currBytes(当前下载字节)、fileName(下载文件名)、appName(下载App名字)。 |
| onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) | 下载失败。参数说明:totalBytes(下载总字节)、currBytes(当前下载字节)、fileName(下载文件名)、appName(下载App名字)。 |
| onDownloadFinished(long totalBytes, String fileName, String appName) | 下载结束。参数说明:totalBytes(下载总字节)、fileName(下载文件名)、appName(下载App名字)。 |
| onInstalled(String fileName, String appName) | 安装完成。参数说明:fileName(安装文件名)、appName(安装App名字)。 |
1.8 DislikeInteractionCallback
- com.windmill.sdk.natives.WMNativeAdData$DislikeInteractionCallback
| 方法名 | 方法介绍 |
|---|---|
| onShow() | Dislike弹窗显示。 |
| onSelected(int position, String value, boolean enforce) | Dislike弹窗Item点击。参数说明:position(点击的位置)、value(点击的位置的文字选项)、enforce(是否关闭广告)。 |
| onCancel() | Dislike弹窗取消。 |
1.9 安卓下载应用六要素信息
由于国内监管部门要求,在安卓下载类广告中,需要给用户披露下载的应用的六要素信息。开发者可以通过getAppInfo() 方法获取。六要素信息包括
| 信息 | 字段 | 支持的广告网络 |
|---|---|---|
| 应用名称 | getAppName() | Sigmob、腾讯广告、百度联盟、快手广告、穿山甲、Taptap |
| 开发者名称 | getDeveloperName() | Sigmob、腾讯广告、百度联盟、快手广告、穿山甲、Taptap |
| 应用版本 | getAppVersion() | Sigmob、腾讯广告、百度联盟、快手广告、穿山甲、Taptap |
| 隐私协议 | getPrivacyUrl() | Sigmob、腾讯广告、百度联盟、快手广告、穿山甲 |
| 权限列表 | getPermissionInfoUrl() | Sigmob、腾讯广告、百度联盟、快手广告、穿山甲 |
| 应用功能介绍 | getFunctionDescUrl() | Sigmob、腾讯广告、百度联盟、穿山甲 |
2. 接入代码示例
2.1 原生广告加载
java
private WMNativeAd nativeAd;
private List<WMNativeAdData> nativeAdDataList;
//请求广告时可以传入期望的宽高
Map<String, Object> options = new HashMap<>();
options.put(WMConstants.AD_WIDTH, adWidth);//针对于模版广告有效、单位dp
options.put(WMConstants.AD_HEIGHT, WMConstants.AUTO_SIZE);//默认自适应高度、单位dp
/**
* PLACEMENT_ID 必填
* USER_ID 可选
* AD_COUNT 必填 1-3
* OPTIONS 自定义参数 可选
*/
WMNativeAdRequest request = new WMNativeAdRequest(PLACEMENT_ID, USER_ID, AD_COUNT, options);
nativeAd = new WMNativeAd(this, request);
nativeAd.loadAd(new WMNativeAd.NativeAdLoadListener() {
@Override
public void onError(WindMillError error, String placementId) {
Log.d("Sigmob", "onError:" + error.toString() + ":" + placementId);
}
@Override
public void onFeedAdLoad(String placementId) {
List<WMNativeAdData> unifiedADData = nativeAd.getNativeADDataList();
if (unifiedADData != null && unifiedADData.size() > 0) {
nativeAdDataList = unifiedADData;
}
}
});2.2 原生广告展示
java
private ViewGroup adContainer;
/**
* 请在收到onFeedAdLoad回调后再展示广告
* nativeAd.getNativeADDataList()获取广告
*/
List<WMNativeAdData> nativeAdDataList = nativeAd.getNativeADDataList();
if (nativeAdDataList != null && nativeAdDataList.size() > 0) {
WMNativeAdData nativeAdData = nativeAdDataList.get(0);
//绑定广告的监听
bindListener(nativeAdData);
if (nativeAdData.isExpressAd()) {//模版广告
nativeAdData.render();
View expressAdView = nativeAdData.getExpressAdView();
//媒体最终将要展示广告的容器(这里可以直接先addView,也可以在收到onRenderSuccess回调后addView)
if (adContainer != null) {
adContainer.removeAllViews();
adContainer.addView(expressAdView);
}
} else {//自渲染广告
//创建一个装整个自渲染广告的容器
WMNativeAdContainer windContainer = new WMNativeAdContainer(this);
//媒体自渲染的View
NativeAdDemoRender adRender = new NativeAdDemoRender();
//将容器和view链接起来
nativeAdData.connectAdToView(this, windContainer, adRender);
//媒体最终将要展示广告的容器
if (adContainer != null) {
adContainer.removeAllViews();
adContainer.addView(windContainer);
}
}
}2.3 原生广告销毁
java
//原生广告单元的销毁
if (nativeAdDataList != null && nativeAdDataList.size() > 0) {
for (WMNativeAdData adData : nativeAdDataList) {
if (adData != null) {
adData.destroy();
}
}
}
//原生请求广告对象的销毁
if (nativeAd != null) {
nativeAd.destroy();
}2.4 原生广告预加载注意事项
需要在平台开启预加载功能。
开启预加载功能后,sdk内部会在原生广告曝光后再次去请求广告。成功后不会通知媒体,会在媒体下次loadAd时立马返回预加载成功的广告。(需要是同一个WMNativeAd对象)
开启预加载功能后,要注意全局使用同一个WMNativeAd对象。(new注意判null)
2.5 原生广告Gromore自渲染注意事项
- Gromore原生自渲染需要绑定资源ID。
1、视频类素材:mediaViewId(视频)必须绑定资源id,否则视频不展示,会影响广告计费。 2、图片类素材:可以不绑定资源id,不影响广告计费。 3、callToActionId(广告创意按钮):如果开发者有需要展示创意按钮,必须绑定。 4、logoId(logo):目前SDK不支持logo资源的绑定,需要开发者针对GM自己渲染logo。
java
public class NativeAdDemoRender implements WMNativeAdRender<WMNativeAdData> {
@Override
public void renderAdView(View view, final WMNativeAdData adData) {
//gromore需要绑定资源ID
//在bindViewForInteraction之前注册
if (adData.getNetworkId() == 22) {//gromore
WMViewBinder viewBinder = new WMViewBinder.Builder(view.getId())
.titleId(text_title.getId())
.descriptionTextId(text_desc.getId())
.callToActionId(mCTAButton.getId())
.iconImageId(img_logo.getId())
.mainImageId(mImagePoster.getId())
.mediaViewIdId(mMediaViewLayout.getId())
.groupImage1Id(img_1.getId())
.groupImage2Id(img_2.getId())
.groupImage3Id(img_3.getId())
.shakeViewContainerId(shakeLayout.getId())
.build();
adData.registerViewBidder(viewBinder);
}
//重要! 这个涉及到广告计费,必须正确调用。convertView必须使用ViewGroup。
//作为creativeViewList传入,点击不进入详情页,直接下载或进入落地页,视频和图文广告均生效
adData.bindViewForInteraction(context, view, clickableViews, creativeViewList, img_dislike);
}
}2.6 原生广告自动加载回调
/**
* 后台开启自动加载功能才会收到此回调
* 不实现该回调监听不影响自动加载功能
*/
nativeAd.setAutoLoadListener(new AutoAdLoadListener() {
@Override
public void onAutoAdLoadSuccess(String placementId) {
Log.i("Sigmob", "----NativeAdUI--onAutoAdLoadSuccess " + placementId);
}
@Override
public void onAutoAdLoadFail(WindMillError error, String placementId) {
Log.i("Sigmob", "---NativeAdUI--onAutoAdLoadFail " + placementId);
}
});2.7 获取华为静默下载控件
/**
* getAppDownloadButton(context)
* 获取该控件可以看到下载进度,下载后安装及打开等变更,但大小不可控
*/
if (adData.getNetworkId() == WMAdapterUtil.HUAWEI && adData.getInteractionType() == WMConstants.INTERACTION_TYPE_DOWNLOAD) {
downloadVg.addView(adData.getAppDownloadButton(context));
}