Skip to main content

原生横幅

一、集成建议#

主要介绍在Android项目中如何集成 TradPlus SDK的原生横幅广告:

  • (1)nativebanner是用native来拼接的banner,跟native相比是少了大图,在特定的场景可以代替banner广告(填充率和点击率,素材内容和质量上有差异)。由于native广告分自渲染和模板渲染,模板渲染是三方广告平台返回渲染好的view,所以只有支持自渲染的广告源才能用native来拼接的banner,模板渲染类型Native无法拼接成banner。
  • (2)nativebanner是按照banner的逻辑来实现,所以load成功以后会自动show出来,同时nativebanner也会有自动刷新等功能。
  • (3)禁止在oneLayerLoadFailed 回调中执行广告加载的方法,否则会引起多个无用请求。
  • (4)高级用法——自定义渲染,开发者需要自己渲染三方平台返回的元素,并且需要在load()广告前调用。请参考NativeBanner Demo进行开发集成。
  • (5)开发请根据附录1:SDK日志查看与分析错误码、错误信息说明排查广告请求失败的原因

注意事项#

1.1 自动刷新功能使用#

1.2 closeAutoshow()需和showAd()方法配套使用#

如果开发者调用 closeAutoshow()方法,TP SDK不会自动调用showAd()。需要开发者在监听到loaded回调后在展示广告的位置执行showAd()

1.3 Meta (FaceBook)#

  • (1)元素齐全:接入Meta (FaceBook)原生横幅广告必须有以下元素,缺少这些元素可能会导致不计入展示

更多了解,请看Audience Network 原生广告介绍。

  • (2)图标(角标):如图1的位置是Meta的角标,开发者自测过程中请注意角标的正常显示,不能有遮挡

  • (3)容器的宽必须是match_parent,不能是wrap_content,否则会导致展示失败。

二、API说明#

2.1 加载类API#

V6.X API TPNativeBanner方法说明
TPNativeBanner(Activity activity)原生横幅广告的初始化方法。仅初始化时调用一次。
setAdListener(BannerAdListener adListener)设置广告监听,其中BannerAdListener是需要实现广告事件回调的接口类。
setAllAdLoadListener(LoadAdEveryLayerListener everyLayerListener)(可选)设置单个源维度的监听回调,其中LoadAdEveryLayerListener是需要实现广告事件回调的接口类。
setNativeAdRender(TPNativeAdRender nativeAdRender)(可选)设置自定义自渲染Native元素。 需要开发者自己渲染三方返回的元素。具体使用请参考Demo。
closeAutoShow()(可选)关闭自动展示。不调用广告加载成功后会自动展示。
使用须知:(1)必须在请求load()前调用;
(2)需要在展示广告的位置调用showAd(),否则广告加载成功后无法展示。
loadAd(String adUnitId)请求广告。adUnitId广告位ID在TradPlus后台创建。
loadAd(String adUnitId,String sceneId)(可选)请求广告并传入广告场景ID。adUnitId广告位ID在TradPlus后台创建。sceneId需和entryAdScenario()配套使用。
entryAdScenario(String sceneId)(可选)进入广告场景。需要在loadAd()后调用。 sceneId广告场景ID,在TradPlus后台创建。
广告场景是用来统计进入广告场景的次数和进入场景后展示广告的次数,所以请在准确的位置调用。
了解更多,请看广告场景的调用时机和用途说明
showAd()(可选)展示广告。需要和closeAutoShow()一起调用。
isOpenAutoRefresh()(可选)V7.1.0.1新增API。判断是否开启自动刷新。
onDestroy()销毁广告。

2.2 监听回调API#

V6.X API BannerAdListener 方法说明
onAdClicked(TPAdInfo tpAdInfo)广告被点击。事件回调监听中的TPAdInfo,请参考回调信息说明。同下
onAdImpression(TPAdInfo tpAdInfo)广告被展示。部分三方源没有该回调。AdColony、AppLovin、Unity Ads 、Admob、Mopub、Criteo、MyTarget无此回调。
onAdClosed(TPAdInfo tpAdInfo)广告被关闭。
onAdLoaded(TPAdInfo tpAdInfo, TPBaseAd tpBaseAd)广告加载成功。
onAdLoadFailed(TPAdError error)广告加载失败。事件回调监听中的TPAdError,请参考错误码&错误信息说明。同下
  • (可选)设置单个源维度的监听回调
V6.X API LoadAdEveryLayerListener 方法说明
onAdAllLoaded(boolean isSuccess)V6.4.5新增API。广告位的状态。loadAd()完毕后用于判断是否有可用广告,true表明有可用广告,false表明没有可用广告。
oneLayerLoadFailed(TPAdError adError, TPAdInfo adInfo)V6.4.5新增API。配置多个广告源,d每个广告源加载失败后会都会回调一次。
oneLayerLoaded(TPAdInfo adInfo)V6.4.5新增API。配置多个广告源,每个广告源加载成功后会都会回调一次。
onLoadAdStart(TPAdInfo tpAdInfo)请求广告后,广告开始加载。
V7.9.0 废弃。
oneLayerLoadStart(TPAdInfo tpAdInfo)每层waterfall 向三方广告源发起请求前,触发的回调。V7.9.0 新增。
onAdStartLoad(String adUnitId)每次调用load方法时返回的回调,包含自动加载等触发时机。V7.9.0 新增。
onBiddingStart(TPAdInfo tpAdInfo)V6.4.5新增API。Bidding开始加载。
onBiddingEnd(TPAdInfo tpAdInfo)V6.4.5新增API。Bidding加载完成。

三、示例代码#

请参考NativeBanner Demo

3.1 初级用法#

步骤5`closeAutoShow()`和步骤8`showAd()`必须配合调用。只调用一个方法会导致广告加载成功但无法展示。都不调用,广告加载成功后会直接展示在添加好的view上。
//1、初始化广告位。仅调用一次。
TPNativeBanner tpNativeBanner = new TPNativeBanner(activity);
//2、进入广告场景(可选)。sceneId广告场景ID,在TradPlus后台创建。使用该方法`showAd()`时需要传入sceneId。
tpNativeBanner.entryAdScenario(sceneId);
//3、设置广告监听
tpNativeBanner.setAdListener(new BannerAdListener() {...});
//4、设置每层广告源回调监听(可选)
tpNativeBanner.setAllAdLoadListener(new LoadAdEveryLayerListener() {...});
//5、关闭自动展示(可选),否则广告加载成功后会自动展示
tpNativeBanner.closeAutoShow();
//6、添加展示广告view
adContainer.addView(tpNativeBanner);
//7、请求广告。AdUnitId是广告位ID,在TradPlus后台创建。参数2可选,不使用`entryAdScenario()`,可直接传空字符串。
tpNativeBanner.loadAd("adUnitId","sceneId");
......
//8、展示广告(可选)。开发者需要在收到loaded回调后调用。
tpNativeBanner.showAd();

3.2 高级用法——自定义渲染#

  • 高级用法,开发者可以根据需要选择性使用。需要自己渲染返回的元素。
  • `setTitleView`等方法必须要调用。
  • 需要在load()广告前调用。
...
// 请求广告前调用
tpNativeBanner.setNativeAdRender(new CustomAdRender());
tpNativeBanner.loadAd("adUnitId","sceneId");
...
public class CustomAdRender extends TPNativeAdRender {
@Override
public ViewGroup createAdLayoutView() {
// 以下内容 开发者可以根据自己需求自定义
// setTitleView等方法必须要调用
LayoutInflater inflater = (LayoutInflater) NativeSplashActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup adLayout = (ViewGroup) inflater.inflate(R.layout.tp_native_splash_ad, null);
// 设置标题
TextView nativeTitleView = adLayout.findViewById(R.id.tp_native_title);
setTitleView(nativeTitleView, true);
// 设置内容
TextView nativeSubTitleView = adLayout.findViewById(R.id.tp_native_text);
setSubTitleView(nativeSubTitleView, true);
// 设置下载按钮
TextView nativeCTAView = adLayout.findViewById(R.id.tp_native_cta_btn);
setCallToActionView(nativeCTAView, true);
// 设置icon
ImageView nativeIconImageView = adLayout.findViewById(R.id.tp_native_icon_image);
setIconView(nativeIconImageView, true);
// 设置main image
ImageView nativeMainImageView = adLayout.findViewById(R.id.tp_native_main_image);
setImageView(nativeMainImageView, true);
// 设置角标的容器, 必须添加,是Meta(FaceBook) 和 MTG的角标的容器
FrameLayout adChoiceView = adLayout.findViewById(R.id.tp_ad_choices_container);
setAdChoicesContainer(adChoiceView, false);
// 设置main AdChoiceV6.8.0 开始支持 必须添加 , 除Meta和MTG外其他源的角标
ImageView nativeAdChoice = adLayout.findViewById(R.id.tp_native_ad_choice);
setAdChoiceView(nativeAdChoice, true);
return adLayout;
}
}