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<NativeExpressADView> adList) {
|
List<ExpressAdContainer> 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<TTFeedAd> adList) {
|
List<ExpressAdContainer> 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<NativeExpressADView> 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<TTFeedAd> list) {
|
adLoadListener.onSuccess(list);
|
}
|
});
|
}
|
|
interface IGDTAdLoadListener {
|
public void onSuccess(List<NativeExpressADView> adList);
|
}
|
|
interface ICSJAdLoadListener {
|
public void onSuccess(List<TTFeedAd> adList);
|
}
|
|
|
public interface IAdLoadListener {
|
public void onSuccess(List<ExpressAdContainer> adList);
|
}
|
}
|