admin
2020-08-12 cefe2a41db4a275fb1e940a902cb156f1ed68d80
BuWanVideo/src/com/weikou/beibeivideo/util/ad/ExpressAdManager.java
@@ -1,15 +1,23 @@
package com.weikou.beibeivideo.util.ad;
import android.app.Activity;
import android.content.Context;
import android.view.View;
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.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.util.BeibeiConstant;
@@ -37,7 +45,7 @@
        if (sourceType == SOURCE_CSJ) {
            TTAdManager ttAdManager = TTAdManagerHolder.get();
            mTTAdNative = ttAdManager.createAdNative(context);
            TTAdManagerHolder.get().requestPermissionIfNecessary(context);
//            TTAdManagerHolder.get().requestPermissionIfNecessary(context);
        }
    }
@@ -54,23 +62,24 @@
     */
    public void loadAd(int widthDP, int heightDP, String pid, int count, final IAdLoadListener adLoadListener) {
        if (sourceType == SOURCE_GDT) {
            loadGDT(pid, count, new IGDTAdLoadListener() {
            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);
                }
            }, mContext);
        } else if (sourceType == SOURCE_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,13 +92,14 @@
    /**
     * 加载推荐大图广告
     *
     * @param adLoadListener
     */
    public void loadRecommendLargeAd(final IAdLoadListener adLoadListener) {
        //加载大图
        String pid = null;
        if (sourceType == SOURCE_CSJ) {
            pid = "945375047";
            pid = "945386135";
        } else if (sourceType == SOURCE_GDT) {
            pid = BeibeiConstant.GDT_RECOMMAND_NATIVE;
        }
@@ -97,12 +107,13 @@
        int deviceWidth = DimenUtils.getScreenWidth(mContext);
        deviceWidth = DimenUtils.px2dip(mContext, deviceWidth);
        int width = deviceWidth - 20;
        int height = (int) (width * 0.625);
        int height = (int) (width * 0.8);
        loadAd(width, height, pid, 2, adLoadListener);
    }
    /**
     * 加载推荐小图广告
     *
     * @param adLoadListener
     */
    public void loadRecommendSmallAd(final IAdLoadListener adLoadListener) {
@@ -117,8 +128,52 @@
        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 loadRecommendCategorySmallAd(final IAdLoadListener adLoadListener) {
        //加载大图
        String pid = null;
        if (sourceType == SOURCE_CSJ) {
            pid = "945375047";
        } else if (sourceType == SOURCE_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 == SOURCE_CSJ) {
            pid = "945379581";
        } else if (sourceType == SOURCE_GDT) {
            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);
    }
    /**
@@ -129,9 +184,10 @@
     * @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 +206,7 @@
            @Override
            public void onADExposure(NativeExpressADView nativeExpressADView) {
            }
            @Override
@@ -183,11 +240,11 @@
                    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);
    }
@@ -205,32 +262,111 @@
        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 render(Activity activity, final ExpressAdContainer ad, final FrameLayout fl_ad, final IAdEventListener adEventListener) {
        fl_ad.removeAllViews();
        if (ad == null) {//广告为空
            fl_ad.setVisibility(View.GONE);
        } else {
            fl_ad.setVisibility(View.VISIBLE);
            if (ad.getGdt() != null) {
//                ad.getGdt().setAdEventListener(new AdEventListener() {
//                    @Override
//                    public void onClick() {
//
//                    }
//
//                    @Override
//                    public void onExposed() {
//
//                    }
//
//                    @Override
//                    public void onRenderSuccess() {
//                        fl_ad.addView(ad.getGdt().getAdView());
//                    }
//
//                    @Override
//                    public void onRenderFail() {
//
//                    }
//
//                    @Override
//                    public void onAdClosed() {
//                        if (adEventListener != null) {
//                            adEventListener.closeAd();
//                        }
//                    }
//                });
                ad.getGdt().render();
                fl_ad.addView(ad.getGdt());
            } else if (ad.getCsj() != null) {
                ad.getCsj().setDislikeCallback(activity, new TTAdDislike.DislikeInteractionCallback() {
                    @Override
                    public void onSelected(int i, String s) {
                        if (adEventListener != null) {
                            adEventListener.closeAd();
                        }
                    }
                    @Override
                    public void onCancel() {
                    }
                    @Override
                    public void onRefuse() {
                    }
                });
                ad.getCsj().render();
                fl_ad.addView(ad.getCsj().getExpressAdView());
            }
        }
    }
    interface IGDTAdLoadListener {
        public void onSuccess(List<NativeExpressADView> 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 IAdEventListener {
        public void closeAd();
    }
}