只需要继承CustomNativeAdapter和实现公共的抽象方法即可
其中广告加载成功之后,需要将自定义广告平台的广告信息包装在继承CustomNativeAd对象里,通过ATCustomLoadListener.onAdCacheLoaded方法回调出去,广告的内容需要重写CustomNativeAd的方法来提供:(里面的方法实现可按照自定义广告平台来需求来实现,可以不用全部实现)
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
isNativeExpress | - | boolean | 用于判断当前的原生广告是否是模版广告 |
getCustomAdContainer | - | ViewGroup | 提供自定义广告平台固有装载原生广告的容器 |
getAdMediaView | - | View | 用于提供原生广告的大图或者视频的View(如果是模版广告需要将模版广告的View通过该方法提供) |
getTitle | - | String | 用于提供原生广告标题 |
getDescriptionText | - | String | 用于提供原生广告描述 |
getMainImageUrl | - | String | 用于提供原生广告大图url |
getIconImageUrl | - | String | 用于提供原生广告图标url |
getCallToActionText | - | String | 用于提供原生广告CTA按钮文案 |
getStarRating | - | Double | 用于提供原生广告的星级评分 |
getAdChoiceIconUrl | - | String | 用于提供原生广告的广告标识的url |
getAdFrom | - | String | 用于提供原生广告的广告来源文案 |
getImageUrlList | - | List<String> | 用于提供原生广告的图片列表 |
prepare | View view: 展示原生广告的容器 FrameLayout.LayoutParams layoutParams: 广告标记的位置 | void | 实现绑定原生广告的点击事件 |
prepare | View view: 展示原生广告的容器 List<View> clickViewList:需要绑定点击事件的View列表 FrameLayout.LayoutParams layoutParams: 广告标记的位置 | void | 实现绑定原生广告的点击事件 |
clear | View view: 展示原生广告的容器 | void | 实现移除广告点击事件的绑定 |
onResume | - | void | 原生广告被展示时执行 |
onPause | - | void | 原生广告没有展示时执行 |
destory | - | void | 原生广告销毁时执行 |
自定义的广告平台信息包装在继承CustomNativeAd之后,可通过CustomNativeAd里面的方法执行广告事件的回调:
方法 | 说明 |
---|---|
notifyAdClicked | 广告点击时执行回调给开发者 |
notifyAdDislikeClick | 广告点击Dislike按钮时执行回调给开发者(没有实现可不执行) |
notifyAdVideoStart | 广告的视频播放时执行回调给开发者(没有实现可不执行) |
notifyAdVideoEnd | 广告的视频结束时执行回调给开发者(没有实现可不执行) |
public class FacebookNativeAdapter extends CustomNativeAdapter {
String mPayload;
String unitId = "";
String unitType = "";
String unitHeight = "";
boolean isAutoPlay = false;
@Override
public void loadCustomNetworkAd(final Context context, final Map<String, Object> serverExtras, final Map<String, Object> localExtras) {
try {
if (serverExtras.containsKey("unit_id")) {
unitId = serverExtras.get("unit_id").toString();
}
if (serverExtras.containsKey("unit_type")) {
unitType = serverExtras.get("unit_type").toString();
}
if (serverExtras.containsKey("height")) {
unitHeight = serverExtras.get("height").toString();
}
} catch (Exception e) {
e.printStackTrace();
}
if (TextUtils.isEmpty(unitId)) {
if (mLoadListener != null) {
mLoadListener.onAdLoadError("", "facebook unitId is empty.");
}
return;
}
try {
if (serverExtras != null) {
isAutoPlay = Boolean.parseBoolean(serverExtras.get(CustomNativeAd.IS_AUTO_PLAY_KEY).toString());
}
} catch (Exception e) {
}
FacebookInitManager.getInstance().initSDK(context.getApplicationContext(), serverExtras);
if (serverExtras.containsKey("payload")) {
mPayload = serverExtras.get("payload").toString();
}
startAdLoad(context);
}
private void startAdLoad(final Context context) {
NativeAdListener nativeAdListener = new NativeAdListener() {
@Override
public void onMediaDownloaded(Ad ad) {
}
@Override
public void onError(Ad ad, AdError adError) {
if (mLoadListener != null) {
mLoadListener.onAdLoadError(adError.getErrorCode() + "", adError.getErrorMessage());
}
}
@Override
public void onAdLoaded(Ad ad) {
switch (unitType) {
case "1":
FacebookNativeBannerAd nativeBanner = new FacebookNativeBannerAd(context, (NativeBannerAd) ad, unitHeight);
if (mLoadListener != null) {
mLoadListener.onAdCacheLoaded(nativeBanner);
}
break;
default:
FacebookNativeAd nativeAd = new FacebookNativeAd(context, (NativeAd) ad);
if (mLoadListener != null) {
mLoadListener.onAdCacheLoaded(nativeAd);
}
break;
}
}
@Override
public void onAdClicked(Ad ad) {
}
@Override
public void onLoggingImpression(Ad ad) {
}
};
switch (unitType) {
case "1":
NativeBannerAd nativeBanner = new NativeBannerAd(context, unitId);
nativeBanner.setAdListener(nativeAdListener);
nativeBanner.loadAd();
break;
default:
NativeAd nativeAd = new NativeAd(context, unitId);
nativeAd.setAdListener(nativeAdListener);
nativeAd.loadAd();
break;
}
}
@Override
public void destory() {
}
@Override
public String getNetworkName() {
return FacebookInitManager.getInstance().getNetworkName();
}
@Override
public boolean setUserDataConsent(Context context, boolean isConsent, boolean isEUTraffic) {
return false;
}
@Override
public String getNetworkPlacementId() {
return unitId;
}
@Override
public String getNetworkSDKVersion() {
return FacebookInitManager.getInstance().getNetworkVersion();
}
}
public class FacebookNativeAd extends CustomNativeAd implements NativeAdListener {
NativeAd mFacebookNativeAd;
Context mContext;
public FacebookNativeAd(Context context, NativeAd nativeAd) {
mContext = context.getApplicationContext();
mFacebookNativeAd = nativeAd;
mFacebookNativeAd.setAdListener(this);
}
public void loadAd(String bidPayload) {
if (TextUtils.isEmpty(bidPayload)) {
mFacebookNativeAd.loadAd();
} else {
mFacebookNativeAd.loadAdFromBid(bidPayload);
}
}
// Lifecycle Handlers
@Override
public void prepare(final View view, FrameLayout.LayoutParams layoutParams) {
if (view == null) {
return;
}
try {
if (mContainer != null) {
mFacebookNativeAd.registerViewForInteraction(mContainer, mMediaView, mAdIconView);
} else {
mFacebookNativeAd.registerViewForInteraction(view, mMediaView, mAdIconView);
}
prepareFacebookAdChoiceView(view, layoutParams);
} catch (Exception e) {
}
}
private void prepareFacebookAdChoiceView(View view, FrameLayout.LayoutParams layoutParams) {
AdOptionsView adOptionsView = new AdOptionsView(view.getContext(), mFacebookNativeAd, mContainer);
if (layoutParams == null) {
layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.RIGHT | Gravity.TOP;
}
if (layoutParams.height > 0) {
float scale = mContext.getResources().getDisplayMetrics().density;
int iconSize = (int) (layoutParams.height / scale + 0.5f);
adOptionsView.setIconSizeDp(iconSize);
}
mContainer.addView(adOptionsView, layoutParams);
}
@Override
public void prepare(View view, List<View> clickViewList, FrameLayout.LayoutParams layoutParams) {
if (view == null) {
return;
}
try {
if (mContainer != null) {
mFacebookNativeAd.registerViewForInteraction(mContainer, mMediaView, mAdIconView, clickViewList);
} else {
mFacebookNativeAd.registerViewForInteraction(view, mMediaView, mAdIconView, clickViewList);
}
prepareFacebookAdChoiceView(view, layoutParams);
} catch (Exception e) {
e.printStackTrace();
}
}
NativeAdLayout mContainer;
@Override
public ViewGroup getCustomAdContainer() {
mContainer = new NativeAdLayout(mContext);
return mContainer;
}
MediaView mMediaView;
@Override
public View getAdMediaView(Object... object) {
try {
if (mMediaView != null) {
mMediaView.setListener(null);
mMediaView.destroy();
mMediaView = null;
}
mMediaView = new MediaView(mContext);
mMediaView.setListener(new MediaViewListener() {
@Override
public void onPlay(MediaView mediaView) {
}
@Override
public void onVolumeChange(MediaView mediaView, float v) {
}
@Override
public void onPause(MediaView mediaView) {
}
@Override
public void onComplete(MediaView mediaView) {
notifyAdVideoEnd();
}
@Override
public void onEnterFullscreen(MediaView mediaView) {
}
@Override
public void onExitFullscreen(MediaView mediaView) {
}
@Override
public void onFullscreenBackground(MediaView mediaView) {
}
@Override
public void onFullscreenForeground(MediaView mediaView) {
}
});
return mMediaView;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
AdIconView mAdIconView;
@Override
public View getAdIconView() {
try {
if (mAdIconView != null) {
mAdIconView.destroy();
mAdIconView = null;
}
mAdIconView = new AdIconView(mContext);
return mAdIconView;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public void clear(final View view) {
if (mMediaView != null) {
mMediaView.setListener(null);
mMediaView.destroy();
mMediaView = null;
}
if (mFacebookNativeAd != null) {
mFacebookNativeAd.unregisterView();
}
}
@Override
public void destroy() {
if (mFacebookNativeAd != null) {
mFacebookNativeAd.setAdListener(null);
mFacebookNativeAd.unregisterView();
mFacebookNativeAd.destroy();
mFacebookNativeAd = null;
}
if (mMediaView != null) {
mMediaView.setListener(null);
mMediaView.destroy();
mMediaView = null;
}
mContext = null;
if (mAdIconView != null) {
mAdIconView.destroy();
mAdIconView = null;
}
if (mContainer != null) {
mContainer.removeAllViews();
mContainer = null;
}
}
/**
* facebook listener--------------------------------------------------------------------------------
**/
@Override
public void onError(Ad ad, AdError adError) {
}
@Override
public void onAdLoaded(Ad ad) {
}
@Override
public String getTitle() {
if (mFacebookNativeAd != null) {
return mFacebookNativeAd.getAdHeadline();
}
return "";
}
@Override
public String getDescriptionText() {
if (mFacebookNativeAd != null) {
return mFacebookNativeAd.getAdBodyText();
}
return "";
}
@Override
public String getCallToActionText() {
if (mFacebookNativeAd != null) {
return mFacebookNativeAd.getAdCallToAction();
}
return "";
}
@Override
public String getAdFrom() {
if (mFacebookNativeAd != null) {
return mFacebookNativeAd.getSponsoredTranslation();
}
return "";
}
@Override
public void onAdClicked(Ad ad) {
notifyAdClicked();
}
@Override
public void onLoggingImpression(Ad ad) {
}
boolean mIsAutoPlay;
public void setIsAutoPlay(boolean isAutoPlay) {
mIsAutoPlay = isAutoPlay;
}
@Override
public void onMediaDownloaded(Ad ad) {
}
}