Help Center/Details/

模板渲染信息流

简介

模板渲染信息流广告: 支持图文和视频样式,开发者不用自行对广告样式进行编辑和渲染,可直接调用相关接口获取广告view去进行展示,开发者可以随时对穿山甲平台上勾选的模板进行样式上的调整。降低了接入成本的前提下,不会影响cpm的水平,仍然可以保持高的竞争力。

支持的广告尺寸:开发者在穿山甲平台上可以进行多模板、多尺寸的勾选。模板渲染信息流广告支持开发者调整、编辑

注意:不允许开发者在view添加按钮及对广告拦截处理。

权限

模板信息流广告: 默认提供

模板渲染信息流请求方法(TTNativeExpressAd)

注意: 模板广告请求方法需要开发者设置setExpressViewAcceptedSize参数,单位dp。
高度设置0,返回的view则会根据平台上勾选的不同模板做高度自适应。

创建TTAdNative对象

//创建TTAdNative对象,createAdNative(Context context) context需要传入Activity对象
TTAdNative mTTAdNative = TTAdSdk.getAdManager().createAdNative(this);

创建广告请求AdSlot

AdSlot adSlot = new AdSlot.Builder()
        .setCodeId(codeId) //广告位id
        .setSupportDeepLink(true)
        .setAdCount(1) //请求广告数量为1到3条
        .setExpressViewAcceptedSize(expressViewWidth,0) //期望模板广告view的size,单位dp
        .setAdLoadType(PRELOAD)//推荐使用,用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载,方便后续为开发者优化相关策略
        .build();

参数说明

参数 说明
setCodeId 平台创建的代码位ID 以9开头9位数字
setAdCount 请求数量1-3条。建议设置为1
setExpressViewAcceptedSize 设置请求模板广告素材的尺寸 单位:dp
setAdLoadType() 用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载,方便后续为开发者优化相关策略,传入参数值:
UNKNOWN//未知,默认值,开发者未传入,或当此次加载的广告用途未知时使用
PRELOAD//预加载,当此次加载的广告用途为预加载(当作缓存)时使用
LOAD//实时加载,当此次加载的广告用途为实时播放时使用

请求广告

调用loadNativeExpressAd(AdSlot adSlot, @NonNull NativeExpressAdListener listener)异步加载广告
注意:点击事件注册时机在广告render之前 否则会影响展示、点击的数据上报

//请求广告
mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {

    //广告请求失败
    @Override
    public void onError(int code, String message) {
   
    }

    //广告请求成功
    @Override
    public void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) {

    }
});

NativeExpressAdListener说明

回调 说明
onError() 广告请求失败回调 返回的错误码(code)表示广告请求失败的原因,详情请见链接
onNativeExpressAdLoad() 广告请求成功的回调,客户端可在该回调中调用render()进行广告渲染

广告点击事件监听器

mTTAd.setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() {
    
    //广告点击回调
    @Override
    public void onAdClicked(View view, int type) {

    }
	
	//广告展示回调
    @Override
    public void onAdShow(View view, int type) {
   }

	//广告渲染失败回调
    @Override
    public void onRenderFail(View view, String msg, int code) {
       
    }

	//广告渲染成功回调
    @Override
    public void onRenderSuccess(View view, float width, float height) {
       
    }
});

ExpressAdInteractionListener说明

回调 说明
onAdClicked() 广告点击的回调,点击后的动作由sdk控制 点击量 可在穿山甲提供的方法里进行埋点统计
onAdShow() 广告展示回调,展示量 可在穿山甲提供的方法里进行埋点统计
onRenderFail() 个性化模板渲染失败
onRenderSuccess() 个性化模板渲染成功,客户端可在该回调中把广告的view直接add要显示的控件

Dislike监听

dislike逻辑有助于我们提升广告体验和匹配度,请按照接入说明设置:
以下逻辑为穿山甲3500版本SDK中逻辑,3500以下版本SDK开发者可参考对应demo进行集成

 /**
         * 设置广告的不喜欢,开发者可自定义样式
         * @param ad
         * @param customStyle 是否自定义样式,true:样式自定义
         */
        private void bindDislike(TTNativeExpressAd ad, boolean customStyle) {
        if (customStyle) {
            //使用自定义样式,用户选择"为什么看到此广告",开发者需要执行startPersonalizePromptActivity逻辑进行跳转
            final DislikeInfo dislikeInfo = ad.getDislikeInfo();
            if (dislikeInfo == null || dislikeInfo.getFilterWords() == null || dislikeInfo.getFilterWords().isEmpty()) {
                return;
            }
            final DislikeDialog dislikeDialog = new DislikeDialog(this, dislikeInfo);
            dislikeDialog.setOnDislikeItemClick(new DislikeDialog.OnDislikeItemClick() {
                @Override
                public void onItemClick(FilterWord filterWord) {
                    //屏蔽广告
                    TToast.show(mContext, "点击 " + filterWord.getName());
                    //用户选择不喜欢原因后,移除广告展示
                    mExpressContainer.removeAllViews();
                }
            });
            dislikeDialog.setOnPersonalizationPromptClick(new DislikeDialog.OnPersonalizationPromptClick() {
                @Override
                public void onClick(PersonalizationPrompt personalizationPrompt) {
                    TToast.show(mContext, "点击了为什么看到此广告");
                }
            });
            ad.setDislikeDialog(dislikeDialog);
            return;
        }
        //使用默认模板中默认dislike弹出样式
        ad.setDislikeCallback(BannerExpressActivity.this, new TTAdDislike.DislikeInteractionCallback() {
            @Override
            public void onShow() {

            }

            @Override
            public void onSelected(int position, String value, boolean enforce) {
                TToast.show(mContext, "点击 " + value);
                mExpressContainer.removeAllViews();
                //用户选择不喜欢原因后,移除广告展示
                if (enforce) {
                    TToast.show(mContext, "模版Banner 穿山甲sdk强制将view关闭了");
                }
            }

            @Override
            public void onCancel() {
                TToast.show(mContext, "点击取消 ");
            }

            @Override
            public void onRefuse() {

            }

        });
        }

DislikeInteractionCallback说明

回调 说明
onItemClick() 自定义样式情况下用户点击filterWord回调
onClick() 自定义样式情况下用户点击了”为什么看到此广告“
onSelected() 默认dislike样式,点击filterWord回调。开发者可以在此回调中移除广告
onCancel() 默认dislike样式,点击取消回调
onShow() 默认dislike样式,dislike弹窗展示回调
onRefuse() 默认dislike样式,用户重复点击dislike按钮回调。3600版本废除

销毁广告对象

已经展示过且不再使用的广告需要调用destroy方法及时对广告进行销毁,避免内存占用过大的情况发生。

    protected void onDestroy() {
        super.onDestroy();
        if (mTTAd != null) {
            mTTAd.destroy();
        }
    }
    

参考Demo

个性化模板信息流详细代码请参考Demo中的NativeExpressActivity,如果在信息流场景使用参考NativeExpressListActivity

模板渲染信息流注意点:

1、模板尺寸setExpressViewAcceptedSize的参数设置中,如果高度设置为0,则高度会自适应

2、模板信息流关闭弹窗不支持去掉,dislike逻辑有助于提升广告体验和匹配度

3、广告的点击事件注册时机需要在广告render之前,否则会影响展示、点击的数据上报。

Did the content solve your problem?
Contact us