# 6.原生广告
# (1) 介绍
1.目前原生广告支持信息流视频
、信息流
等广告;
2.信息流视频
必须在加载广告前传递宽高;
3.获取到Native广告只能同一时间在同一个地方展示,否则会导致最开始展示的Native广告无法正常展示或者点击;
4.集成Native广告的过程中,部分通过api获取的素材是空的,这时可以不用展示该素材信息;
5.集成建议:
(1)提前调用加载方法进行广告的请求,以便需要触发广告时可以快速展示。
(2)禁止在onNativeAdLoadFail回调中执行广告加载的方法,否则会引起很多无用请求且可能会导致应用卡顿。
6.接入流程建议:
(1)启动应用或者游戏通过FNative.makeAdRequest来执行加载广告
(2)在需要展示原生广告的位置通过FNative.getNativeAd获取广告对象是否为空:
- 为空:重新执行FNative.makeAdRequest来加载广告
- 不为空:展示NativeAd的广告对象,在onAdImpressed的回调中再执行FNative.makeAdRequest来预加载下一次的广告
提示
1.本示例所有代码片段均取自于Demo,如需查看详细实现代码,请下载 demo
后查看
# (2) 使用
# 创建原生广告,获取广告:
//创建广告对象
FNNative fnNative = new FNNative(this, "b5f69b4485de40", new FNNativeAdListener() {
//加载成功回调
@Override
public void onLoadSuccess() {
renderAd();
Log.i("加载原生广告", "成功");
}
//加载失败回调
@Override
public void onLoadFail(String code, String desc) {
Log.i("加载原生广告", "失败,错误代码:" + code + desc);
}
});
//设置广告参数,宽、高 等
Map<String, Object> extra = new HashMap<>();
extra.put(FNNative.WIDTH, 1000);
extra.put(FNNative.HEIGHT, 1500);
fnNative.setLocalExtra(extra);
//发送请求获取广告
fnNative.makeAdRequest();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
FNative 提供的方法有:
方法 | 参数 | 说明 |
---|---|---|
FNative | Context context,String positionId,FNNativeAdListener listener | 原生广告创建方法 |
setLocalExtra | Map<String, Object> map | 设置广告参数 |
makeAdRequest | - | 发送请求获取广告 |
getAd | - | 获取已经加载完成的广告(建议获取之后都要进行非null判断,因为可能会有部分情况出现null) |
FNativeAd: 通过getAd方法可以获取广告对象FNativeAd,提供的方法有:
方法 | 参数 | 说明 |
---|---|---|
setNativeEventListener | (FNativeEventListener listener) | 设置广告事件监听,其中ATNativeEventListener是广告事件的接口类 |
setDislikeCallbackListener | (ATNativeDislikeListener listener) | 设置广告关闭事件回调 |
renderAdView | (FNativeAdView view, FNativeAdRender render) | 用于广告渲染,其中view必须使用我们提供的FNativeAdView,FNativeAdRenderer则需要继承实现相应的接口功能 |
prepare | (FNativeAdView view) | 用于配置广告点击事件,在renderAdView方法之后调用(默认全部view可点击,存在广告标识的会有默认展示位置和大小) |
clear | (FNativeAdView view) | 移除广告对view的绑定 |
onResume | - | 在Activity的onResume时调用 |
onPause | - | 在Activity的onPause时调用 |
destroy | - | 销毁当前的广告对象(执行之后该广告无法再进行展示) |
FNativeEventListener: 广告事件监听接口类
方法 | 参数 | 说明 |
---|---|---|
onAdImpressed | - | 广告展示回调 |
onAdClicked | - | 广告点击回调 |
onAdVideoStart | - | 广告视频播放开始 |
onAdVideoEnd | - | 广告视频播放结束 |
# 获取广告并渲染
通过 getAd 方法获取广告对象,设置监听:
FNativeAd ad = fnNative.getAd();
ad.setEventListener(new FNativeEventListener() {
@Override
public void onAdShow() {
FNLang.showMsg("onAdShow");
}
@Override
public void onAdClicked() {
FNLang.showMsg("onAdClicked");
}
@Override
public void onVideoComplete() {
FNLang.showMsg("onVideoComplete");
}
@Override
public void onVideoPlay() {
FNLang.showMsg("onVideoPlay");
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
设置Dislike回调:
ad.setDislikeListener(fNativeAdView -> {
if (fNativeAdView != null)
((ViewGroup) ((View) fNativeAdView).getParent()).removeView(fNativeAdView);
});
1
2
3
4
2
3
4
FNativeDislikeListener:广告Dislike监听类
方法 | 参数 | 说明 |
---|---|---|
onAdCloseButtonClick | (FNativeAdView view) | 广告关闭回调 |
向容器中添加广告对象:
FNativeAdView view = new FNativeAdView(this);
FrameLayout container = findViewById(R.id.container_native);
container.addView(view);
1
2
3
2
3
渲染广告:
ad.renderAdView(view, new NativeDemoRender(this));
1
FNCustomNativeAd:Native的广告素材对象(以下素材都可能会出现为null的情况,因为广告类型不同不一定存在所有素材信息)
方法 | 参数 | 说明 | 广告平台Native广告规范 |
---|---|---|---|
getIconImageUrl | - | 获取广告图标的url | getAdIconView、getIconImageUrl同时返回时,优先选择getAdIconView,只需渲染其中一个 |
getAdChoiceIconUrl | - | 获取广告商的标识的图标url | 有返回时需要渲染 |
getAdMediaView | (ViewGroup view, int width) | 获取广告大图的渲染容器(仅部分广告类型会存在),有可能是静态图和视频。参数描述:view:广告父容器, width: MediaView的宽度配置 (目前仅Inmobi需要这两个参数,其他可以传null) | getAdMediaView,getMainImageUrl同时返回时,优先选择getAdMediaView ,只需渲染其中一个 |
getMainImageUrl | - | 获取大图Url | getAdMediaView,getMainImageUrl同时返回时,优先选择getAdMediaView,只需渲染其中一个 |
getTitle | - | 获取广告标题 | 有返回时需要渲染 |
getDescriptionText | - | 获取广告描述 | 有返回时需要渲染 |
getCallToActionText | - | 获取广告CTA按钮文字 | 有返回时需要渲染 |
getAdFrom | - | 获取广告来源 | 无 |
getAdLogo | - | 获取AdLogo的Bitmap | 无 |
getImageUrlList | - | 获取图片的url列表 | 无 |
getStarRating | - | 获取广告的评分 | 无 |
isNativeExpress | - | 是否为个性化模板 | 如果是模版广告,只能使用getAdMediaView来获取广告view,其他信息为空 |
destroy | - | 释放资源 | 在广告不再需要展示时,需要调用此方法进行资源的释放 |
NativeDemoRender
和具体实现代码请查看demo