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.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;
|
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, widthDP, heightDP, count, new IGDTAdLoadListener() {
|
@Override
|
public void onSuccess(List<NativeExpressADView> adList) {
|
List<ExpressAdContainer> adContainerList = new ArrayList<>();
|
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<TTNativeExpressAd> adList) {
|
List<ExpressAdContainer> adContainerList = new ArrayList<>();
|
if (adList != null) {
|
for (TTNativeExpressAd 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 = "945386135";
|
} 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.8);
|
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.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);
|
}
|
|
|
/**
|
* 视频详情页信息流广告
|
* @param count
|
* @param adLoadListener
|
*/
|
public void loadVideoDetailAd(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);
|
}
|
|
/**
|
* 加载广点通广告
|
*
|
* @param positionId
|
* @param count
|
* @param adLoadListener
|
* @param 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)
|
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.setVideoPlayPolicy(VideoOption.VideoPlayPolicy.AUTO);
|
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)
|
.setExpressViewAcceptedSize(width, height)
|
.setAdCount(count) //请求广告数量为1到3条
|
.build();
|
mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {
|
@Override
|
public void onError(int i, String s) {
|
adLoadListener.onSuccess(null);
|
}
|
|
@Override
|
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<TTNativeExpressAd> adList);
|
}
|
|
|
public interface IAdLoadListener {
|
public void onSuccess(List<ExpressAdContainer> adList);
|
}
|
|
public interface IAdEventListener {
|
public void closeAd();
|
}
|
}
|