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