Skip to main content

横幅广告

一.需要实现的抽象方法#

  • 开发者只需要继承TPBannerAdapter并重写相关方法:
    • 开发者调用TP SDK的loadAd() API时,会调用到自定义Adapter的loadCustomAd()方法
    • 开发者调用TP SDK的destory() API时,会调用到自定义Adapter的clean()方法
抽象方法参数说明返回值作用
loadCustomAd()context 上下文; userParams 本地配置参数;tpParams 服务器下发参数Context;Map;Map用于获取服务器下发和本地配置的参数,实现自定义广告的加载逻辑
clean()----------用于释放资源
getNetworkVersion()-----String自定义三方广告的版本号
getNetworkName()-----String自定义三方广告的名称

二.横幅广告事件回调#

(1)mLoadAdapterListener实现广告事件的回调

方法说明
loadAdapterLoadFailed(TPError)实现广告事件的加载失败回调。TPError见下面介绍。
loadAdapterLoaded(TPBaseAd)实现广告事件加载成功回调,需要将自定义广告平台的广告信息包装在继承TPBaseAd对象里回传给TP。

(2)广告加载成功之后,需要创建TPBannerAdImpl,传入自定义广告平台已经加载成功的View的对象,再通过 mLoadAdapterListener.loadAdapterLoaded()方法回调出去。

//参数1:默认传null;参数2:自定义广告平台加载成功的view
TPBannerAdImpl mTpBannerAd = new TPBannerAdImpl(null, view);
//通过loadAdapterLoaded,实现广告事件加载成功回调
mLoadAdapterListener.loadAdapterLoaded(mTpBannerAd);

(3)通过TPBannerAdImpl的对象实现展示广告事件的回调

方法说明
onAdShown()实现广告事件的展示回调。
onAdClosed()实现广告事件的关闭回调。
onAdClicked()实现广告事件的点击回调。

三.其他API说明#

  • TPError方法
TPError tpError = new TPError(NETWORK_NO_FILL);
tpError.setErrorCode(adError.getErrorCode() +"");
tpError.setErrorMessage(adError.getErrorMessage());
TPError方法说明
setTpErrorCode()设置三方的ErrorCode错误码。
setErrorMessage()设置三方的ErrorMsg错误信息。
NETWORK_NO_FILL自定义广告平台NOFILL。
ADAPTER_CONFIGURATION_ERROR自定义广告平台服务器下发参数错误。
SHOW_FAILED自定义广告平台展示失败。
  • loadCustomAd()中本地配置参数常量
常量说明
AppKeyManager.GDPR_CONSENTGDPR,了解更多见隐私规范,下同
AppKeyManager.KEY_GDPR_CHILDGDPRChild,GDPR儿童
AppKeyManager.KEY_COPPACOPPA,美国儿童在线隐私权保护法
AppKeyManager.KEY_CCPACPPA,加州消费者隐私法案

四.示例代码#

/*
* Banner类型需要继承TPBannerAdapter,并重写以下几个方法
* loadCustomAd() 用于获取服务器下发和本地配置的参数,实现自定义广告平台的加载逻辑
* clean() 当Banner广告从屏幕remove后,释放资源
* getNetworkVersion() 自定义三方源的版本号
* getNetworkName 自定义三方源的名称
* */
public class FacebookBannerAdapter extends TPBannerAdapter {
private AdView mFacebookBanner;
private String placementId;
private TPBannerAdImpl mTpBannerAd;
private static final String TAG = "FacebookBanner";
@Override
public void loadCustomAd(Context context, Map<String, Object> userParams, Map<String, String> tpParams) {
// tpParams 获取从服务器端下发的字段
if (tpParams.size() > 0 && tpParams.containsKey("placemntId")) {
placementId = tpParams.get("placemntId");
} else {
/*
* mLoadAdapterListener在oadCustomAd重写时同步生成
* 回调方法loadAdapterLoaded :广告加载成功
* 回调方法loadAdapterLoadFailed :广告加载失败
* 构造TPError方法,ADAPTER_CONFIGURATION_ERROR 服务器下发参数错误
* 方法setTpErrorCode 设置三方的ErrorCode错误码
* 方法setErrorMessage 设置三方的ErrorMsg错误信息
*
* */
if (mLoadAdapterListener != null) {
mLoadAdapterListener.loadAdapterLoadFailed(new TPError(ADAPTER_CONFIGURATION_ERROR));
}
return;
}
// userParams 获取从本地配置的参数
// 例如:海外源需要设置CCPA和COPPA,具体接入参考文档,高级功能-隐私规范部分
FacebookInitializeHelper.setUserParams(userParams,mLoadAdapterListener);
//初始化SDK
FacebookInitializeHelper.initialize(context);
//创建FB广告位对象,并按照配置下发的尺寸进行请求
mFacebookBanner = new AdView(context, placementId, AdSize.BANNER_HEIGHT_50);
//设置FB监听,并设置监听回调
AdListener adListener = new AdListener() {
@Override
public void onError(Ad ad, AdError adError) {
Log.i(TAG, "onError: code :" + adError.getErrorCode() + " , msg:" + adError.getErrorMessage());
if (mLoadAdapterListener != null) {
TPError tpError = new TPError(SHOW_FAILED);
tpError.setErrorCode(adError.getErrorCode() + "");
tpError.setErrorMessage(adError.getErrorMessage());
mLoadAdapterListener.loadAdapterLoadFailed(tpError);
}
}
@Override
public void onAdLoaded(Ad ad) {
Log.i(TAG, "onAdLoaded: ");
if (mFacebookBanner == null) {
return;
}
if (mLoadAdapterListener != null) {
//Banner类型需要创建TPBannerAdImpl,传入已经加载成功的View的对象
mTpBannerAd = new TPBannerAdImpl(null, mFacebookBanner);
//将TPBannerAdImpl对象传入loadAdapterLoaded,实现广告事件加载成功回调
mLoadAdapterListener.loadAdapterLoaded(mTpBannerAd);
}
}
@Override
public void onAdClicked(Ad ad) {
Log.i(TAG, "onAdClicked: ");
//使用mTpBannerAd实现广告事件的点击回调
if (mTpBannerAd != null) {
mTpBannerAd.adClicked();
}
}
@Override
public void onLoggingImpression(Ad ad) {
Log.i(TAG, "onLoggingImpression: ");
//使用mTpBannerAd实现广告事件的展示回调
if (mTpBannerAd != null)
mTpBannerAd.adShown();
}
};
//请求广告
mFacebookBanner.loadAd(mFacebookBanner.buildLoadAdConfig().withAdListener(adListener).build());
}
@Override
public void clean() {
Log.i(TAG, "clean: ");
if (mFacebookBanner != null) {
Views.removeFromParent(mFacebookBanner);
mFacebookBanner.destroy();
mFacebookBanner = null;
}
}
@Override
public String getNetworkVersion() {
// 自定义三方广告源的版本号
return BuildConfig.VERSION_NAME;
}
@Override
public String getNetworkName() {
// 自定义三方广告源的名称
return "audience-network";
}
}