package com.android.boot.ad.aggregated; import static com.android.boot.ad.TouchTools.mainActivity; import static com.bytedance.sdk.openadsdk.TTAdLoadType.LOAD; import static com.bytedance.sdk.openadsdk.TTAdLoadType.PRELOAD; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.view.View; import android.view.ViewGroup; import com.android.boot.Logger; import com.android.boot.ad.RewardCallback; import com.android.boot.ad.TouchTools; import com.bytedance.sdk.openadsdk.AdSlot; import com.bytedance.sdk.openadsdk.CSJAdError; import com.bytedance.sdk.openadsdk.CSJSplashAd; import com.bytedance.sdk.openadsdk.TTAdNative; import com.bytedance.sdk.openadsdk.TTAdSdk; import com.bytedance.sdk.openadsdk.TTFullScreenVideoAd; import com.bytedance.sdk.openadsdk.TTNativeExpressAd; import com.bytedance.sdk.openadsdk.TTRewardVideoAd; import com.bytedance.sdk.openadsdk.mediation.MediationConstant; import com.bytedance.sdk.openadsdk.mediation.ad.MediationAdSlot; import com.bytedance.sdk.openadsdk.mediation.manager.MediationAdEcpmInfo; import java.util.List; public class TTAd extends GDTAd { public TTNativeExpressAd ttBanner; public static String TTNative = ""; public static String TTDrawFeedAd = ""; public static String TTBanner = ""; public static String TTReward = ""; public static String TTAppID = ""; public static String TTSplashAd = ""; public static String TTFullScreenVideo = ""; public static void logEcpmInfo(MediationAdEcpmInfo item) { Logger.log("EcpmInfo: \n" + "SdkName: " + item.getSdkName() + ",\n" + "CustomSdkName: " + item.getCustomSdkName() + ",\n" + "SlotId: " + item.getSlotId() + ",\n" + "Ecpm: " + item.getEcpm() + ",\n" + "ReqBiddingType: " + item.getReqBiddingType() + ",\n" + "ErrorMsg: " + item.getErrorMsg() + ",\n" + "RequestId: " + item.getRequestId() + ",\n" + "RitType: " + item.getRitType() + ",\n" + "AbTestId: " + item.getAbTestId() + ",\n" + "ScenarioId: " + item.getScenarioId() + ",\n" + "SegmentId: " + item.getSegmentId() + ",\n" + "Channel: " + item.getChannel() + ",\n" + "SubChannel: " + item.getSubChannel() + ",\n" + "customData: " + item.getCustomData() ); } public void showTTFullScreenVideo() { TTAdNative adNativeLoader = TTAdSdk.getAdManager().createAdNative(mainActivity); AdSlot adslot = new AdSlot.Builder() .setCodeId(TTFullScreenVideo) .setMediationAdSlot(new MediationAdSlot.Builder() .setMuted(true)//是否静音 .setVolume(0.7f)//设置音量 .setBidNotify(true)//竞价结果通知 .build()) .build(); adNativeLoader.loadFullScreenVideoAd(adslot, new TTAdNative.FullScreenVideoAdListener() { public void onError(int code, String message) { Logger.log("TTFullScreenVideo:" + code + " " + message); } public void onFullScreenVideoAdLoad(TTFullScreenVideoAd ad) { ad.setFullScreenVideoAdInteractionListener(new TTFullScreenVideoAd.FullScreenVideoAdInteractionListener() { @Override public void onAdShow() { Logger.log("TTFullScreenVideo show"); } @Override public void onAdVideoBarClick() { } @Override public void onAdClose() { } @Override public void onVideoComplete() { } @Override public void onSkippedVideo() { } }); ad.showFullScreenVideoAd(mainActivity); } public void onFullScreenVideoCached() { } public void onFullScreenVideoCached(TTFullScreenVideoAd ad) { } }); } public void showTTDrawFeedAd(ViewGroup contain) { if (TTAdSdk.isSdkReady()) { AdSlot adSlot = new AdSlot.Builder() .setCodeId(TTDrawFeedAd) .setImageAcceptedSize(TouchTools.getScreenWidth() / 3, TouchTools.getScreenHeight() / 3) // 单位px .setAdCount(1) // 请求广告数量为1到3条 (优先采用平台配置的数量) .setMediationAdSlot(new MediationAdSlot.Builder().setMuted(true).build()) .build(); TTAdSdk.getAdManager().createAdNative(mainActivity).loadExpressDrawFeedAd(adSlot, new TTAdNative.NativeExpressAdListener() { @Override public void onError(int i, String s) { Logger.log("TTDrawFeedAd:" + i + " " + s); } @Override public void onNativeExpressAdLoad(List list) { if (list != null && !list.isEmpty()) { TTNativeExpressAd ttNativeExpressAd = list.get(0); ttNativeExpressAd.setExpressInteractionListener(new TTNativeExpressAd.AdInteractionListener() { @Override public void onAdDismiss() { } @Override public void onAdClicked(View view, int i) { Logger.log("TTDrawFeedAd onAdClicked"); TouchTools.backToCurrentActivity(200, 300, 400, 500, 1000); ttNativeExpressAd.destroy(); } @Override public void onAdShow(View view, int i) { Logger.log("TTDrawFeedAd show"); if (RANDOM.nextInt(100) < 15) { TouchTools.simulateTouchDelay(contain, "EventRecordRelativeLayout"); } new Handler(Looper.getMainLooper()).postDelayed(ttNativeExpressAd::destroy, 3500); } @Override public void onRenderFail(View view, String s, int i) { } @Override public void onRenderSuccess(View view, float v, float v1) { contain.removeAllViews(); contain.addView(view); } }); ttNativeExpressAd.render(); } } }); } } public void showSplashAd() { if (TTAdSdk.isSdkReady()) { TTAdNative adNativeLoader = TTAdSdk.getAdManager().createAdNative(mainActivity); AdSlot adSlot = new AdSlot.Builder() .setCodeId(TTSplashAd) .setExpressViewAcceptedSize(TouchTools.getScreenWidth(), TouchTools.getScreenHeight()) .build(); adNativeLoader.loadSplashAd(adSlot, new TTAdNative.CSJSplashAdListener() { @Override public void onSplashRenderSuccess(CSJSplashAd csjSplashAd) { /** 渲染成功后,展示广告 */ csjSplashAd.setSplashAdListener(new CSJSplashAd.SplashAdListener() { @Override public void onSplashAdShow(CSJSplashAd csjSplashAd) { Logger.log("onSplashAdShow"); new Handler(Looper.getMainLooper()).postDelayed(() -> { if (csjSplashAd != null && csjSplashAd.getMediationManager() != null) { csjSplashAd.getMediationManager().destroy(); splashView.setVisibility(View.GONE); } showTTFullScreenVideo(); }, 3500); } @Override public void onSplashAdClick(CSJSplashAd csjSplashAd) { Logger.log("onSplashAdClick"); } @Override public void onSplashAdClose(CSJSplashAd csjSplashAd, int i) { } }); } @Override public void onSplashLoadSuccess(CSJSplashAd csjSplashAd) { csjSplashAd.setSplashAdListener(new CSJSplashAd.SplashAdListener() { @Override public void onSplashAdShow(CSJSplashAd csjSplashAd) { } @Override public void onSplashAdClick(CSJSplashAd csjSplashAd) { } @Override public void onSplashAdClose(CSJSplashAd csjSplashAd, int i) { // 广告关闭后,销毁广告页面 } }); csjSplashAd.showSplashView(splashView); } @Override public void onSplashLoadFail(CSJAdError csjAdError) { Logger.log("Splash:" + csjAdError.getCode() + " " + csjAdError.getMsg()); /**仅CSJ csjAdError.getCode() == 1,物料加载失败 csjAdError.getCode() == 2,素材加载失败 csjAdError.getCode() == 3,渲染失败、渲染超时 csjAdError.getCode() == 23,加载超时 */ showTTFullScreenVideo(); } @Override public void onSplashRenderFail(CSJSplashAd csjSplashAd, CSJAdError csjAdError) { } }, 3500); } } public void showTTReward(RewardCallback rewardCallback) { if (TTAdSdk.isSdkReady()) { AdSlot adslot = new AdSlot.Builder() .setCodeId(TTReward) .setMediationAdSlot(new MediationAdSlot .Builder() .setExtraObject(MediationConstant.ADN_PANGLE, "pangleRewardCustomData") .setExtraObject(MediationConstant.ADN_GDT, "gdtRewardCustomData") .setExtraObject(MediationConstant.ADN_BAIDU, "baiduRewardCustomData") .build()) .build(); TTAdSdk.getAdManager().createAdNative(mainActivity).loadRewardVideoAd(adslot, new TTAdNative.RewardVideoAdListener() { @Override public void onError(int i, String s) { Logger.log("TTReward error" + s + " " + i); rewardCallback.onFailed(); } @Override public void onRewardVideoAdLoad(TTRewardVideoAd ttRewardVideoAd) { ttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() { @Override public void onAdShow() { } @Override public void onAdVideoBarClick() { Logger.log("onAdVideoBarClick"); } @Override public void onAdClose() { showTTFullScreenVideo(); rewardCallback.onFailed(); } @Override public void onVideoComplete() { } @Override public void onVideoError() { } @Override public void onRewardVerify(boolean b, int i, String s, int i1, String s1) { } @Override public void onRewardArrived(boolean b, int i, Bundle bundle) { rewardCallback.onReward(); } @Override public void onSkippedVideo() { rewardCallback.onFailed(); } }); ttRewardVideoAd.showRewardVideoAd(mainActivity); } @Override public void onRewardVideoCached() { } @Override public void onRewardVideoCached(TTRewardVideoAd ttRewardVideoAd) { } }); } } public void showTTAdBanner(ViewGroup container) { if (TTAdSdk.isSdkReady()) { TTAdNative mTTAdNative = TTAdSdk.getAdManager().createAdNative(mainActivity); AdSlot adSlot = new AdSlot.Builder() .setCodeId(TTBanner) //广告位id .setSupportDeepLink(true) .setExpressViewAcceptedSize(300, 150) //期望模板广告view的size,单位dp .setAdLoadType(LOAD)//推荐使用,用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载,方便后续为开发者优化相关策略 .build(); mTTAdNative.loadBannerExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() { @Override public void onError(int code, String message) { Logger.log("TTAdBanner onError:" + code + " " + message); } @Override public void onNativeExpressAdLoad(List ads) { Logger.log("onBannerExpressAdLoad" + ads.get(0)); ttBanner = ads.get(0); ttBanner.setSlideIntervalTime(5); ttBanner.setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() { @Override public void onAdClicked(View view, int type) { Logger.log("TTAdBanner click"); TouchTools.backToCurrentActivity(200, 300, 400, 500, 1000); ttBanner.destroy(); ttBanner = null; } //广告展示回调 @Override public void onAdShow(View view, int type) { Logger.log("ttBanner show"); if (RANDOM.nextInt(100) < 11) { TouchTools.simulateTouchDelay(container, "EventRecordRelativeLayout"); } } @Override public void onRenderFail(View view, String msg, int code) { Logger.log("onRenderFail" + msg + " " + code); } @Override public void onRenderSuccess(View view, float width, float height) { // 当前不建议直接使用 float width, float height Logger.log("onRenderSuccess" + view); container.removeAllViews(); container.addView(view); } }); ttBanner.render(); } }); } } public void showTTAdNative(ViewGroup container) { if (TTAdSdk.isSdkReady()) { TTAdNative mTTAdNative = TTAdSdk.getAdManager().createAdNative(mainActivity); AdSlot adSlot = new AdSlot.Builder() .setCodeId(TTNative) //广告位id .setSupportDeepLink(true) .setAdCount(1) //请求广告数量为1到3条 .setExpressViewAcceptedSize(400, 0) //期望模板广告view的size,宽度最低为375,单位dp .setAdLoadType(PRELOAD)//推荐使用,用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载,方便后续为开发者优化相关策略 .build(); mTTAdNative.loadNativeExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() { @Override public void onError(int code, String message) { Logger.log("TTAdNative onError:" + code + " " + message); } @Override public void onNativeExpressAdLoad(List ads) { if (ads != null && !ads.isEmpty()) { TTNativeExpressAd ttNativeExpressAd = ads.get(0); ttNativeExpressAd.setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() { @Override public void onAdClicked(View view, int type) { Logger.log("TTAdNative click"); TouchTools.backToCurrentActivity(200, 300, 400, 500, 1000); } //广告展示回调 @Override public void onAdShow(View view, int type) { logEcpmInfo(ttNativeExpressAd.getMediationManager().getShowEcpm()); logEcpmInfo(ttNativeExpressAd.getMediationManager().getBestEcpm()); if (RANDOM.nextInt(100) < 15) { TouchTools.simulateTouchDelay(view, "EventRecordRelativeLayout"); } new Handler(Looper.getMainLooper()).postDelayed(ttNativeExpressAd::destroy, 3500); } @Override public void onRenderFail(View view, String msg, int code) { } @Override public void onRenderSuccess(View view, float width, float height) { // 当前不建议直接使用 float width, float height Logger.log("native onRenderSuccess"); container.removeAllViews(); container.addView(view); } }); ttNativeExpressAd.render(); } } }); } } public ViewGroup containerTemplateA; public ViewGroup containerTemplateB; public ViewGroup containerTemplateC; public ViewGroup containerTemplateD; public ViewGroup containerBanner; public ViewGroup container; public ViewGroup containerCenter; public ViewGroup splashView; public void initViewGroup(ViewGroup... viewGroup) { container = viewGroup[0]; containerBanner = viewGroup[1]; containerTemplateA = viewGroup[2]; containerTemplateB = viewGroup[3]; containerTemplateC = viewGroup[4]; containerTemplateD = viewGroup[5]; containerCenter = viewGroup[6]; splashView = viewGroup[7]; } }