#if WEBGL_BYTEDANCE using System; using System.Collections.Generic; using StarkSDKSpace; using UnityEngine; namespace HC { public class HCBytedanceAds : HCSingleton, HCIAds, StarkAdManager.VideoAdCallback { private Action> _callback; public void InitializeSdk(Action> callback) { HCDebugger.LogDebug($"[HCBytedanceAds] [InitializeSdk] callback = {callback}"); _callback = callback; StarkSDK.API.GetStarkAdManager().SetVideoAdCallBack(this); } public void RewardedLoad(string adUnitId) { HCDebugger.LogDebug($"[HCBytedanceAds] [RewardedLoad] adUnitId = {adUnitId}"); } public bool IsRewardedAdReady(string adUnitId) { HCDebugger.LogDebug($"[HCBytedanceAds] [IsRewardedAdReady] adUnitId = {adUnitId}"); return true; } [Obsolete("Obsolete")] public void ShowRewardedAd(string adUnitId) { HCDebugger.LogDebug($"[HCBytedanceAds] [IsRewardedAdReady] adUnitId = {adUnitId}"); StarkSDK.API.GetStarkAdManager().ShowVideoAdWithId(adUnitId, isComplete => { HCDebugger.LogDebug($"[HCBytedanceAds] [ShowRewardedAd] [closeCallback] adUnitId = {adUnitId} isComplete = {isComplete}"); _callback?.Invoke(HCADSstatuscallback.RewardedClose, adUnitId, 0, "", new Dictionary { ["isEnded"] = isComplete }); }, (errCode, errMsg) => { _callback?.Invoke(HCADSstatuscallback.RewardedLoadFailed, adUnitId, errCode, errMsg, new Dictionary { ["type"] = "callback" }); HCDebugger.LogDebug($"[HCBytedanceAds] [ShowRewardedAd] [closeCallback] adUnitId = {adUnitId} errCode = {errCode} errMsg = {errMsg}"); _callback?.Invoke(HCADSstatuscallback.RewardedShowFailed, adUnitId, errCode, errMsg, null); }); } private StarkAdManager.InterstitialAd _interstitialAd; private StarkAdManager.InterstitialAd GetInterstitialAd(string adUnitId, bool isDestroy = false) { if (_interstitialAd == null) { HCDebugger.LogError("创建广告对象"); _interstitialAd = StarkSDK.API.GetStarkAdManager().CreateInterstitialAd(adUnitId, (errCode, errMsg) => { // 广告视频错误回调,参数含义 errCode, errMsg 表明错误码和错误描述 HCDebugger.LogDebug($"[HCBytedanceAds] [GetInterstitialAd] [errCallback] adUnitId = {adUnitId} errCode = {errCode} errMsg = {errMsg} _interstitialAd.IsLoaded() = {_interstitialAd?.IsLoaded()}"); if (_interstitialAd !=null && _interstitialAd.IsLoaded()) { _callback?.Invoke(HCADSstatuscallback.InterstitialShowFailed, adUnitId, errCode, errMsg, null); } else { _callback?.Invoke(HCADSstatuscallback.InterstitialLoadFailed, adUnitId, errCode, errMsg, new Dictionary { ["type"] = "callback" }); } }, () => { // HCDebugger.LogError($"销毁广告对象 {_interstitialAd} hashCode : {_interstitialAd?.GetHashCode()}"); // _interstitialAd?.Destroy(); // _interstitialAd = null; // 广告视频关闭回调 HCDebugger.LogDebug($"[HCBytedanceAds] [GetInterstitialAd] [closeCallback] adUnitId = {adUnitId}"); _callback?.Invoke(HCADSstatuscallback.InterstitialClose, adUnitId, 0, "", new Dictionary { ["type"] = "callback" }); }, () => { HCDebugger.LogDebug($"[HCBytedanceAds] [GetInterstitialAd] [loadedCallback] adUnitId = {adUnitId}"); _callback?.Invoke(HCADSstatuscallback.InterstitialLoadSuccess, adUnitId, 0, "", new Dictionary { ["type"] = "callback" }); }); } HCDebugger.LogDebug($"###########[HCBytedanceAds] [GetInterstitialAd] _interstitialAd = {_interstitialAd} hashCode : {_interstitialAd.GetHashCode()}"); return _interstitialAd; } public void LoadInterstitial(string adUnitId) { HCDebugger.LogDebug($"[HCBytedanceAds] [LoadInterstitial] adUnitId = {adUnitId}"); GetInterstitialAd(adUnitId, true).Load(); } public bool IsInterstitialReady(string adUnitId) { var isInterstitialReady = GetInterstitialAd(adUnitId).IsLoaded(); HCDebugger.LogDebug($"[HCBytedanceAds] [IsInterstitialReady] adUnitId = {adUnitId} isInterstitialReady = {isInterstitialReady}"); return isInterstitialReady; } public void ShowInterstitial(string adUnitId) { var isInterstitialReady = IsInterstitialReady(adUnitId); HCDebugger.LogDebug($"[HCBytedanceAds] [ShowInterstitial] adUnitId = {adUnitId} IsInterstitialReady = {isInterstitialReady}"); if (isInterstitialReady) { _callback?.Invoke(HCADSstatuscallback.InterstitialShowSuccess, adUnitId, 0, "", null); } GetInterstitialAd(adUnitId).Show(); // IsInterstitialLoad = false; } private StarkAdManager.BannerAd _bannerAd; private int px2dp(int px) => (int)(px * (160 / Screen.dpi)); private StarkAdManager.BannerAd GetBannerAd(string adUnitId) { var bannerStyle = new StarkAdManager.BannerStyle { width = 320, left = 10, top = 100 }; return _bannerAd ??= StarkSDK.API.GetStarkAdManager().CreateBannerAd(adUnitId, bannerStyle, 30, (errCode, errMsg) => { // 广告错误回调,参数表明错误码和错误描述. HCDebugger.LogDebug($"[HCBytedanceAds] [GetBannerAd] [errCallback] adUnitId = {adUnitId} errCode = {errCode} errMsg = {errMsg}"); _callback?.Invoke(HCADSstatuscallback.BannerLoadFailed, adUnitId, errCode, errMsg, null); _callback?.Invoke(HCADSstatuscallback.BannerShowFailed, adUnitId, errCode, errMsg, null); }, () => { // 广告加载回调 HCDebugger.LogDebug($"[HCBytedanceAds] [GetBannerAd] [loadedCallback] adUnitId = {adUnitId} "); _callback?.Invoke(HCADSstatuscallback.BannerLoadSuccess, adUnitId, 0, "", null); }, (width, height) => { // 广告样式改变回调,第一个参数是width.第二个参数是height. HCDebugger.LogDebug($"[HCBytedanceAds] [GetBannerAd] [resizeCallback] adUnitId = {adUnitId} width = {width} height = {height}"); _callback?.Invoke(HCADSstatuscallback.BannerResize, adUnitId, 0, "", new Dictionary() { ["width"] = width, ["height"] = height }); ChangeStyle(adUnitId, bannerStyle, width, height); }, () => { // 广告关闭回调,仅在WebGL有效 HCDebugger.LogDebug($"[HCBytedanceAds] [GetBannerAd] [closeCallback] adUnitId = {adUnitId}"); }); } void ChangeStyle(string adUnitId, StarkAdManager.BannerStyle style, int w, int h) { var sw = px2dp(Screen.width); //获得屏幕宽度(dp) var sh = px2dp(Screen.height); //获得屏幕高度(dp) style.top = sh - h; //底部 style.left = sw / 2 - w / 2; //中央 style.width = w; GetBannerAd(adUnitId).ReSize(style); //使用Resize函数调整位置和大小 } public void CreateBanner(string adUnitId) { HCDebugger.LogDebug($"[HCBytedanceAds] [CreateBanner] adUnitId = {adUnitId}"); GetBannerAd(adUnitId); } public void DestroyBanner(string adUnitId) { HCDebugger.LogDebug($"[HCBytedanceAds] [DestroyBanner] adUnitId = {adUnitId}"); GetBannerAd(adUnitId).Destroy(); } public void ShowBanner(string adUnitId) { var isInvalid = GetBannerAd(adUnitId).IsInvalid(); HCDebugger.LogDebug($"[HCBytedanceAds] [ShowBanner] adUnitId = {adUnitId} IsInvalid = {isInvalid}"); if (isInvalid) { _callback?.Invoke(HCADSstatuscallback.BannerShowSuccess, adUnitId, 0, "", null); } GetBannerAd(adUnitId).Show(); } public void HideBanner(string adUnitId) { HCDebugger.LogDebug($"[HCBytedanceAds] [HideBanner] adUnitId = {adUnitId}"); GetBannerAd(adUnitId).Hide(); _callback?.Invoke(HCADSstatuscallback.BannerHideSuccess, adUnitId, 0, "", null); } public void SetLogEnable(bool _enable) { } public void LoadNative(string adUnit) { } public void RemoveNative(string adUnit) { } public bool IsNativeAdReady(string adUnit) { return false; } public void ShowNative(string adUnit, float x, float y, float width, float height, string pAdPos, Action _showFailedCallback = null, Action _closeCallback = null) { } #region 激励视频回调 public void OnVideoLoaded() { HCDebugger.LogDebug("[HCBytedanceAds] [OnVideoLoaded]"); _callback?.Invoke(HCADSstatuscallback.RewardedLoadSuccess, "", 0, "", new Dictionary { ["type"] = "callback" }); } public void OnVideoShow(long timestamp) { HCDebugger.LogDebug($"[HCBytedanceAds] [OnVideoShow] timestamp = {timestamp}"); _callback?.Invoke(HCADSstatuscallback.RewardedShowSuccess, "", 0, "", null); } public void OnError(int errCode, string errorMessage) { HCDebugger.LogDebug($"[HCBytedanceAds] [OnError] errCode = {errCode} errorMessage = {errorMessage}"); } public void OnVideoClose(int watchedTime, int effectiveTime, int duration) { HCDebugger.LogDebug($"[HCBytedanceAds] [OnVideoClose] watchedTime = {watchedTime} effectiveTime = {effectiveTime} duration = {duration}"); } #endregion } } #endif