Skip to main content

原生横幅

一、集成建议#

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

  • nativebanner是用native来拼接的banner,跟native相比是少了大图,在特定的场景可以代替banner广告(填充率和点击率,素材内容和质量上有差异)。由于native广告分自渲染和模板渲染,模板渲染是三方广告平台返回渲染好的view,所以只有支持自渲染的广告源才能用native来拼接的banner,模板渲染类型Native无法拼接成banner。
  • nativebanner是按照banner的逻辑来实现,所以load成功以后会自动show出来,同时nativebanner也会有自动刷新等功能。
  • 高级用法——自定义渲染,开发者需要自己渲染三方平台返回的元素,并且需要在load()广告前调用。请参考NativeBanner Demo进行开发集成。

注意事项#

1、自动刷新功能使用注意事项#

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

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

3、Meta (FaceBook)#

  • (1)元素齐全:接入Meta (FaceBook)原生横幅广告必须有以下元素,缺少这些元素可能会导致不计入展示。更多了解,请看Audience Network 原生广告介绍。

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

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

3、请求和展示#

  • 不建议在oneLayerLoadFailedonAdLoadFailed回调中执行广告加载的方法。对广告平台方来说,短时间内多次请求,不容易得到填充,同时会造成多次无效请求,也可能会导致应用卡顿;如果产品逻辑要在这里发起请求,开发者需要控制时间间隔和次数,比如分别在10S、30S、60S后发起请求。
  • 不建议在onAdLoaded回调中直接执行广告展示的方法,这可能导致用户体验不佳,SDK有广告会过期自动补充功能,加载成功后会回调onAdLoaded。开发者无法精准控制广告展示的时机。可配合产品逻辑在收到onAdLoaded回调后,判断isReady()是否有可用广告,再展示广告。

二、API说明#

1、加载类API#

方法说明
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后台创建。
广告场景是用来统计进入广告场景的次数和进入场景后展示广告的次数,所以请在准确的位置调用。
了解更多,请看广告场景的调用时机和用途说明
isReady()检测是否有可用广告。
V8.6.0.1新增API
showAd()(可选)展示广告。需要和closeAutoShow()一起调用。
showAd(String adSceneId)(可选)展示广告并传入广告场景ID。需要和closeAutoShow()一起调用。
V8.6.0.1新增API
isOpenAutoRefresh()(可选)V7.1.0.1新增API。判断是否开启自动刷新。
onDestroy()销毁广告。
  • 参数说明
参数说明
adUnitId广告位ID,TradPlus后台创建。应用管理——添加应用——添加广告位。
注意广告类型创建错误会导致广告展示失败,例如用标准原生的广告位去请求激励视频广告。
sceneId广告场景ID,TradPlus后台创建。应用管理—— 广告场景。
具体如何使用,请看广告场景的调用时机和用途说明

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加载完成。
onAdIsLoading(String adUnitId)调用load之后如果收到此回调,说明广告位仍处于加载状态,无法触发新的一轮广告加载。
V9.0.0新增回调
  • 参数说明
参数说明
TPAdInfo广告位ID、三方广告平台、ecpm等信息,具体请参考回调信息说明
TPAdError广告请求失败、广告展示失败的错误码、错误信息,具体请参考错误码、错误信息说明

三、示例代码#

请参考NativeBanner Demo

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();

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;
}
}