Skip to content

3.4 原生模板、信息流广告

luyao edited this page Dec 21, 2021 · 3 revisions

集成最佳实践:

  • 适用场景:适用于有内容输出的 APP,比如新闻资讯类、视频类、音频类、社区类等,通常在内容流中或内容详情页中植入。在内容流中植入广告,需对广告展现位置、展现频次等反复测试,避免过度干扰的同时,确保高可见性和效果性。
  • 建议广告承载布局高度自适应,如要设置固定高度须知:穿山甲模板有最低高度限制,已知为最低125dp,Mercury最低80dp,优量汇(广点通)最低约100dp。
  • 瀑布流式内容信息流需单独设置广告宽度,否则广点通可能展示异常,需增加如下设置代码:
//需要特别注意广告父布局宽度要和自定义的宽度dp值一致,否则优量汇可能出现展示问题。
advanceNativeExpress.setExpressViewAcceptedSize(自定义宽度dp值, 0);
  • 支持提前加载广告(注意控制时机,不可过早提前),但要注意,一次展示需对应一个广告实例,切忌复用广告实例。
  • RecyclerView中使用的话请参考示例工程中的NativeExpressRecyclerViewActivity,建议在列表中每5-10个条目展示一条广告,且每次只请求一条广告,如果一定要请求多条请注意穿山甲支持的条数上限为3条。
  • 如果在LstView中使用,需要同一位置广告不可重复请求,当在getView方法中执行广告加载方法时,需标记同一位置广告是否已经请求过,如果已请求过不再进行请求步骤,否则会出现重复无效请求导致页面闪烁。
  • 列表数据刷新后,也需要同步刷新广告

请求广告

请求广告核心方法,详细请参考demo中代码:

public class NativeExpressActivity extends BaseActivity {
    private FrameLayout container;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_native_express);
        container = findViewById(R.id.native_express_container);

        new EasyADController(this).loadNativeExpress("native_config.json",container);
    }

    public void loadNEAD(View view) {
        new EasyADController(this).loadNativeExpress("native_config.json",container);
    }
}

EasyADController中相关处理代码:

    public boolean hasNativeShow = false;
    boolean isNativeLoading = false;

    /**
     * 加载并展示原生模板信息流广告
     *
     * @param adContainer 广告的承载布局
     */
    public void loadNativeExpress(String jsonFileName, ViewGroup adContainer) {

        if (hasNativeShow) {//同一位置广告,已展示过不再重复发起请求
            EALog.d("loadNativeExpress hasNativeShow");
            return;
        }

        if (isNativeLoading) {//同一位置广告,正在请求中,不再重复请求
            EALog.d("loadNativeExpress isNativeLoading");
            return;
        }
        isNativeLoading = true;

        if (adContainer.getChildCount() > 0) {
            adContainer.removeAllViews();
        }


        //推荐:核心事件监听回调
        EANativeExpressListener listener = new EANativeExpressListener() {
            @Override
            public void onAdSucceed() {
                logAndToast(mActivity, "广告加载成功");

            }

            @Override
            public void onAdRenderSuccess() {
                logAndToast(mActivity, "广告渲染成功");

            }


            @Override
            public void onAdClose() {
                logAndToast(mActivity, "广告关闭");
            }

            @Override
            public void onAdExposure() {
                hasNativeShow = true;
                isNativeLoading = false;
                logAndToast(mActivity, "广告展示");
            }

            @Override
            public void onAdFailed(EasyAdError error) {
                isNativeLoading = false;
                logAndToast(mActivity, "广告加载失败 code=" + error.code + " msg=" + error.msg);
            }


            @Override
            public void onAdRenderFailed() {
                isNativeLoading = false;
                logAndToast(mActivity, "广告渲染失败");
            }

            @Override
            public void onAdClicked() {
                logAndToast(mActivity, "广告点击");
            }

        };
        //初始化
        final EasyAdNativeExpress easyNativeExpress = new EasyAdNativeExpress(mActivity, listener);
        baseAD = easyNativeExpress;
        easyNativeExpress.setAdContainer(adContainer);
        //必须:设置策略信息
        easyNativeExpress.setData(getJson(mActivity, jsonFileName));
        //必须:请求并展示广告
        easyNativeExpress.loadAndShow();
        logAndToast(mActivity, "广告请求中");
    }

主要API

  • EasyAdNativeExpress
方法名 方法介绍
EasyAdNativeExpress(Activity activity, EANativeExpressListener listener) 构造方法
setAdContainer(ViewGroup container) 设置广告展示承载布局
setVideoMute(boolean mute) 设置视频静音,默认true,仅优量汇生效,穿山甲在后台中配置
setYlhMaxVideoDuration(int ylhMaxVideoDuration) 优量汇特有设置,设置视频最大时长,单位秒
View getExpressADView() 获取广告的实际展示view信息,数据来源于广告SDK回调
addCustomSupplier(String sdkTag, EABaseSupplierAdapter adapter) 通用方法,添加自定义SDK的适配器
getSupplierInf() 通用方法,获取当前正在执行的渠道信息,可以在Listener的任意事件回调中获取,方便统计执行情况。
getReqId() 通用方法,获取当前策略执行的唯一id,方便统计
setData(String strategyJson) 通用方法,设置策略执行数据,为固定格式的json字符串
loadOnly() 通用方法,仅拉取广告
show() 通用方法,展示广告,和loadOnly()方法搭配使用
loadAndShow() 通用方法,拉取并展示广告
destroy() 通用方法, 销毁广告
  • EANativeExpressListener
方法名 方法介绍
onAdRenderFailed 广告渲染失败
onAdRenderSuccess 广告渲染成功
onAdSucceed() 通用回调方法,成功加载到广告
onAdExposure() 通用回调方法,广告曝光
onAdClicked() 通用回调方法,广告点击
onAdClose() 通用回调方法,广告关闭
onAdFailed(EasyAdError easyAdError) 通用回调方法,广告失败,easyAdError包含了具体的失败原因,easyAdError可能为null