using System; using System.Collections; using System.Collections.Generic; using Script.Common; using Script.SDKManager.AdsSDKManager.Utils; using Script.Utils; using SDK.Utils; using SDKManager.AdsSDKManager.Constant; using UnityEngine; namespace Script.SDKManager.AdsSDKManager.MaxAdsManager { public class MaxAdsManager : NormalSingleton, IAdService { public string ClientName => "Max"; private string max_app_key; private string max_interstitial_units; private string max_rewarded_units; private MaxSdkBase.AdInfo _interAdInfo; private MaxSdkBase.AdInfo _rewardAdInfo; private int _rewardRetryAttempt; private int _interRetryAttempt; private float _rvStartLoadTime = 0; private float _ivStartLoadTime = 0; private string _rvPos; private string _ivPos; private Action _rvCloseCallback = null; private Action _ivCloseCallback = null; private Action _rvShowFailedCallback = null; public void Initialize() { max_app_key = AdConfigParser.GetMaxAppKey(); max_interstitial_units = AdConfigParser.GetMaxAdUnits(AdsType.Interstitial).ToArray()[0]; max_rewarded_units = AdConfigParser.GetMaxAdUnits(AdsType.Rewarded).ToArray()[0]; if (string.IsNullOrEmpty(max_app_key)) return; LoggerUtils.Debug("[Max] init max"); // 关闭反转debug面板 MaxSdk.SetCreativeDebuggerEnabled(false); InitRewardedCallback(); InitInterstitialCallback(); MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdkBase.SdkConfiguration obj) => { LoggerUtils.Debug("[Max] init max success"); }; MaxSdk.SetVerboseLogging(false); MaxSdk.SetSdkKey(max_app_key); MaxSdk.InitializeSdk(); } #region 激励广告功能 private void InitRewardedCallback() { if (string.IsNullOrEmpty(max_rewarded_units)) return; MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedAdLoadedEvent; MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedAdLoadFailedEvent; MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardedAdFailedToDisplayEvent; MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnRewardedAdDisplayedEvent; MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardedAdClickedEvent; MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedAdHiddenEvent; MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardedRevenue; } public void LoadRewarded() { MaxSdk.LoadRewardedAd(max_rewarded_units); } public void DisplayRewarded(string adPos, Action rewardCallback = null, Action showFailedCallback = null) { _rvPos = adPos; _rvCloseCallback = rewardCallback; _rvShowFailedCallback = showFailedCallback; MaxSdk.ShowRewardedAd(max_rewarded_units); } public double GetRewardedRevenue() { if (IsRewardedAvailable() && _rewardAdInfo != null) { return _rewardAdInfo.Revenue; } else { return -1; } } public bool IsRewardedAvailable() { return string.IsNullOrEmpty(max_rewarded_units) ? false : MaxSdk.IsRewardedAdReady(max_rewarded_units);; } private void OnRewardedRevenue(string adunit, MaxSdkBase.AdInfo adInfo) { LoggerUtils.Debug("[Max] OnRewardedRevenue network: " + adInfo.NetworkName + " revenue: " + adInfo.Revenue + " NetworkPlacement: " + adInfo.NetworkPlacement + " AdUnitIdentifier: " + adInfo.AdUnitIdentifier + " Placement: " + adInfo.Placement); AdjustTrackEvent.Instance.TrackAdEvent(adInfo.Revenue,adInfo.NetworkName,adInfo.AdUnitIdentifier,adInfo.Placement); } private void OnRewardedAdLoadedEvent(string adunit, MaxSdkBase.AdInfo adInfo) { LoggerUtils.Debug("[Max] OnRewardedAdLoadedEvent network: " + adInfo.NetworkName + " revenue: " + adInfo.Revenue + " NetworkPlacement: " + adInfo.NetworkPlacement + " AdUnitIdentifier: " + adInfo.AdUnitIdentifier + " Placement: " + adInfo.Placement); _rewardAdInfo = adInfo; _rewardRetryAttempt = 0; } private void OnRewardedAdLoadFailedEvent(string adunit, MaxSdkBase.ErrorInfo errorInfo) { LoggerUtils.Debug("[Max] OnRewardedAdLoadFailedEvent errorInfo" + errorInfo.Message); _rewardRetryAttempt++; double retryDelay = Math.Pow(2, Math.Min(6, _rewardRetryAttempt)); TimerUtils.DelayExecute((float)retryDelay, LoadRewarded); } private void OnRewardedAdDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo info) { LoggerUtils.Debug("[Max] OnRewardedAdDisplayedEvent network: " + info.NetworkName + " revenue: " + info.Revenue + " NetworkPlacement: " + info.NetworkPlacement + " AdUnitIdentifier: " + info.AdUnitIdentifier + " Placement: " + info.Placement); } private void OnRewardedAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { LoggerUtils.Debug("[Max] OnRewardedAdClickedEvent"); } private void OnRewardedAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo) { LoggerUtils.Debug("[Max] OnRewardedAdFailedToDisplayEvent :" + errorInfo.Message + " " + errorInfo.Code + " " + errorInfo.MediatedNetworkErrorMessage + " " + errorInfo.MediatedNetworkErrorCode); _rvShowFailedCallback?.Invoke(); _rvShowFailedCallback = null; LoadRewarded(); } private void OnRewardedAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { _rvCloseCallback?.Invoke(true); _rvCloseCallback = null; LoadRewarded(); LoggerUtils.Debug("[Max] OnRewardedAdHiddenEvent"); } #endregion #region 插页广告功能 private void InitInterstitialCallback() { if (string.IsNullOrEmpty(max_interstitial_units)) return; MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoadedEvent; MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialLoadFailedEvent; MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterstitialAdFailedToDisplayEvent; MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialHiddenEvent; MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnInterstitialDisplayedEvent; MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnInterstitialRevenue; } public void LoadInterstitial() { MaxSdk.LoadInterstitial(max_interstitial_units); } public double GetInterstitialRevenue() { if (IsInterstitialAvailable() && _interAdInfo != null) { return _interAdInfo.Revenue; } else { return -1; } } public void DisplayInterstitial(string ivPos, IvType _IvType = IvType.IV1, Action closeCallback = null) { _ivPos = ivPos; _ivCloseCallback = closeCallback; MaxSdk.ShowInterstitial(max_interstitial_units); } public bool IsInterstitialAvailable() { return string.IsNullOrEmpty(max_interstitial_units) ? false : MaxSdk.IsInterstitialReady(max_interstitial_units); } private void OnInterstitialLoadedEvent(string adunit, MaxSdkBase.AdInfo adInfo) { LoggerUtils.Debug("[Max] OnInterstitialLoadedEvent network: " + adInfo.NetworkName + " revenue: " + adInfo.Revenue + " NetworkPlacement: " + adInfo.NetworkPlacement + " AdUnitIdentifier: " + adInfo.AdUnitIdentifier + " Placement: " + adInfo.Placement); _interAdInfo = adInfo; _interRetryAttempt = 0; } private void OnInterstitialLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) { LoggerUtils.Debug("[Max] OnInterstitialLoadFailedEvent :" + errorInfo); _interRetryAttempt++; double retryDelay = Math.Pow(2, Math.Min(6, _interRetryAttempt)); TimerUtils.DelayExecute((float)retryDelay, LoadInterstitial); } private void OnInterstitialAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo,MaxSdkBase.AdInfo arg3) { LoggerUtils.Debug("[Max] OnInterstitialAdFailedToDisplayEvent :" + errorInfo.Message + " " + errorInfo.Code + " " + errorInfo.MediatedNetworkErrorMessage + " " + errorInfo.MediatedNetworkErrorCode); _ivCloseCallback?.Invoke(); _ivCloseCallback = null; LoadInterstitial(); } private void OnInterstitialDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo info) { LoggerUtils.Debug($"[Max] OnInterstitialDisplayedEvent network: {info.NetworkName}, revenue: {info.Revenue},NetworkPlacement: {info.NetworkPlacement}, AdUnitIdentifier: {info.AdUnitIdentifier},Placement: {info.Placement}"); } private void OnInterstitialHiddenEvent(string adUnitId, MaxSdkBase.AdInfo info) { LoggerUtils.Debug($"[Max] OnInterstitialHiddenEvent"); _ivCloseCallback?.Invoke(); _ivCloseCallback = null; LoadInterstitial(); } private void OnInterstitialRevenue(string adunit, MaxSdkBase.AdInfo adInfo) { LoggerUtils.Debug("[Max] OnInterstitialRevenue network: " + adInfo.NetworkName + " revenue: " + adInfo.Revenue + " NetworkPlacement: " + adInfo.NetworkPlacement + " AdUnitIdentifier: " + adInfo.AdUnitIdentifier + " Placement: " + adInfo.Placement); AdjustTrackEvent.Instance.TrackAdEvent(adInfo.Revenue,adInfo.NetworkName,adInfo.AdUnitIdentifier,adInfo.Placement); } #endregion #region 开屏广告功能 public void LoadSplash() { } public bool IsSplashAvailable() { return false; } public void DisplaySplash(){} public double GetSplashRevenue() {return 0;} #endregion #region 原生广告功能 public void LoadNative(){} public double GetNativeRevenue() {return 0;} public void DisplayNative(NativeAdPosition position){} public bool IsNativeAvailable(){return false;} public void RemoveNative(){} #endregion #region 横幅广告功能 public void LoadBanner(){} public bool IsBannerAvailable(){return false;} public void HideBanner(){} public double GetBannerRevenue(){return 0;} public void DisplayBanner(){} #endregion } }