菜单

原生广告

1.原生广告抽象方法实现以及广告事件的回调

1.1 原生广告需要额外实现的抽象方法

只需要继承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>用于提供原生广告的图片列表
prepareView view: 展示原生广告的容器 FrameLayout.LayoutParams layoutParams: 广告标记的位置void实现绑定原生广告的点击事件
prepareView view: 展示原生广告的容器 List<View> clickViewList:需要绑定点击事件的View列表 FrameLayout.LayoutParams layoutParams: 广告标记的位置void实现绑定原生广告的点击事件
clearView view: 展示原生广告的容器void实现移除广告点击事件的绑定
onResume-void原生广告被展示时执行
onPause-void原生广告没有展示时执行
destory-void原生广告销毁时执行

1.2 原生广告广告事件回调

自定义的广告平台信息包装在继承CustomNativeAd之后,可通过CustomNativeAd里面的方法执行广告事件的回调:

方法说明
notifyAdClicked广告点击时执行回调给开发者
notifyAdDislikeClick广告点击Dislike按钮时执行回调给开发者(没有实现可不执行)
notifyAdVideoStart广告的视频播放时执行回调给开发者(没有实现可不执行)
notifyAdVideoEnd广告的视频结束时执行回调给开发者(没有实现可不执行)

1.3 示例代码

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) {

    }
}


上一个
横幅广告
下一个
开屏广告
最近修改: 2025-05-30Powered by