菜单

模版广告

1. 介绍

模版信息流广告在原生广告中使用比较简单,开发者不需要定义内部广告的UI布局,SDK会提供一个渲染完整的View给开发者放到指定的位置展示即可。如以下截图:

固定位置展示 信息流列表展示
native_one_express_demo_thumb native_list_express_demo_pic_thumb

 

2. 集成建议

(1) 启动应用通过ATNative.makeAdRequest来执行加载广告。提前进行广告的请求,以便需要触发广告时可以快速展示。

(2) 建议进入可展示广告场景后调用entryAdScenario(placementId,scenarioId)统计当前广告位的缓存状态,具体的统计说明可查看广告场景区分不同业务场景的数据

(3) 禁止在onNativeAdLoadFail回调中执行广告加载的方法,否则会引起很多无用请求且可能会导致应用卡顿。

(4) 在需要展示原生广告的位置通过ATNative.getNativeAd获取广告对象是否为空:

  • 为空:重新执行ATNative.makeAdRequest来加载广告
  • 不为空:展示NativeAd的广告对象,这时可直接再执行ATNative.makeAdRequest来预加载下一次的广告(只要调用ATNative.getNativeAd之后就可以直接预加载下一次广告)

(5) 建议配置预置策略:提高首次冷启动的广告加载效果,具体说明和接入教程见SDK预置策略使用说明

 

3. 示例代码

具体详细的示例代码可查看Demo:Taku SDK Demo,其中单个信息流广告展示可参考Demo里:NativeAdActivity.java,信息流列表集成方式可参考Demo里:NativeListActivity.java

3.1 加载广告

注意:

  • 模板广告有自己的宽高比例,可在广告平台后台进行查看。尽量在广告平台后台选择宽高比例一样或者接近的模板,在代码中以那个宽高比例传入宽高来加载、展示广告,以获得最佳展示效果。
  • ATNativeAdView的宽高必须与ATAdConst.KEY.AD_WIDTH、ATAdConst.KEY.AD_HEIGHT所对应的宽高一致,否则可能出现展示不全或者展示过小的问题
ATNative atNative;
NativeAd mNativeAd;

int adViewWidth;
int adViewHeight;

public void loadNativeAd() {
  if (atNative == null) {
     //初始化广告加载对象
      atNative = new ATNative(this, nativeTakuPlacementID, new ATNativeNetworkListener() {
                @Override
                public void onNativeAdLoaded() {
                    Log.i(TAG, "onNativeAdLoaded");
                }

                @Override
                public void onNativeAdLoadFail(AdError adError) {
                    //注意:禁止在此回调中执行广告的加载方法进行重试,否则会引起很多无用请求且可能会导致应用卡顿
                    //AdError,请参考 https://newdocs.takuad.com/docs/55cxNt
                    Log.i(TAG, "onNativeAdLoadFail:" + adError.getFullErrorInfo());
                }
            });
   }

  Map localMap = new HashMap<>();
    localMap.put(ATAdConst.KEY.AD_WIDTH, adViewWidth);//单位:px,期望展示广告的宽度
    localMap.put(ATAdConst.KEY.AD_HEIGHT, adViewHeight);//单位:px,期望展示广告的高度

  //以下针对平台可设置自适应高度(前提必须宽度有设置)
  //穿山甲(Pangle)
    localMap.put(TTATConst.NATIVE_AD_IMAGE_HEIGHT, 0);
  //腾讯广告(Tencent Ads),ADSize.AUTO_HEIGHT值为-2
    localMap.put(GDTATConst.AD_HEIGHT, ADSize.AUTO_HEIGHT);
    
    atNative.setLocalExtra(localMap);
  //发起广告请求
    atNative.makeAdRequest();

}

 

3.2 展示广告

ATNativeAdView mATNativeAdView; //渲染广告必须创建的容器

public void showNativeAd(ViewGroup adContainer, int adViewWidth) {
     /*
     为了统计场景到达率,相关信息可查阅 "https://help.takuad.com/docs/1RWLAv"
     在满足广告触发条件时调用&ldquo;进入广告场景&rdquo;方法,比如:
     ** 广告场景是在清理结束后弹出广告,则在清理结束时调用;
     * 1、先调用 "entryAdScenario"
     * 2、在调用 "ATNative#checkAdStatus#isReady" 是否可展示
     * 3、最后调用 "getNativeAd" 展示
     * 4、scenario 传入场景id后台漏斗报表才会到达场景数据(非必须)
     */
  ATNative.entryAdScenario("your Native placementID", "your scenarioID");
  if (atNative== null){ 
      return; 
  }
  if(!atNative.checkAdStatus().isReady()){
    return;
  }
  if (mATNativeAdView == null) {
     mATNativeAdView = findViewById(R.id.native_ad_view); //可在xml布局定义
  }
  
  NativeAd nativeAd = atNative.getNativeAd();
  //开发者可以在调用getNativeAd后直接使用ATNative#makeAdRequest发起预加载下一次的广告
  //loadNativeAd();
    if (nativeAd != null) {     
      if (mNativeAd != null) {
           mNativeAd.destory();
      }

      mNativeAd = nativeAd;
            mNativeAd.setNativeEventListener(new ATNativeEventListener() {
            @Override
            public void onAdImpressed(ATNativeAdView view, ATAdInfo atAdInfo) {
                //ATAdInfo可区分广告平台以及获取广告平台的广告位ID等
                //请参考 https://newdocs.takuad.com/docs/JSLSJN
                Log.i(TAG, "native ad onAdImpressed:\n" + atAdInfo.toString());   
            }

            @Override
            public void onAdClicked(ATNativeAdView view, ATAdInfo atAdInfo) {
                Log.i(TAG, "native ad onAdClicked:\n" + atAdInfo.toString());
            }

            @Override
            public void onAdVideoStart(ATNativeAdView view) {
                Log.i(TAG, "native ad onAdVideoStart");
            }

            @Override
            public void onAdVideoEnd(ATNativeAdView view) {
                Log.i(TAG, "native ad onAdVideoEnd");
            }

            @Override
            public void onAdVideoProgress(ATNativeAdView view, int progress) {
                Log.i(TAG, "native ad onAdVideoProgress:" + progress);
            }
        });

     ATNativePrepareInfo nativePrepareInfo = null;

      if (!mNativeAd.isNativeExpress()) {
            //自渲染 (如果也需要支持自渲染广告可参考自渲染广告集成方式)
            ....
       } else {
           //模板渲染 (模版渲染需要实现这步)
            mNativeAd.renderAdContainer(mATNativeAdView, null);
       }

        mNativeAd.prepare(mATNativeAdView, nativePrepareInfo);       
    } 
}

 

3.3 关闭按钮说明

开发者在渲染NativeAd之前,可设置模版广告的关闭按钮监听

 mNativeAd.setDislikeCallbackListener(new ATNativeDislikeListener() {
                @Override
                public void onAdCloseButtonClick(ATNativeAdView view, ATAdInfo entity) {
                    Log.i(TAG, "native ad onAdCloseButtonClick");
                      //在这里开发者可实现广告View的移除操作
                }
});

 

3.4 销毁广告

public void destroyAd() {
    if (mNativeAd != null) {
        mNativeAd.destory();
    }
}

详细模版广告示例代码请参考:Demo的NativeAdActivity类

上一个
自渲染摇一摇
下一个
Draw广告
最近修改: 2025-05-30Powered by