465 lines
20 KiB
Java
465 lines
20 KiB
Java
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<TTNativeExpressAd> 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<TTNativeExpressAd> 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<TTNativeExpressAd> 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];
|
||
}
|
||
}
|