chicken_dy/Assets/HCMiniSdk/Scripts/WebGL/HCBytedance/HCBytedanceAds.cs

267 lines
11 KiB
C#
Raw Normal View History

2024-03-07 12:12:48 +00:00
#if WEBGL_BYTEDANCE
using System;
using System.Collections.Generic;
using StarkSDKSpace;
using UnityEngine;
namespace HC
{
public class HCBytedanceAds : HCSingleton<HCBytedanceAds>, HCIAds, StarkAdManager.VideoAdCallback
{
private Action<HCADSstatuscallback, string, int, string, Dictionary<string, object>> _callback;
public void InitializeSdk(Action<HCADSstatuscallback, string, int, string, Dictionary<string, object>> 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<string, object>
{
["isEnded"] = isComplete
});
}, (errCode, errMsg) =>
{
_callback?.Invoke(HCADSstatuscallback.RewardedLoadFailed, adUnitId, errCode, errMsg, new Dictionary<string, object>
{
["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<string, object>
{
["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<string, object>
{
["type"] = "callback"
});
}, () =>
{
HCDebugger.LogDebug($"[HCBytedanceAds] [GetInterstitialAd] [loadedCallback] adUnitId = {adUnitId}");
_callback?.Invoke(HCADSstatuscallback.InterstitialLoadSuccess, adUnitId, 0, "", new Dictionary<string, object>
{
["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<string, object>()
{
["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<int, string> _showFailedCallback = null, Action _closeCallback = null)
{
}
#region
public void OnVideoLoaded()
{
HCDebugger.LogDebug("[HCBytedanceAds] [OnVideoLoaded]");
_callback?.Invoke(HCADSstatuscallback.RewardedLoadSuccess, "", 0, "", new Dictionary<string, object>
{
["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