Skip to content

原生自渲染广告

1. 接口 API 说明

1.1 原生广告请求类

WindNativeAdRequest

方法名说明
WindNativeAdRequest(String placementId, String userId, int adCount, HashMap<String,String> option)开屏请求对象,其中 PlacementId 为广告位(必传),userId 为用户 ID, 没有可以传入 null,adCount 为返回最大广告数;option 为加载扩展参数,非必传

1.2 原生广告加载类

WindNativeUnifiedAd

方法名说明
WindNativeUnifiedAd(WindNativeAdRequest request)初始化原生广告加载对象
setNativeAdLoadListener(WindNativeAdLoadListener nativeAdLoadListener)设置加载回调
loadAd()原生广告加载
loadAd(int adCount)原生广告加载,adCount 为请求广告条数
loadAd(String bid_token)原生 Header Bidding 广告加载
destroy()原生广告加载对象销毁

1.3 原生广告单元类

WindNativeAdData

方法名方法介绍
getAdPatternType()获取广告样式 (NativeAdPatternType.NATIVE_VIDEO_AD, NativeAdPatternType.NATIVE_BIG_IMAGE_AD)
getCTAText()获取创意按钮文案
getTitle()获取广告的标题
getImageList()获取广告图片素材列表(包含图片素材 URL,图片宽,图片高)
getDesc()获取广告的描述
getVideoWidth()获取广告视频宽
getVideoHeight()获取广告视频高
getAdLogo()获取广告的 Logo
getAdView()获取广告视频 View
getVideoCoverImageUrl()获取广告视频封面图
getInteractionType()获取广告交互类型(0-未知;1-下载;2-浏览器,小程序,快应用等)
getIconUrl()获取广告的 Icon
startVideo()播放视频广告
pauseVideo()暂停视频广告
resumeVideo()恢复视频广告
stopVideo()停止视频广告
destroy()销毁广告单元对象
getAdAppInfo()获取下载类广告六要素信息
bindImageViews(List<ImageView> imageViews, int defaultImageRes)图片渲染绑定方法,参数说明:context(展示广告的上下文)、imageViews(需要渲染的 ImageView 集合)、defaultImageRes(图片渲染失败默认展示的资源)
bindViewForInteraction(View view, List<View> clickableViews, List<View> creativeViewList, View disLikeView,NativeAdInteractionListener adInteractionListener)绑定广告交互的方法,参数说明:context(展示广告的上下文)、clickableViews(可点击的 View 的列表)、creativeViewList(用于下载或者拨打电话的创意 View 集合)、disLikeView(dislike 按钮 View)
bindMediaView(ViewGroup mediaLayout,NativeADMediaListener nativeADMediaListener)绑定视频 Video 方法,参数说明:context(展示广告的上下文)、mediaLayout(装 Video 的容器)、nativeADMediaListener(视频播放监听回调对象)
bindMediaViewWithoutAppInfo(ViewGroup mediaLayout,NativeADMediaListener nativeADMediaListener)接口定义同上,但下载类六要素由开发者自己渲染并显示入口,SDK 不再显示视频下载类六要素入口
setDislikeInteractionCallback(Activity activity, DislikeInteractionCallback dislikeInteractionCallback)设置 Dislike 监听,参数说明:activity(dislike 弹窗的 acticity)、dislikeInteractionCallback(dislike 监听回调对象)
getWindAdMetaData()获取广告元数据

获取广告唯一 adId 示例(仅在有广告填充时有值

java
public class LogUtil {

    public static String log(Object obj, String placementId) {
        if (obj == null || TextUtils.isEmpty(placementId)) return null;

        if (obj instanceof WindSplashAD
                || obj instanceof WindRewardVideoAd
                || obj instanceof WindNewInterstitialAd
                || obj instanceof WindNativeAdData) {
            Object windAdMetaData = invokeMethod(obj, "getWindAdMetaData");
            return windAdMetaData == null ? null : ((WindAdMetaData) windAdMetaData).getAdId();
        }

        return null;
    }

    public static Object invokeMethod(Object obj, String methodName) {
        if (obj == null) return null;

        try {
            Method method = obj.getClass().getMethod(methodName);
            method.setAccessible(true);
            return method.invoke(obj);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

1.4 原生下载类广告单元应用六要素(非下载类,以下信息为 null)

注意: 权限列表,权限列表 URL,隐私协议,隐私协议 URL,功能说明,功能说明 URL 如果部分字段为 null,则说明数据在收集中,

AdAppInfo

方法名方法介绍
getAppName()获取应用名称
getAuthorName()获取开发者名称
getVersionName()获取应用版本号
getPermissions()获取应用权限列表文本
getPermissionsUrl()获取应用权限列表 URL,以 WebView 渲染
getPrivacyAgreement()获取应用隐私协议文本
getPrivacyAgreementUrl()获取应用隐私协议 URL,以 WebView 渲染
getDescription()获取应用功能介绍文本
getDescriptionUrl()获取应用功能介绍 URL,以 WebView 渲染
getAppSize()获取应用大小

2. 原生回调说明

2.1 原生广告加载回调

NativeAdLoadListener

方法名方法介绍
onAdLoad(list<WindNativeAdData> adUnits, String placementId)广告加载成功
onError(WindAdError error)广告加载失败,参数说明:error(报错信息,具体可看其内部 code 和 message)

2.2 交互曝光回调

NativeAdInteractionListener

方法名方法介绍
onADExposed()广告曝光
onADError(WindAdError error)广告展示失败,参数说明:error(报错信息,具体可看其内部 code 和 message)
onADClicked()广告点击

2.3 原生视频播放回调

NativeADMediaListener

方法名方法介绍
onVideoLoad()视频加载成功
onVideoError(WindMillError error)视频播放失败,参数说明:error(报错信息,具体可看其内部 code 和 message)
onVideoStart()视频开始播放
onVideoPause()视频暂停播放
onVideoResume()视频恢复播放
onVideoCompleted()视频完成播放

2.4 原生广告反馈回调

DislikeInteractionCallback

方法名方法介绍
onShow()Dislike 弹窗显示
onSelected(int position, String value, boolean enforce)Dislike 弹窗 Item 点击,参数说明:position(点击的位置)、value(点击的位置的文字选项)、enforce(是否关闭广告)
onCancel()Dislike 弹窗取消

3. 示例代码

注意: 原生自渲染广告具体实现可参考 Demo 中 NativeAdUnifiedActivity、NativeAdUnifiedListActivity、NativeAdUnifiedRecycleActivity 等

3.1 原生自渲染广告加载

java
private ViewGroup adContainer;

private WindNativeUnifiedAd windNativeUnifiedAd;

private List < NativeADData > unifiedADDataList;

WindNativeAdRequest windNativeAdRequest = new WindNativeAdRequest(placementId, String.valueOf(userID), 3, options);
windNativeUnifiedAd = new WindNativeUnifiedAd(windNativeAdRequest);
windNativeUnifiedAd.loadAd(new WindNativeUnifiedAd.NativeAdLoadListener() {

    // 广告加载失败
    @Override
    public void onError(WindAdError error, String placementId) {

    }

    // 广告加载成功
    @Override
    public void onAdLoad(list < WindNativeAdData > adUnits, String placementId) {

    }
});

3.2 原生自渲染广告展示

java
/**
 * 请在收到 onFeedAdLoad 回调后再展示广告
 */
adData.bindViewForInteraction(nativeAdView, clickableViews, creativeViewList, img_dislike, new NativeADEventListener() {

    @Override
    public void onADExposed() {
        Log.d(TAG, "onADExposed: ");
    }

    @Override
    public void onADClicked() {
        Log.d(TAG, "onADClicked: ");
    }

    @Override
    public void onADError(WindAdError error) {
        Log.d(TAG, "onADError error code :" + error.toString());
    }
});

if (adData.getAdPatternType() == NativeAdPatternType.NATIVE_VIDEO_AD) {
    adData.bindMediaView(mMediaViewLayout, new WindNativeAdData.NativeADMediaListener() {

        @Override
        public void onVideoStart() {
            Log.d(TAG, "onVideoStart: ");
        }

        @Override
        public void onVideoPause() {
            Log.d(TAG, "onVideoPause: ");
        }

        @Override
        public void onVideoResume() {
            Log.d(TAG, "onVideoResume: ");
        }

        @Override
        public void onVideoCompleted() {
            Log.d(TAG, "onVideoCompleted: ");
        }

        @Override
        public void onVideoError(WindAdError windAdError) {
            Log.d(TAG, "onVideoError: " + windAdError.toString());
        }

        @Override
        public void onVideoLoad() {
            Log.d(TAG, "onVideoLoad: ");
        }
    });
} else if (adData.getAdPatternType() == NativeAdPatternType.NATIVE_BIG_IMAGE_AD) {
    adData.bindImageViews(imageViews, 0);
}

3.3. 原生自渲染广告销毁

java
// 原生广告单元的销毁
if (unifiedADDataList != null && unifiedADDataList.size() > 0) {
    for (NativeADData ad: unifiedADDataList) {
        if (ad != null) {
            ad.destroy();
        }
    }
}

// 原生请求广告对象的销毁
if (windNativeUnifiedAd != null) {
    windNativeUnifiedAd.destroy();
}