# 5.信息流广告

# 介绍

信息流广告包括视频信息流普通信息流,他们是基于原生广告封装,如需要其他更细粒度操作参考原生广告文档即可

注意

1.广告只能同一时间在同一个地方展示,否则会导致最开始展示的广告无法正常展示或者点击;

2.集成建议

  • 提前调用加载方法进行广告的请求,以便需要触发广告时可以快速展示。
  • 禁止在onLoadFail回调中执行广告加载的方法,否则会引起很多无用请求且可能会导致应用卡顿。

3.接入流程建议

(1) 启动应用或者游戏时预加载广告

(2) 在需要展示原生广告的位置获取广告对象并判断是否为空:

为空:重新加载广告

不为空:展示广告对象,在onAdShow的回调中再预加载下一次的广告

# 使用

使用完毕后,请“务必”调用FNativeAd.destroy()方法销毁广告,以免造成 内存泄漏

# 加载:

/**
 * 加载信息流广告
 * @param context 上下文
 * @param positionId 广告位Id
 * @param size 广告尺寸 AdSize.NEW(int width, int height)
 * @param listener 加载监听回调
 */
Ads.loadDrawVideoAd(Context context, String positionId, AdSize size, final FNDrawLoadListener listener);
1
2
3
4
5
6
7
8

# 渲染:

在合适的时机渲染广告,示例代码:

//加载信息流广告
Ads.loadDrawVideoAd(this, "b5f50a4ac6f0e2", AdSize.NEW(1080, 1920), new FNDrawLoadListener() {
    @Override
    public void onLoadSuccess(FNativeAd ad) {
        //请在合适的时机渲染广告,本示例仅做演示
        //判断广告是否为空,由于网络或者其他原因可能会造成广告为空的情况
        if (ad == null) {
            FNLang.showMsg("缓存的广告为空");
            return;
        }
        //设置广告动作监听
        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");
            }
        });
        //设置广告dislike监听回调
        ad.setDislikeListener(fNativeAdView -> {
            if (fNativeAdView != null)
                ((ViewGroup) fNativeAdView.getParent()).removeView(fNativeAdView);
        });
        //获取Context
        Context context = getApplicationContext();
        //创建原生广告视图
        FNativeAdView view = new FNativeAdView(context);
        FrameLayout container = findViewById(R.id.container_draw);
        //将原生广告加入容器中
        container.addView(view);
        //渲染广告,创建信息流渲染器FNDrawInfoRender
        ad.renderAdView(view, new FNDrawInfoRender(context));
        //配置广告点击事件,在renderAdView方法之后调用
        ad.prepare(view);
    }

    @Override
    public void onLoadFail(String msg, int code) {
        Log.i("信息流加载失败:", code + msg);
    }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

# 销毁

请在使用完毕后,在适当的时机销毁广告,以避免 内存泄漏

if(ad!=null){
    ad.destroy();
}
1
2
3

# 相关回调监听:

加载回调监听

public interface FNDrawLoadListener {
    /**
     * 加载成功
     *
     * @param ad 广告对象,使用完毕后请调用destroy方法销毁
     */
    void onLoadSuccess(FNativeAd ad);

    /**
     * 加载失败
     *
     * @param msg  错误信息
     * @param code 错误代码
     */
    void onLoadFail(String msg, int code);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

动作回调监听

public interface FNativeEventListener {

    /**
     * 广告显示
     */
    void onAdShow();

    /**
     * 广告被点击
     */
    void onAdClicked();

    /**
     * 广告播放完毕
     */
    void onVideoComplete();

    /**
     * 广告开始播放
     */
    void onVideoPlay();

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

dislike回调监听

public interface FNDislikeListener {
    /**
     * 广告dislike被点击
     * @param fNativeAdView 广告视图
     */
    void onCloseClick(FNativeAdView fNativeAdView);
}
1
2
3
4
5
6
7