Skip to main content

标准原生

一、集成建议#

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

  • (1)原生广告是可以由开发者控制大小,尽可能融入到app的内容中去,从而提升广告的点击和转化。
  • (2)禁止在oneLayerLoadFailed 回调中执行广告加载的方法,否则会引起多个无用请求。
  • (3)信息流是标准原生的一种使用场景,不是一种广告类型。就是在listview或者recyclerview中展示native广告(具体要根据开发者的场景来做调试)。这种场景下开发者可能会有一次请求多个广告的需求。可参考NativeSlot Demo进行开发集成。
  • (4)原生广告分自渲染模板渲染
类型说明
自渲染三方广告平台返回广告素材由开发者来拼接成的类型。三方后台的类型选择需要和TP后台一致,否则会请求失败。
模板渲染三方广告平台返回渲染好的view,开发者直接添加到一个容器就可以展示出来。

注意事项#

1.1 Meta (FaceBook)#

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

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

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

二、TPNative API说明#

2.1 初始化广告位#

方法说明
TPNative(Activity activity, String adUnitId)初始化广告位。 仅初始化时调用一次。
TPNative(Activity activity, String adUnitId, boolean isAutoLoad)isAutoLoad设置自动加载模式。默认关闭,true开启。不推荐。很多源没有Closed回调。

2.2 加载、展示以及销毁广告#

方法说明
loadAd()请求广告
showAd(ViewGroup adContainer, int layoutId)展示广告(方法一)—— 自渲染 & 模版
参数1 adContainer: 传空容器会导致展示失败。
参数2 layoutId 说明:
(1) 将三方返回的自渲染元素的拼接好的布局,模版类型会直接展示;
(2)开发者可以从自动打包平台下载的layout文件夹中获取布局文件;
(3)不清楚自渲染和模版的区别可看上文集成建议中的区分;
(4)禁止开发者修改布局文件中的android:id: 资源ID,会导致自渲染广告的元素无法找到对应id而展示失败;
(5)开发者可以调整元素位置;
(6)禁止开发者删除ad_choices等元素,缺少元素可能会导致某些广告平台不计入展示,详细了解请看上文集成建议中注意事项。
TP提供的布局文件中tp_ad_choices_container 为Meta(FaceBook)和MTG的角标的容器;tp_native_ad_choice则是其他广告平台的角标Id,均不能删除。
V6.9.1+版本优化android:id: 资源ID,开发者要更新tp_native_ad_list_item.xml文件,如果是自定义模版,也需要更新id。
showAd(ViewGroup adContainer, int layoutId, String sceneId)展示广告并设置场景ID(方法二)—— 自渲染 & 模版
需和进入广告场景方法一起使用。
showAd(ViewGroup adContainer, TPNativeAdRender adRender, String adSceneId)自定义渲染方式展示广告(方法三)—— 自渲染
开发者要自己渲染三方返回的元素,并且需要在load()广告前调用。TPNativeAdRender的使用需要参考Demo。
仅自渲染类型支持。
entryAdScenario(String sceneId)进入广告场景
需和(方法二)一起使用。
广告场景是用来统计进入广告场景的次数和进入场景后展示广告的次数,所以请在准确的位置调用。
onDestroy()销毁广告。
  • 参数说明
参数说明
广告位ID adUnitIdTradPlus后台创建。应用管理——添加应用——添加广告位。注意广告类型创建错误会导致广告展示失败,例如用标准原生的广告位去请求激励视频广告。
广告场景ID sceneIdTradPlus后台创建。应用管理—— 广告场景。设置场景ID需和entryAdScenario(sceneId)配套使用。
如果不调用entryAdScenario(sceneId),可直接用方法一来展示广告。具体在什么场景调用,请看广告场景的调用时机和用途说明
自动加载模式 isAutoLoadtrue开启,false 关闭。
原生类型的开启自动加载模式后只会在onAdClosed后会自动加载广告。不推荐。很多源没有Closed回调。

2.3 其他#

方法说明
getNativeAd()获取TP的缓存对象。
(1)开发者如需要获取更多三方源的信息,可调用该API。
(2)获取后就会从TradPlus的缓存池中删除,所以不能重复调用,需要将get到的TPCustomNativeAd对象保存下来进行处理。
(3)可直接通过TPCustomNativeAd调用showAd()。
// 获取TP缓存缓存对象
TPCustomNativeAd mCustomNativeAd;
TPNative tpNative = new TPNative(activity,"AdUnitId");
tpNative.setAdListener(new NativeAdListener() {
@Override
public void onAdLoaded(TPAdInfo adInfo, TPBaseAd tpBaseAd) {
// 获取TP缓存缓存对象
mCustomNativeAd = tpNative.getNativeAd();
if(mCustomNativeAd.getCustomNetworkId() != null)
String id = mCustomNativeAd.getCustomNetworkId(); // 广告源的id
if(mCustomNativeAd.getCustomNetworkName() != null)
String name = mCustomNativeAd.getCustomNetworkName(); // 广告源的名称
...
mCustomNativeAd.showAd(adContainerView, R.layout.tp_native_ad_list_item, "");
}
....
});
  • TPCustomNativeAd API 介绍
方法类型说明
getCustomNetworkId()String返回三方广告网络编号表。
getCustomNetworkName()String三方广告平台名称。
getCustomNetworkObj()Object返回三方的对象(如果没有特殊需求不建议使用)
(1)TP将无法获取展示后包括展示、点击、广告关闭等监听回调;
(2)原生模版和自渲染都能获取到;
(3)原生自渲染类型的广告,开发者可以直接获取这个对象拿到三方提供的素材。
getNativeAdView()TPNativeAdView获取TP包装过的对象。
(1)仅针对原生自渲染类型;
(2)开发者可以获取TP包装过的所有素材。
showAd(ViewGroup adContainer, int layoutId, String adSceneId)-展示广告。参数见上文展示广告API介绍。
onDestroy()-释放资源。

2.4 监听回调#

方法说明
setAdListener(NativeAdListener adListener)设置广告监听。
其中NativeAdListener是需要实现广告事件回调的接口类。
setAllAdLoadListener(LoadAdEveryLayerListener everyLayerListener)(可选) 设置单个源维度的监听回调。
V6.4.5新增API。其中LoadAdEveryLayerListener是需要实现广告事件回调的接口类。单个源维度是指TP端的一个广告位下配置多个广告源缓存,每个源的回调。
  • NativeAdListener(广告位维度)
方法说明
onAdClicked(TPAdInfo tpAdInfo)广告被点击。
onAdImpression(TPAdInfo tpAdInfo)广告被展示。
onAdClosed(TPAdInfo tpAdInfo)广告被关闭。
onAdLoaded(TPAdInfo tpAdInfo, TPBaseAd tpBaseAd)广告加载成功。
onAdLoadFailed(TPAdError error)广告加载失败。
onAdShowFailed(TPAdError error, TPAdInfo tpAdInfo)广告展示失败。
  • LoadAdEveryLayerListener(可选)(单个源维度)V6.4.5新增API
方法说明
onAdAllLoaded(boolean isSuccess)广告位的状态。loadAd()完毕后用于判断是否有可用广告,true表明有可用广告,false表明没有可用广告。
oneLayerLoadFailed(TPAdError adError, TPAdInfo adInfo)配置多个广告源缓存,当每个广告源加载失败后会都会回调一次。
oneLayerLoaded(TPAdInfo adInfo)配置多个广告源缓存,当每个广告源加载成功后会都会回调一次。
onLoadAdStart(TPAdInfo tpAdInfo)请求广告后,广告开始加载。
V7.9.0 废弃。
oneLayerLoadStart(TPAdInfo tpAdInfo)每层waterfall 向三方广告源发起请求前,触发的回调。V7.9.0 新增。
onAdStartLoad(String adUnitId)每次调用load方法时返回的回调,包含自动加载等触发时机。V7.9.0 新增。
onBiddingStart(TPAdInfo tpAdInfo)Bidding开始加载。
onBiddingEnd(TPAdInfo tpAdInfo, TPAdError tpAdError)Bidding加载完成。
V7.3.0新增回调参数TPAdError
  • 监听回调中的参数说明 V6.2.4新增API
参数说明
TPAdInfo广告位ID、三方广告平台、ecpm等信息,具体请参考回调信息说明
TPAdError广告请求失败、广告展示失败的错误码、错误信息,具体请参考错误码、错误信息说明

三、示例代码#

请参考Native Demo

3.1 初级用法#

TPNative tpNative = new TPNative(activity,"AdUnitId");
tpNative.entryAdScenario(sceneId);
tpNative.setAdListener(new NativeAdListener() {
@Override
public void onAdLoaded(TPAdInfo tpAdInfo, TPBaseAd tpBaseAd) {
// 广告加载成功
// 展示广告。需要在loaded回调后调用。参数2 layoutId布局,布局文件从Download的SDK文件中获取。参数3 不使用`entryAdScenario()`,可直接传空字符串。
tpNative.showAd(adContainer, R.layout.tp_native_ad_list_item, sceneId);
}
@Override
public void onAdClicked(TPAdInfo tpAdInfo) {}
@Override
public void onAdImpression(TPAdInfo tpAdInfo) {}
@Override
public void onAdShowFailed(TPAdError tpAdError, TPAdInfo tpAdInfo) {}
@Override
public void onAdLoadFailed(TPAdError tpAdError) {
Log.i(TAG, "onAdLoadFailed: 加载失败 , code : "+ tpAdError.getErrorCode() + ", msg :" + tpAdError.getErrorMsg());
}
@Override
public void onAdClosed(TPAdInfo tpAdInfo) {}
});
// 设置每层广告源回调监听(可选)
tpNative.setAllAdLoadListener(new LoadAdEveryLayerListener() {...});
......
tpNative.loadAd();

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

  • 高级用法,开发者可以根据需要选择性使用。需要自己渲染返回的元素。
  • 需要在load()广告前调用。
public class CustomAdRender extends TPNativeAdRender {
@Override
public ViewGroup createAdLayoutView() {
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;
}
}