package com.demo.library_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.TTNativeExpressAd; import com.demo.library_ad.entity.ExpressAdContainer; 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.comm.util.AdError; import java.util.ArrayList; import java.util.List; public class ExpressAdManager { private static ExpressAdManager instance; public static ExpressAdManager getInstance(Context context) { if (instance == null) { instance = new ExpressAdManager(context); } return instance; } public ExpressAdManager(Context context) { TTAdManager ttAdManager = null; try { ttAdManager = TTAdManagerHolder.get(); mTTAdNative = ttAdManager.createAdNative(context); } catch (Exception e) { e.printStackTrace(); } } public void loadAd(int widthDP, int heightDP, String pid, int count, AdUtil.AD_TYPE sourceType, Context context, final IAdLoadListener adLoadListener) { if (sourceType == AdUtil.AD_TYPE.gdt) { loadGDT(pid, widthDP, heightDP, count, new IGDTAdLoadListener() { @Override public void onSuccess(List adList) { List adContainerList = new ArrayList<>(); if (adList != null) for (NativeExpressADView adView : adList) { adContainerList.add(new ExpressAdContainer(adView)); } adLoadListener.onSuccess(adContainerList); } }, context); } else if (sourceType == AdUtil.AD_TYPE.csj) { loadCSJ(pid, widthDP, heightDP, count, new ICSJAdLoadListener() { @Override public void onSuccess(List adList) { List adContainerList = new ArrayList<>(); if (adList != null) { for (TTNativeExpressAd adView : adList) { adContainerList.add(new ExpressAdContainer(adView)); } } adLoadListener.onSuccess(adContainerList); } }); } } private TTAdNative mTTAdNative; /** * 穿山甲广告 * * @param codeId * @param width * @param height * @param count * @param adLoadListener */ private void loadCSJ(String codeId, int width, int height, int count, final ICSJAdLoadListener adLoadListener) { count = count > 3 ? 3 : count; AdSlot adSlot = new AdSlot.Builder() .setCodeId(codeId) .setSupportDeepLink(true) .setExpressViewAcceptedSize(width, height) .setAdCount(count) //请求广告数量为1到3条 .build(); if (mTTAdNative == null) { if (adLoadListener != null) adLoadListener.onSuccess(null); return; } mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() { @Override public void onError(int i, String s) { adLoadListener.onSuccess(null); } @Override public void onNativeExpressAdLoad(List list) { adLoadListener.onSuccess(list); } }); } private void loadGDT(String positionId, int widthDP, int heightDP, int count, final IGDTAdLoadListener adLoadListener, Context context) { NativeExpressAD nativeExpressAD = new NativeExpressAD(context, new ADSize(widthDP, ADSize.AUTO_HEIGHT), positionId, new NativeExpressAD.NativeExpressADListener() { @Override public void onADLoaded(List list) { if (adLoadListener != null) adLoadListener.onSuccess(list); } @Override public void onRenderFail(NativeExpressADView nativeExpressADView) { } @Override public void onRenderSuccess(NativeExpressADView nativeExpressADView) { } @Override public void onADExposure(NativeExpressADView nativeExpressADView) { } @Override public void onADClicked(NativeExpressADView nativeExpressADView) { } @Override public void onADClosed(NativeExpressADView nativeExpressADView) { } @Override public void onADLeftApplication(NativeExpressADView nativeExpressADView) { } @Override public void onNoAD(AdError adError) { if (adLoadListener != null) adLoadListener.onSuccess(null); } }); // 传入Activity nativeExpressAD.setVideoOption(new VideoOption.Builder() .setAutoPlayPolicy(VideoOption.AutoPlayPolicy.WIFI) // WIFI 环境下可以自动播放视频 .setAutoPlayMuted(true) // 自动播放时为静音 .build()); // nativeExpressAD.loadAD(count); } /** * 渲染模板和填充广告 * * @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.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 onShow() { } @Override public void onSelected(int i, String s, boolean b) { if (adEventListener != null) { adEventListener.closeAd(ad); } } @Override public void onCancel() { } }); 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 list = new ArrayList<>(); list.add(ad); if (adRenderListener != null) adRenderListener.onRenderSuccess(list); } 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 list = new ArrayList<>(); list.add(ad); if (adRenderListener != null) adRenderListener.onRenderFail(list); } @Override public void onRenderSuccess(View view, float v, float v1) { List 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 onShow() { } @Override public void onSelected(int i, String s, boolean b) { if (adEventListener != null) { adEventListener.closeAd(ad); } } @Override public void onCancel() { } }); ad.getCsj().render(); } } interface IGDTAdLoadListener { public void onSuccess(List adList); } interface ICSJAdLoadListener { public void onSuccess(List adList); } public interface IAdLoadListener { public void onSuccess(List adList); } public interface IAdRenderListener { public void onRenderSuccess(List adList); public void onRenderFail(List adList); } public interface IAdEventListener { public void closeAd(ExpressAdContainer ad); } public interface IAdShowListener { public void show(); } }