| | |
| | | package com.weikou.beibeivideo.util.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.TTFeedAd; |
| | | import com.bytedance.sdk.openadsdk.TTNativeExpressAd; |
| | | import com.google.gson.Gson; |
| | | 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.ui.recommend.SearchActivity; |
| | | import com.weikou.beibeivideo.util.BeibeiConstant; |
| | | import com.weikou.beibeivideo.util.DimenUtils; |
| | | |
| | |
| | | * 信息流广告管理 |
| | | */ |
| | | public class ExpressAdManager { |
| | | public final static int SOURCE_GDT = 1;//广点通 |
| | | public final static int SOURCE_CSJ = 2;//穿山甲 |
| | | |
| | | int sourceType = SOURCE_GDT; |
| | | |
| | | final static String TAG = "ExpressAdManager"; |
| | | |
| | | AdUtil.AD_TYPE sourceType = AdUtil.AD_TYPE.gdt; |
| | | |
| | | private TTAdNative mTTAdNative; |
| | | private Context mContext; |
| | | |
| | | |
| | | public ExpressAdManager(int adSource, Context context) { |
| | | public ExpressAdManager(AdUtil.AD_TYPE adSource, Context context) { |
| | | sourceType = adSource; |
| | | this.mContext = context; |
| | | if (sourceType == SOURCE_CSJ) { |
| | | if (sourceType == AdUtil.AD_TYPE.csj) { |
| | | TTAdManager ttAdManager = TTAdManagerHolder.get(); |
| | | mTTAdNative = ttAdManager.createAdNative(context); |
| | | TTAdManagerHolder.get().requestPermissionIfNecessary(context); |
| | | // TTAdManagerHolder.get().requestPermissionIfNecessary(context); |
| | | } |
| | | } |
| | | |
| | |
| | | * @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() { |
| | | if (sourceType == AdUtil.AD_TYPE.gdt) { |
| | | 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); |
| | | } |
| | | |
| | | @Override |
| | | public void onSuccess2(List<NativeExpressADData2> adList) { |
| | | |
| | | } |
| | | }, mContext); |
| | | } else if (sourceType == AdUtil.AD_TYPE.gdt2) { |
| | | loadGDT2(pid, widthDP, heightDP, count, new IGDTAdLoadListener() { |
| | | @Override |
| | | public void onSuccess(List<NativeExpressADView> adList) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onSuccess2(List<NativeExpressADData2> adList) { |
| | | List<ExpressAdContainer> adContainerList = new ArrayList<>(); |
| | | if (adList != null) |
| | | for (NativeExpressADData2 ad : adList) { |
| | | adContainerList.add(new ExpressAdContainer(ad)); |
| | | } |
| | | adLoadListener.onSuccess(adContainerList); |
| | | } |
| | | }, mContext); |
| | | } else if (sourceType == SOURCE_CSJ) { |
| | | |
| | | } else if (sourceType == AdUtil.AD_TYPE.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)); |
| | | } |
| | | } |
| | |
| | | |
| | | /** |
| | | * 加载推荐大图广告 |
| | | * |
| | | * @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); |
| | | int width = deviceWidth - 6; |
| | | int height = (int) (width * 0.8); |
| | | String pid = null; |
| | | if (sourceType == AdUtil.AD_TYPE.csj) { |
| | | pid = CSJConstant.RECOMMEND_BIG_IMG_AD; |
| | | height = (int) (width * 0.56); |
| | | } else if (sourceType == AdUtil.AD_TYPE.gdt) { |
| | | pid = BeibeiConstant.GDT_RECOMMAND_NATIVE; |
| | | } else if (sourceType == AdUtil.AD_TYPE.gdt2) { |
| | | pid = GDTConstant.PID_HOME_RECOMMEND_BIG_IMG; |
| | | } |
| | | //获取屏幕的宽 |
| | | |
| | | |
| | | loadAd(width, height, pid, 1, adLoadListener); |
| | | } |
| | | |
| | | /** |
| | | * 加载推荐小图广告 |
| | | * |
| | | * @param adLoadListener |
| | | */ |
| | | public void loadRecommendSmallAd(final IAdLoadListener adLoadListener) { |
| | | //加载大图 |
| | | String pid = null; |
| | | if (sourceType == SOURCE_CSJ) { |
| | | if (sourceType == AdUtil.AD_TYPE.csj) { |
| | | pid = "945375047"; |
| | | } else if (sourceType == SOURCE_GDT) { |
| | | } else if (sourceType == AdUtil.AD_TYPE.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); |
| | | int height = (int) (width * 0.85); |
| | | loadAd(width, height, pid, 1, adLoadListener); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 视频播放器底部小广告 |
| | | * |
| | | * @param adLoadListener |
| | | */ |
| | | public void loadVideoDetailPlayerBottomAd(final IAdLoadListener adLoadListener) { |
| | | Log.i(TAG, "loadVideoDetailPlayerBottomAd"); |
| | | //加载大图 |
| | | String pid = null; |
| | | if (sourceType == AdUtil.AD_TYPE.csj) { |
| | | pid = CSJConstant.VIDEO_DETAIL_PLAYER_BOTTOM; |
| | | } else if (sourceType == AdUtil.AD_TYPE.gdt2) { |
| | | pid = GDTConstant.PID_2_VIDEO_DETAIL_PLAY_EXPRESS1; |
| | | } |
| | | if (mContext == null) |
| | | return; |
| | | //获取屏幕的宽 |
| | | int deviceWidth = DimenUtils.getScreenWidth(mContext); |
| | | deviceWidth = DimenUtils.px2dip(mContext, deviceWidth); |
| | | int width = (deviceWidth - 20); |
| | | int height = 100; |
| | | loadAd(width, height, pid, 1, adLoadListener); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 相关推荐底部小广告 |
| | | * |
| | | * @param adLoadListener |
| | | */ |
| | | public void loadVideoDetailRelativeVideoBottomAd(final IAdLoadListener adLoadListener) { |
| | | //加载大图 |
| | | String pid = null; |
| | | if (sourceType == AdUtil.AD_TYPE.csj) { |
| | | pid = CSJConstant.VIDEO_DETAIL_GUESSLIKE_TOP; |
| | | } else if (sourceType == AdUtil.AD_TYPE.gdt2) { |
| | | pid = GDTConstant.PID_2_VIDEO_DETAIL_PLAY_EXPRESS2; |
| | | } |
| | | if (mContext == null) |
| | | return; |
| | | //获取屏幕的宽 |
| | | int deviceWidth = DimenUtils.getScreenWidth(mContext); |
| | | deviceWidth = DimenUtils.px2dip(mContext, deviceWidth); |
| | | int width = (deviceWidth - 20); |
| | | int height = (int) (width * 0.5625); |
| | | loadAd(width, height, pid, 1, adLoadListener); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 加载分类小图 |
| | | * |
| | | * @param adLoadListener |
| | | */ |
| | | public void loadRecommendCategorySmallAd(final IAdLoadListener adLoadListener) { |
| | | //加载大图 |
| | | String pid = null; |
| | | if (sourceType == AdUtil.AD_TYPE.csj) { |
| | | pid = "945375047"; |
| | | } else if (sourceType == AdUtil.AD_TYPE.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 == AdUtil.AD_TYPE.csj) { |
| | | pid = "945379581"; |
| | | } else if (sourceType == AdUtil.AD_TYPE.gdt2) { |
| | | 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 columns |
| | | * @param adLoadListener |
| | | */ |
| | | public void loadVideoListSmallAd(int count, int columns, final IAdLoadListener adLoadListener) { |
| | | |
| | | //加载大图 |
| | | String pid = null; |
| | | if (sourceType == AdUtil.AD_TYPE.csj) { |
| | | pid = "945406595"; |
| | | } else if (sourceType == AdUtil.AD_TYPE.gdt2) { |
| | | if (columns == 3) |
| | | pid = GDTConstant.PID_2_VIDEO_LIST_SMALL_AD_COLUMN3; |
| | | else if (columns == 2) |
| | | pid = GDTConstant.PID_2_VIDEO_LIST_SMALL_AD_COLUMN2; |
| | | } |
| | | //获取屏幕的宽 |
| | | int deviceWidth = DimenUtils.getScreenWidth(mContext); |
| | | deviceWidth = DimenUtils.px2dip(mContext, deviceWidth); |
| | | int width = 0; |
| | | int height = 0; |
| | | |
| | | if (columns == 2) { |
| | | width = (deviceWidth - 30) / 2; |
| | | height = (int) (width * 0.85); |
| | | } else if (columns == 3) { |
| | | width = (deviceWidth - 20 - 9 * 2) / 3; |
| | | height = (int) (width * 1.6); |
| | | } |
| | | |
| | | loadAd(width, height, pid, count, adLoadListener); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 加载APP退出广告 |
| | | * |
| | | * @param adLoadListener |
| | | */ |
| | | public void loadAppExitAd(final IAdLoadListener adLoadListener) { |
| | | //加载大图 |
| | | String pid = null; |
| | | if (sourceType == AdUtil.AD_TYPE.csj) { |
| | | pid = CSJConstant.APP_EXIT; |
| | | } else if (sourceType == AdUtil.AD_TYPE.gdt) { |
| | | pid = BeibeiConstant.GDT_EXIT_DIALOG; |
| | | } |
| | | //获取屏幕的宽 |
| | | int deviceWidth = DimenUtils.getScreenWidth(mContext); |
| | | deviceWidth = DimenUtils.px2dip(mContext, deviceWidth); |
| | | int width = deviceWidth * 3 / 4; |
| | | int height = (int) (width / 1.78f); |
| | | |
| | | loadAd(width, height, pid, 1, adLoadListener); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 加载视频搜索广告 |
| | | * |
| | | * @param adLoadListener |
| | | */ |
| | | public void loadSearchAd(int widthDP, final IAdLoadListener adLoadListener) { |
| | | //加载大图 |
| | | String pid = null; |
| | | if (sourceType == AdUtil.AD_TYPE.csj) { |
| | | pid = CSJConstant.VIDEO_SEARCH; |
| | | } else if (sourceType == AdUtil.AD_TYPE.gdt) { |
| | | pid = BeibeiConstant.GDT_SEARCH_NATIVE; |
| | | } |
| | | int height = (int) (widthDP / 1.78f); |
| | | |
| | | loadAd(widthDP, height, pid, 1, adLoadListener); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 加载广点通广告 |
| | |
| | | * @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) |
| | |
| | | |
| | | @Override |
| | | public void onADExposure(NativeExpressADView nativeExpressADView) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | | * 2.0版本广点通原生 |
| | | * |
| | | * @param positionId |
| | | * @param widthDP |
| | | * @param heightDP |
| | | * @param count |
| | | * @param adLoadListener |
| | | * @param context |
| | | */ |
| | | private void loadGDT2(String positionId, int widthDP, int heightDP, int count, final IGDTAdLoadListener adLoadListener, Context context) { |
| | | |
| | | Log.i(TAG, String.format("loadGDT2:positionId-%s widthDP-%s heightDP-%s", positionId, widthDP, heightDP)); |
| | | |
| | | NativeExpressAD2 nativeExpressAD2 = new NativeExpressAD2(context, positionId, new NativeExpressAD2.AdLoadListener() { |
| | | @Override |
| | | public void onLoadSuccess(List<NativeExpressADData2> list) { |
| | | if (adLoadListener != null) |
| | | adLoadListener.onSuccess2(list); |
| | | } |
| | | |
| | | @Override |
| | | public void onNoAD(AdError adError) { |
| | | if (adLoadListener != null) |
| | | adLoadListener.onSuccess2(null); |
| | | } |
| | | }); |
| | | |
| | | nativeExpressAD2.setAdSize(widthDP, heightDP); |
| | | VideoOption2.Builder builder = new VideoOption2.Builder(); |
| | | builder.setAutoPlayPolicy(VideoOption2.AutoPlayPolicy.WIFI) // WIFI 环境下可以自动播放视频 |
| | | .setAutoPlayMuted(true) // 自动播放时为静音 |
| | | .setDetailPageMuted(false) // 视频详情页播放时不静音 |
| | | .setMaxVideoDuration(0) // 设置返回视频广告的最大视频时长(闭区间,可单独设置),单位:秒,默认为 0 代表无限制,合法输入为:5<=maxVideoDuration<=60. 此设置会影响广告填充,请谨慎设置 |
| | | .setMinVideoDuration(0); // 设置返回视频广告的最小视频时长(闭区间,可单独设置),单位:秒,默认为 0 代表无限制, 此设置会影响广告填充,请谨慎设置 |
| | | nativeExpressAD2.setVideoOption2(builder.build()); |
| | | nativeExpressAD2.loadAd(count); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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 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.getGdt2() != null) { |
| | | if (fl_ad.getChildCount() > 0 && fl_ad.getChildAt(0) == ad.getGdt2().getAdView()) { |
| | | return; |
| | | } |
| | | fl_ad.removeAllViews(); |
| | | |
| | | ad.getGdt2().setAdEventListener(new AdEventListener() { |
| | | @Override |
| | | public void onClick() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onExposed() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRenderSuccess() { |
| | | if (ad.getGdt2().getAdView().getParent() != null) { |
| | | ((ViewGroup) ad.getGdt2().getAdView().getParent()).removeAllViews(); |
| | | } |
| | | fl_ad.addView(ad.getGdt2().getAdView()); |
| | | } |
| | | |
| | | @Override |
| | | public void onRenderFail() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onAdClosed() { |
| | | if (adEventListener != null) { |
| | | adEventListener.closeAd(ad); |
| | | } |
| | | } |
| | | }); |
| | | ad.getGdt2().render(); |
| | | |
| | | } 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 onSelected(int i, String s) { |
| | | if (adEventListener != null) { |
| | | adEventListener.closeAd(ad); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onCancel() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRefuse() { |
| | | |
| | | } |
| | | }); |
| | | 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<ExpressAdContainer> list = new ArrayList<>(); |
| | | list.add(ad); |
| | | if (adRenderListener != null) |
| | | adRenderListener.onRenderSuccess(list); |
| | | } else if (ad.getGdt2() != null) { |
| | | ad.getGdt2().setAdEventListener(new AdEventListener() { |
| | | @Override |
| | | public void onClick() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onExposed() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRenderSuccess() { |
| | | List<ExpressAdContainer> list = new ArrayList<>(); |
| | | list.add(ad); |
| | | if (adRenderListener != null) |
| | | adRenderListener.onRenderSuccess(list); |
| | | } |
| | | |
| | | @Override |
| | | public void onRenderFail() { |
| | | List<ExpressAdContainer> list = new ArrayList<>(); |
| | | list.add(ad); |
| | | if (adRenderListener != null) |
| | | adRenderListener.onRenderFail(list); |
| | | } |
| | | |
| | | @Override |
| | | public void onAdClosed() { |
| | | if (adEventListener != null) |
| | | adEventListener.closeAd(ad); |
| | | } |
| | | }); |
| | | ad.getGdt2().render(); |
| | | |
| | | } 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<ExpressAdContainer> list = new ArrayList<>(); |
| | | list.add(ad); |
| | | if (adRenderListener != null) |
| | | adRenderListener.onRenderFail(list); |
| | | } |
| | | |
| | | @Override |
| | | public void onRenderSuccess(View view, float v, float v1) { |
| | | Log.d(TAG, "onRenderSuccess"); |
| | | List<ExpressAdContainer> 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 onSelected(int i, String s) { |
| | | if (adEventListener != null) { |
| | | adEventListener.closeAd(ad); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onCancel() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRefuse() { |
| | | |
| | | } |
| | | }); |
| | | ad.getCsj().render(); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 为广告绑定关闭事件 |
| | | * |
| | | * @param activity |
| | | * @param ad |
| | | * @param adEventListener |
| | | */ |
| | | public static void bindCloseListener(Activity activity, final ExpressAdContainer ad, final IAdEventListener adEventListener) { |
| | | |
| | | if (ad == null) {//广告为空 |
| | | return; |
| | | } |
| | | |
| | | if (ad.getGdt() != null) { |
| | | return; |
| | | } else if (ad.getGdt2() != null) { |
| | | ad.getGdt2().setAdEventListener(new AdEventListener() { |
| | | @Override |
| | | public void onClick() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onExposed() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRenderSuccess() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRenderFail() { |
| | | } |
| | | |
| | | @Override |
| | | public void onAdClosed() { |
| | | if (adEventListener != null) |
| | | adEventListener.closeAd(ad); |
| | | } |
| | | }); |
| | | |
| | | } 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) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRenderSuccess(View view, float v, float v1) { |
| | | |
| | | } |
| | | }); |
| | | ad.getCsj().setDislikeCallback(activity, new TTAdDislike.DislikeInteractionCallback() { |
| | | |
| | | @Override |
| | | public void onSelected(int i, String s) { |
| | | if (adEventListener != null) { |
| | | adEventListener.closeAd(ad); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onCancel() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onRefuse() { |
| | | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 填充广告 |
| | | * |
| | | * @param ad |
| | | * @param fl_ad |
| | | */ |
| | | public static void fillAd(final ExpressAdContainer ad, final FrameLayout fl_ad) { |
| | | |
| | | fl_ad.post(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | 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; |
| | | } |
| | | if (ad.getGdt().getParent() != null) { |
| | | ((ViewGroup) ad.getGdt().getParent()).removeAllViews(); |
| | | } |
| | | fl_ad.removeAllViews(); |
| | | fl_ad.addView(ad.getGdt()); |
| | | } else if (ad.getGdt2() != null) { |
| | | if (fl_ad.getChildCount() > 0 && fl_ad.getChildAt(0) == ad.getGdt2().getAdView()) { |
| | | return; |
| | | } |
| | | if (ad.getGdt2().getAdView().getParent() != null) { |
| | | ((ViewGroup) ad.getGdt2().getAdView().getParent()).removeAllViews(); |
| | | } |
| | | fl_ad.removeAllViews(); |
| | | fl_ad.addView(ad.getGdt2().getAdView()); |
| | | |
| | | } else if (ad.getCsj() != null) { |
| | | if (fl_ad.getChildCount() > 0 && fl_ad.getChildAt(0) == ad.getCsj().getExpressAdView()) { |
| | | return; |
| | | } |
| | | if (ad.getCsj().getExpressAdView().getParent() != null) { |
| | | ((ViewGroup) ad.getCsj().getExpressAdView().getParent()).removeAllViews(); |
| | | } |
| | | fl_ad.removeAllViews(); |
| | | fl_ad.addView(ad.getCsj().getExpressAdView()); |
| | | } |
| | | } |
| | | if (fl_ad.getChildCount() > 0) { |
| | | fl_ad.getChildAt(0).setVisibility(View.VISIBLE); |
| | | fl_ad.getChildAt(0).post(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | interface IGDTAdLoadListener { |
| | | public void onSuccess(List<NativeExpressADView> adList); |
| | | |
| | | public void onSuccess2(List<NativeExpressADData2> 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 IAdRenderListener { |
| | | public void onRenderSuccess(List<ExpressAdContainer> adList); |
| | | |
| | | public void onRenderFail(List<ExpressAdContainer> adList); |
| | | } |
| | | |
| | | public interface IAdEventListener { |
| | | public void closeAd(ExpressAdContainer ad); |
| | | } |
| | | |
| | | |
| | | public interface IAdShowListener { |
| | | public void show(); |
| | | } |
| | | |
| | | } |