admin
2021-03-09 6aed6290ad05fe2aa125bb8e804e2e8c2f13a613
BuWanVideo/src/com/weikou/beibeivideo/util/ad/ExpressAdManager.java
@@ -1,17 +1,29 @@
package com.weikou.beibeivideo.util.ad;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.bytedance.sdk.openadsdk.AdSlot;
import com.bytedance.sdk.openadsdk.TTAdDislike;
import com.bytedance.sdk.openadsdk.TTAdManager;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTFeedAd;
import com.bytedance.sdk.openadsdk.TTNativeExpressAd;
import com.google.gson.Gson;
import com.qq.e.ads.cfg.VideoOption;
import com.qq.e.ads.nativ.ADSize;
import com.qq.e.ads.nativ.NativeExpressAD;
import com.qq.e.ads.nativ.NativeExpressADView;
import com.qq.e.ads.nativ.express2.AdEventListener;
import com.qq.e.ads.nativ.express2.NativeExpressAD2;
import com.qq.e.ads.nativ.express2.NativeExpressADData2;
import com.qq.e.ads.nativ.express2.VideoOption2;
import com.qq.e.comm.util.AdError;
import com.weikou.beibeivideo.entity.ad.ExpressAdContainer;
import com.weikou.beibeivideo.ui.recommend.SearchActivity;
import com.weikou.beibeivideo.util.BeibeiConstant;
import com.weikou.beibeivideo.util.DimenUtils;
@@ -22,22 +34,23 @@
 * 信息流广告管理
 */
public class ExpressAdManager {
    public final static int SOURCE_GDT = 1;//广点通
    public final static int SOURCE_CSJ = 2;//穿山甲
    int sourceType = SOURCE_GDT;
    final static String TAG = "ExpressAdManager";
    AdUtil.AD_TYPE sourceType = AdUtil.AD_TYPE.gdt;
    private TTAdNative mTTAdNative;
    private Context mContext;
    public ExpressAdManager(int adSource, Context context) {
    public ExpressAdManager(AdUtil.AD_TYPE adSource, Context context) {
        sourceType = adSource;
        this.mContext = context;
        if (sourceType == SOURCE_CSJ) {
        if (sourceType == AdUtil.AD_TYPE.csj) {
            TTAdManager ttAdManager = TTAdManagerHolder.get();
            mTTAdNative = ttAdManager.createAdNative(context);
            TTAdManagerHolder.get().requestPermissionIfNecessary(context);
//            TTAdManagerHolder.get().requestPermissionIfNecessary(context);
        }
    }
@@ -53,24 +66,48 @@
     * @param adLoadListener
     */
    public void loadAd(int widthDP, int heightDP, String pid, int count, final IAdLoadListener adLoadListener) {
        if (sourceType == SOURCE_GDT) {
            loadGDT(pid, count, new IGDTAdLoadListener() {
        if (sourceType == AdUtil.AD_TYPE.gdt) {
            loadGDT(pid, widthDP, heightDP, count, new IGDTAdLoadListener() {
                @Override
                public void onSuccess(List<NativeExpressADView> adList) {
                    List<ExpressAdContainer> adContainerList = new ArrayList<>();
                    for (NativeExpressADView adView : adList) {
                        adContainerList.add(new ExpressAdContainer(adView));
                    }
                    if (adList != null)
                        for (NativeExpressADView adView : adList) {
                            adContainerList.add(new ExpressAdContainer(adView));
                        }
                    adLoadListener.onSuccess(adContainerList);
                }
                @Override
                public void onSuccess2(List<NativeExpressADData2> adList) {
                }
            }, mContext);
        } else if (sourceType == AdUtil.AD_TYPE.gdt2) {
            loadGDT2(pid, widthDP, heightDP, count, new IGDTAdLoadListener() {
                @Override
                public void onSuccess(List<NativeExpressADView> adList) {
                }
                @Override
                public void onSuccess2(List<NativeExpressADData2> adList) {
                    List<ExpressAdContainer> adContainerList = new ArrayList<>();
                    if (adList != null)
                        for (NativeExpressADData2 ad : adList) {
                            adContainerList.add(new ExpressAdContainer(ad));
                        }
                    adLoadListener.onSuccess(adContainerList);
                }
            }, mContext);
        } else if (sourceType == SOURCE_CSJ) {
        } else if (sourceType == AdUtil.AD_TYPE.csj) {
            loadCSJ(pid, widthDP, heightDP, count, new ICSJAdLoadListener() {
                @Override
                public void onSuccess(List<TTFeedAd> adList) {
                public void onSuccess(List<TTNativeExpressAd> adList) {
                    List<ExpressAdContainer> adContainerList = new ArrayList<>();
                    if (adList != null) {
                        for (TTFeedAd adView : adList) {
                        for (TTNativeExpressAd adView : adList) {
                            adContainerList.add(new ExpressAdContainer(adView));
                        }
                    }
@@ -83,43 +120,223 @@
    /**
     * 加载推荐大图广告
     *
     * @param adLoadListener
     */
    public void loadRecommendLargeAd(final IAdLoadListener adLoadListener) {
        //加载大图
        String pid = null;
        if (sourceType == SOURCE_CSJ) {
            pid = "945375047";
        } else if (sourceType == SOURCE_GDT) {
            pid = BeibeiConstant.GDT_RECOMMAND_NATIVE;
        }
        //获取屏幕的宽
        int deviceWidth = DimenUtils.getScreenWidth(mContext);
        deviceWidth = DimenUtils.px2dip(mContext, deviceWidth);
        int width = deviceWidth - 20;
        int height = (int) (width * 0.625);
        loadAd(width, height, pid, 2, adLoadListener);
        int width = deviceWidth - 6;
        int height = (int) (width * 0.8);
        String pid = null;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = CSJConstant.RECOMMEND_BIG_IMG_AD;
            height = (int) (width * 0.56);
        } else if (sourceType == AdUtil.AD_TYPE.gdt) {
            pid = BeibeiConstant.GDT_RECOMMAND_NATIVE;
        } else if (sourceType == AdUtil.AD_TYPE.gdt2) {
            pid = GDTConstant.PID_HOME_RECOMMEND_BIG_IMG;
        }
        //获取屏幕的宽
        loadAd(width, height, pid, 1, adLoadListener);
    }
    /**
     * 加载推荐小图广告
     *
     * @param adLoadListener
     */
    public void loadRecommendSmallAd(final IAdLoadListener adLoadListener) {
        //加载大图
        String pid = null;
        if (sourceType == SOURCE_CSJ) {
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = "945375047";
        } else if (sourceType == SOURCE_GDT) {
        } else if (sourceType == AdUtil.AD_TYPE.gdt) {
            pid = BeibeiConstant.GDT_RECOMMAND_MIN_NATIVE;
        }
        //获取屏幕的宽
        int deviceWidth = DimenUtils.getScreenWidth(mContext);
        deviceWidth = DimenUtils.px2dip(mContext, deviceWidth);
        int width = (deviceWidth - 30) / 2;
        int height = (int) (width * 0.625);
        loadAd(640, 320, pid, 1, adLoadListener);
        int height = (int) (width * 0.85);
        loadAd(width, height, pid, 1, adLoadListener);
    }
    /**
     * 视频播放器底部小广告
     *
     * @param adLoadListener
     */
    public void loadVideoDetailPlayerBottomAd(final IAdLoadListener adLoadListener) {
        Log.i(TAG, "loadVideoDetailPlayerBottomAd");
        //加载大图
        String pid = null;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = CSJConstant.VIDEO_DETAIL_PLAYER_BOTTOM;
        } else if (sourceType == AdUtil.AD_TYPE.gdt2) {
            pid = GDTConstant.PID_2_VIDEO_DETAIL_PLAY_EXPRESS1;
        }
        if (mContext == null)
            return;
        //获取屏幕的宽
        int deviceWidth = DimenUtils.getScreenWidth(mContext);
        deviceWidth = DimenUtils.px2dip(mContext, deviceWidth);
        int width = (deviceWidth - 20);
        int height = 100;
        loadAd(width, height, pid, 1, adLoadListener);
    }
    /**
     * 相关推荐底部小广告
     *
     * @param adLoadListener
     */
    public void loadVideoDetailRelativeVideoBottomAd(final IAdLoadListener adLoadListener) {
        //加载大图
        String pid = null;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = CSJConstant.VIDEO_DETAIL_GUESSLIKE_TOP;
        } else if (sourceType == AdUtil.AD_TYPE.gdt2) {
            pid = GDTConstant.PID_2_VIDEO_DETAIL_PLAY_EXPRESS2;
        }
        if (mContext == null)
            return;
        //获取屏幕的宽
        int deviceWidth = DimenUtils.getScreenWidth(mContext);
        deviceWidth = DimenUtils.px2dip(mContext, deviceWidth);
        int width = (deviceWidth - 20);
        int height = (int) (width * 0.5625);
        loadAd(width, height, pid, 1, adLoadListener);
    }
    /**
     * 加载分类小图
     *
     * @param adLoadListener
     */
    public void loadRecommendCategorySmallAd(final IAdLoadListener adLoadListener) {
        //加载大图
        String pid = null;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = "945375047";
        } else if (sourceType == AdUtil.AD_TYPE.gdt) {
            pid = BeibeiConstant.GDT_RECOMMEND_CATEGORY_MIN_NATIVE;
        }
        //获取屏幕的宽
        int deviceWidth = DimenUtils.getScreenWidth(mContext);
        deviceWidth = DimenUtils.px2dip(mContext, deviceWidth);
        int width = (deviceWidth - 30) / 2;
        int height = (int) (width * 0.85);
        loadAd(width, height, pid, 1, adLoadListener);
    }
    /**
     * 搜索结果页小图
     *
     * @param adLoadListener
     */
    public void loadSearchResultSmallAd(int count, final IAdLoadListener adLoadListener) {
        //加载大图
        String pid = null;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = "945379581";
        } else if (sourceType == AdUtil.AD_TYPE.gdt2) {
            pid = BeibeiConstant.GDT_SEARCH_RESULT_MIN_NATIVE;
        }
        //获取屏幕的宽
        int deviceWidth = DimenUtils.getScreenWidth(mContext);
        deviceWidth = DimenUtils.px2dip(mContext, deviceWidth);
        int width = (deviceWidth - 20);
        int height = 75;
        loadAd(width, height, pid, count, adLoadListener);
    }
    /**
     * 加载视频列表小广告
     *
     * @param count
     * @param columns
     * @param adLoadListener
     */
    public void loadVideoListSmallAd(int count, int columns, final IAdLoadListener adLoadListener) {
        //加载大图
        String pid = null;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = "945406595";
        } else if (sourceType == AdUtil.AD_TYPE.gdt2) {
            if (columns == 3)
                pid = GDTConstant.PID_2_VIDEO_LIST_SMALL_AD_COLUMN3;
            else if (columns == 2)
                pid = GDTConstant.PID_2_VIDEO_LIST_SMALL_AD_COLUMN2;
        }
        //获取屏幕的宽
        int deviceWidth = DimenUtils.getScreenWidth(mContext);
        deviceWidth = DimenUtils.px2dip(mContext, deviceWidth);
        int width = 0;
        int height = 0;
        if (columns == 2) {
            width = (deviceWidth - 30) / 2;
            height = (int) (width * 0.85);
        } else if (columns == 3) {
            width = (deviceWidth - 20 - 9 * 2) / 3;
            height = (int) (width * 1.6);
        }
        loadAd(width, height, pid, count, adLoadListener);
    }
    /**
     * 加载APP退出广告
     *
     * @param adLoadListener
     */
    public void loadAppExitAd(final IAdLoadListener adLoadListener) {
        //加载大图
        String pid = null;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = CSJConstant.APP_EXIT;
        } else if (sourceType == AdUtil.AD_TYPE.gdt) {
            pid = BeibeiConstant.GDT_EXIT_DIALOG;
        }
        //获取屏幕的宽
        int deviceWidth = DimenUtils.getScreenWidth(mContext);
        deviceWidth = DimenUtils.px2dip(mContext, deviceWidth);
        int width = deviceWidth * 3 / 4;
        int height = (int) (width / 1.78f);
        loadAd(width, height, pid, 1, adLoadListener);
    }
    /**
     * 加载视频搜索广告
     *
     * @param adLoadListener
     */
    public void loadSearchAd(int widthDP, final IAdLoadListener adLoadListener) {
        //加载大图
        String pid = null;
        if (sourceType == AdUtil.AD_TYPE.csj) {
            pid = CSJConstant.VIDEO_SEARCH;
        } else if (sourceType == AdUtil.AD_TYPE.gdt) {
            pid = BeibeiConstant.GDT_SEARCH_NATIVE;
        }
        int height = (int) (widthDP / 1.78f);
        loadAd(widthDP, height, pid, 1, adLoadListener);
    }
    /**
     * 加载广点通广告
@@ -129,9 +346,12 @@
     * @param adLoadListener
     * @param context
     */
    private void loadGDT(String positionId, int count, final IGDTAdLoadListener adLoadListener, Context context) {
    private void loadGDT(String positionId, int widthDP, int heightDP, int count, final IGDTAdLoadListener adLoadListener, Context context) {
        NativeExpressAD nativeExpressAD = new NativeExpressAD(context, new ADSize(ADSize.FULL_WIDTH, ADSize.AUTO_HEIGHT),
                positionId, new NativeExpressAD.NativeExpressADListener() {
            @Override
            public void onADLoaded(List<NativeExpressADView> list) {
                if (adLoadListener != null)
@@ -150,6 +370,7 @@
            @Override
            public void onADExposure(NativeExpressADView nativeExpressADView) {
            }
            @Override
@@ -183,12 +404,51 @@
                    adLoadListener.onSuccess(null);
            }
        }); // 传入Activity
        // 注意:如果您在联盟平台上新建原生模板广告位时,选择了支持视频,那么可以进行个性化设置(可选)
        nativeExpressAD.setVideoOption(new VideoOption.Builder()
                .setAutoPlayPolicy(VideoOption.AutoPlayPolicy.WIFI) // WIFI 环境下可以自动播放视频
                .setAutoPlayMuted(true) // 自动播放时为静音
                .build()); //
        nativeExpressAD.setVideoPlayPolicy(VideoOption.VideoPlayPolicy.AUTO);
        nativeExpressAD.loadAD(count);
    }
    /**
     * 2.0版本广点通原生
     *
     * @param positionId
     * @param widthDP
     * @param heightDP
     * @param count
     * @param adLoadListener
     * @param context
     */
    private void loadGDT2(String positionId, int widthDP, int heightDP, int count, final IGDTAdLoadListener adLoadListener, Context context) {
        Log.i(TAG, String.format("loadGDT2:positionId-%s  widthDP-%s heightDP-%s", positionId, widthDP, heightDP));
        NativeExpressAD2 nativeExpressAD2 = new NativeExpressAD2(context, positionId, new NativeExpressAD2.AdLoadListener() {
            @Override
            public void onLoadSuccess(List<NativeExpressADData2> list) {
                if (adLoadListener != null)
                    adLoadListener.onSuccess2(list);
            }
            @Override
            public void onNoAD(AdError adError) {
                if (adLoadListener != null)
                    adLoadListener.onSuccess2(null);
            }
        });
        nativeExpressAD2.setAdSize(widthDP, heightDP);
        VideoOption2.Builder builder = new VideoOption2.Builder();
        builder.setAutoPlayPolicy(VideoOption2.AutoPlayPolicy.WIFI) // WIFI 环境下可以自动播放视频
                .setAutoPlayMuted(true) // 自动播放时为静音
                .setDetailPageMuted(false)  // 视频详情页播放时不静音
                .setMaxVideoDuration(0) // 设置返回视频广告的最大视频时长(闭区间,可单独设置),单位:秒,默认为 0 代表无限制,合法输入为:5<=maxVideoDuration<=60. 此设置会影响广告填充,请谨慎设置
                .setMinVideoDuration(0); // 设置返回视频广告的最小视频时长(闭区间,可单独设置),单位:秒,默认为 0 代表无限制, 此设置会影响广告填充,请谨慎设置
        nativeExpressAD2.setVideoOption2(builder.build());
        nativeExpressAD2.loadAd(count);
    }
    /**
@@ -205,32 +465,411 @@
        AdSlot adSlot = new AdSlot.Builder()
                .setCodeId(codeId)
                .setSupportDeepLink(true)
                .setImageAcceptedSize(width, height)
                .setExpressViewAcceptedSize(width, height)
                .setAdCount(count) //请求广告数量为1到3条
                .build();
        mTTAdNative.loadFeedAd(adSlot, new TTAdNative.FeedAdListener() {
        mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {
            @Override
            public void onError(int i, String s) {
                adLoadListener.onSuccess(null);
            }
            @Override
            public void onFeedAdLoad(List<TTFeedAd> list) {
            public void onNativeExpressAdLoad(List<TTNativeExpressAd> list) {
                adLoadListener.onSuccess(list);
            }
        });
    }
    /**
     * 渲染模板和填充广告
     *
     * @param activity
     * @param ad
     * @param fl_ad
     * @param adEventListener
     */
    public static void renderAndFillAd(Activity activity, final ExpressAdContainer ad, final FrameLayout fl_ad, final IAdEventListener adEventListener) {
        if (ad == null) {//广告为空
            fl_ad.setVisibility(View.GONE);
        } else {
            fl_ad.setVisibility(View.VISIBLE);
            if (ad.getGdt() != null) {
                if (fl_ad.getChildCount() > 0 && fl_ad.getChildAt(0) == ad.getGdt()) {
                    return;
                }
                fl_ad.removeAllViews();
                ad.getGdt().render();
                if (ad.getGdt().getParent() != null) {
                    ((ViewGroup) ad.getGdt().getParent()).removeAllViews();
                }
                fl_ad.addView(ad.getGdt());
            } else if (ad.getGdt2() != null) {
                if (fl_ad.getChildCount() > 0 && fl_ad.getChildAt(0) == ad.getGdt2().getAdView()) {
                    return;
                }
                fl_ad.removeAllViews();
                ad.getGdt2().setAdEventListener(new AdEventListener() {
                    @Override
                    public void onClick() {
                    }
                    @Override
                    public void onExposed() {
                    }
                    @Override
                    public void onRenderSuccess() {
                        if (ad.getGdt2().getAdView().getParent() != null) {
                            ((ViewGroup) ad.getGdt2().getAdView().getParent()).removeAllViews();
                        }
                        fl_ad.addView(ad.getGdt2().getAdView());
                    }
                    @Override
                    public void onRenderFail() {
                    }
                    @Override
                    public void onAdClosed() {
                        if (adEventListener != null) {
                            adEventListener.closeAd(ad);
                        }
                    }
                });
                ad.getGdt2().render();
            } else if (ad.getCsj() != null) {
                if (fl_ad.getChildCount() > 0 && fl_ad.getChildAt(0) == ad.getCsj().getExpressAdView()) {
                    return;
                }
                ad.getCsj().setDislikeCallback(activity, new TTAdDislike.DislikeInteractionCallback() {
                    @Override
                    public void onSelected(int i, String s) {
                        if (adEventListener != null) {
                            adEventListener.closeAd(ad);
                        }
                    }
                    @Override
                    public void onCancel() {
                    }
                    @Override
                    public void onRefuse() {
                    }
                });
                ad.getCsj().render();
                if (ad.getCsj().getExpressAdView().getParent() != null) {
                    ((ViewGroup) ad.getCsj().getExpressAdView().getParent()).removeAllViews();
                }
                fl_ad.addView(ad.getCsj().getExpressAdView());
            }
        }
    }
    /**
     * 渲染广告
     *
     * @param activity
     * @param ad
     * @param adRenderListener
     * @param adEventListener
     */
    public static void renderAd(Activity activity, final ExpressAdContainer ad, final IAdRenderListener adRenderListener, final IAdEventListener adEventListener) {
        if (ad == null) {//广告为空
            return;
        }
        if (ad.getGdt() != null) {
            ad.getGdt().render();
            List<ExpressAdContainer> list = new ArrayList<>();
            list.add(ad);
            if (adRenderListener != null)
                adRenderListener.onRenderSuccess(list);
        } else if (ad.getGdt2() != null) {
            ad.getGdt2().setAdEventListener(new AdEventListener() {
                @Override
                public void onClick() {
                }
                @Override
                public void onExposed() {
                }
                @Override
                public void onRenderSuccess() {
                    List<ExpressAdContainer> list = new ArrayList<>();
                    list.add(ad);
                    if (adRenderListener != null)
                        adRenderListener.onRenderSuccess(list);
                }
                @Override
                public void onRenderFail() {
                    List<ExpressAdContainer> list = new ArrayList<>();
                    list.add(ad);
                    if (adRenderListener != null)
                        adRenderListener.onRenderFail(list);
                }
                @Override
                public void onAdClosed() {
                    if (adEventListener != null)
                        adEventListener.closeAd(ad);
                }
            });
            ad.getGdt2().render();
        } else if (ad.getCsj() != null) {
            ad.getCsj().setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() {
                @Override
                public void onAdClicked(View view, int i) {
                }
                @Override
                public void onAdShow(View view, int i) {
                }
                @Override
                public void onRenderFail(View view, String s, int i) {
                    List<ExpressAdContainer> list = new ArrayList<>();
                    list.add(ad);
                    if (adRenderListener != null)
                        adRenderListener.onRenderFail(list);
                }
                @Override
                public void onRenderSuccess(View view, float v, float v1) {
                    Log.d(TAG, "onRenderSuccess");
                    List<ExpressAdContainer> list = new ArrayList<>();
                    list.add(ad);
                    if (adRenderListener != null)
                        adRenderListener.onRenderSuccess(list);
                }
            });
            if (activity != null)
                ad.getCsj().setDislikeCallback(activity, new TTAdDislike.DislikeInteractionCallback() {
                    @Override
                    public void onSelected(int i, String s) {
                        if (adEventListener != null) {
                            adEventListener.closeAd(ad);
                        }
                    }
                    @Override
                    public void onCancel() {
                    }
                    @Override
                    public void onRefuse() {
                    }
                });
            ad.getCsj().render();
        }
    }
    /**
     * 为广告绑定关闭事件
     *
     * @param activity
     * @param ad
     * @param adEventListener
     */
    public static void bindCloseListener(Activity activity, final ExpressAdContainer ad, final IAdEventListener adEventListener) {
        if (ad == null) {//广告为空
            return;
        }
        if (ad.getGdt() != null) {
            return;
        } else if (ad.getGdt2() != null) {
            ad.getGdt2().setAdEventListener(new AdEventListener() {
                @Override
                public void onClick() {
                }
                @Override
                public void onExposed() {
                }
                @Override
                public void onRenderSuccess() {
                }
                @Override
                public void onRenderFail() {
                }
                @Override
                public void onAdClosed() {
                    if (adEventListener != null)
                        adEventListener.closeAd(ad);
                }
            });
        } else if (ad.getCsj() != null) {
            ad.getCsj().setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() {
                @Override
                public void onAdClicked(View view, int i) {
                }
                @Override
                public void onAdShow(View view, int i) {
                }
                @Override
                public void onRenderFail(View view, String s, int i) {
                }
                @Override
                public void onRenderSuccess(View view, float v, float v1) {
                }
            });
            ad.getCsj().setDislikeCallback(activity, new TTAdDislike.DislikeInteractionCallback() {
                @Override
                public void onSelected(int i, String s) {
                    if (adEventListener != null) {
                        adEventListener.closeAd(ad);
                    }
                }
                @Override
                public void onCancel() {
                }
                @Override
                public void onRefuse() {
                }
            });
        }
    }
    /**
     * 填充广告
     *
     * @param ad
     * @param fl_ad
     */
    public static void fillAd(final ExpressAdContainer ad, final FrameLayout fl_ad) {
        fl_ad.post(new Runnable() {
            @Override
            public void run() {
                if (ad == null) {//广告为空
                    fl_ad.setVisibility(View.GONE);
                } else {
                    fl_ad.setVisibility(View.VISIBLE);
                    if (ad.getGdt() != null) {
                        if (fl_ad.getChildCount() > 0 && fl_ad.getChildAt(0) == ad.getGdt()) {
                            return;
                        }
                        if (ad.getGdt().getParent() != null) {
                            ((ViewGroup) ad.getGdt().getParent()).removeAllViews();
                        }
                        fl_ad.removeAllViews();
                        fl_ad.addView(ad.getGdt());
                    } else if (ad.getGdt2() != null) {
                        if (fl_ad.getChildCount() > 0 && fl_ad.getChildAt(0) == ad.getGdt2().getAdView()) {
                            return;
                        }
                        if (ad.getGdt2().getAdView().getParent() != null) {
                            ((ViewGroup) ad.getGdt2().getAdView().getParent()).removeAllViews();
                        }
                        fl_ad.removeAllViews();
                        fl_ad.addView(ad.getGdt2().getAdView());
                    } else if (ad.getCsj() != null) {
                        if (fl_ad.getChildCount() > 0 && fl_ad.getChildAt(0) == ad.getCsj().getExpressAdView()) {
                            return;
                        }
                        if (ad.getCsj().getExpressAdView().getParent() != null) {
                            ((ViewGroup) ad.getCsj().getExpressAdView().getParent()).removeAllViews();
                        }
                        fl_ad.removeAllViews();
                        fl_ad.addView(ad.getCsj().getExpressAdView());
                    }
                }
                if (fl_ad.getChildCount() > 0) {
                    fl_ad.getChildAt(0).setVisibility(View.VISIBLE);
                    fl_ad.getChildAt(0).post(new Runnable() {
                        @Override
                        public void run() {
                        }
                    });
                }
            }
        });
    }
    interface IGDTAdLoadListener {
        public void onSuccess(List<NativeExpressADView> adList);
        public void onSuccess2(List<NativeExpressADData2> adList);
    }
    interface ICSJAdLoadListener {
        public void onSuccess(List<TTFeedAd> adList);
        public void onSuccess(List<TTNativeExpressAd> adList);
    }
    public interface IAdLoadListener {
        public void onSuccess(List<ExpressAdContainer> adList);
    }
    public interface IAdRenderListener {
        public void onRenderSuccess(List<ExpressAdContainer> adList);
        public void onRenderFail(List<ExpressAdContainer> adList);
    }
    public interface IAdEventListener {
        public void closeAd(ExpressAdContainer ad);
    }
    public interface IAdShowListener {
        public void show();
    }
}