package com.weikou.beibeivideo.util.ad; import android.content.Context; import com.bytedance.sdk.openadsdk.AdSlot; import com.bytedance.sdk.openadsdk.TTAdManager; import com.bytedance.sdk.openadsdk.TTAdNative; import com.bytedance.sdk.openadsdk.TTFeedAd; 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 com.weikou.beibeivideo.entity.ad.ExpressAdContainer; import com.weikou.beibeivideo.util.BeibeiConstant; import com.weikou.beibeivideo.util.DimenUtils; import java.util.ArrayList; import java.util.List; /** * 信息流广告管理 */ public class ExpressAdManager { public final static int SOURCE_GDT = 1;//广点通 public final static int SOURCE_CSJ = 2;//穿山甲 int sourceType = SOURCE_GDT; private TTAdNative mTTAdNative; private Context mContext; public ExpressAdManager(int adSource, Context context) { sourceType = adSource; this.mContext = context; if (sourceType == SOURCE_CSJ) { TTAdManager ttAdManager = TTAdManagerHolder.get(); mTTAdNative = ttAdManager.createAdNative(context); TTAdManagerHolder.get().requestPermissionIfNecessary(context); } } //加载小广告 /** * 加载广告 * * @param widthDP * @param heightDP * @param count * @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() { @Override public void onSuccess(List adList) { List adContainerList = new ArrayList<>(); 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 adList) { List adContainerList = new ArrayList<>(); if (adList != null) { for (TTFeedAd adView : adList) { adContainerList.add(new ExpressAdContainer(adView)); } } adLoadListener.onSuccess(adContainerList); } }); } } /** * 加载推荐大图广告 * @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); } /** * 加载推荐小图广告 * @param adLoadListener */ public void loadRecommendSmallAd(final IAdLoadListener adLoadListener) { //加载大图 String pid = null; if (sourceType == SOURCE_CSJ) { pid = "945375047"; } else if (sourceType == SOURCE_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); } /** * 加载广点通广告 * * @param positionId * @param count * @param adLoadListener * @param context */ private void loadGDT(String positionId, 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 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 onADOpenOverlay(NativeExpressADView nativeExpressADView) { } @Override public void onADCloseOverlay(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 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) .setImageAcceptedSize(width, height) .setAdCount(count) //请求广告数量为1到3条 .build(); mTTAdNative.loadFeedAd(adSlot, new TTAdNative.FeedAdListener() { @Override public void onError(int i, String s) { adLoadListener.onSuccess(null); } @Override public void onFeedAdLoad(List list) { adLoadListener.onSuccess(list); } }); } interface IGDTAdLoadListener { public void onSuccess(List adList); } interface ICSJAdLoadListener { public void onSuccess(List adList); } public interface IAdLoadListener { public void onSuccess(List adList); } }