Skip to content

原生广告(模版\自渲染\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));
  }