# 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

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

设置Dislike回调:

ad.setDislikeListener(fNativeAdView -> {
    if (fNativeAdView != null)
        ((ViewGroup) ((View) fNativeAdView).getParent()).removeView(fNativeAdView);
});
1
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

渲染广告:

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