SDK_UnityMoney/Assets/Script/SDKManager/AdsSDKManager/MaxAdsManager/MaxAdsManager.cs

344 lines
15 KiB
C#
Raw Normal View History

2025-08-31 02:12:10 +00:00
using System;
using System.Collections;
using System.Collections.Generic;
2025-09-01 03:39:21 +00:00
using System.Linq;
2025-08-31 12:48:14 +00:00
using System.Net.Security;
using Firebase.Analytics;
using UnityEngine;
2025-09-01 10:32:50 +00:00
namespace WZ
{
2025-09-02 09:14:49 +00:00
public class MaxAdsManager : D_MonoSingleton<MaxAdsManager>, IAdService
{
2025-08-31 12:48:14 +00:00
public string ClientName => "AppLovin";
2025-09-01 07:14:26 +00:00
public PlatformType Platfrom => PlatformType.AppLovin;
2025-09-01 12:53:08 +00:00
private string _max_app_key;
private string _max_interstitial_units;
private string _max_rewarded_units;
2025-08-31 02:12:10 +00:00
private MaxSdkBase.AdInfo _interAdInfo;
private MaxSdkBase.AdInfo _rewardAdInfo;
private int _rewardRetryAttempt;
private int _interRetryAttempt;
private float _rvStartLoadTime = 0;
private float _ivStartLoadTime = 0;
2025-08-31 05:15:14 +00:00
private string _rvPos;
private string _ivPos;
2025-09-01 14:14:33 +00:00
private Action<bool,double> _rvCloseCallback = null;
private Action<double> _ivCloseCallback = null;
2025-08-31 05:15:14 +00:00
private Action _rvShowFailedCallback = null;
public bool _initialized { get; private set; } = false;
private bool _receivedReward = false;
2025-08-31 02:12:10 +00:00
public void Initialize()
{
2025-09-02 13:42:07 +00:00
if (string.IsNullOrEmpty(_max_app_key) || _initialized) return;
2025-08-31 02:12:10 +00:00
LoggerUtils.Debug("[Max] init max");
// 关闭反转debug面板
MaxSdk.SetCreativeDebuggerEnabled(false);
2025-08-31 02:12:10 +00:00
InitRewardedCallback();
InitInterstitialCallback();
MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdkBase.SdkConfiguration obj) =>
{
LoggerUtils.Debug("[Max] init max success");
};
MaxSdk.SetVerboseLogging(false);
2025-09-01 12:53:08 +00:00
MaxSdk.SetSdkKey(_max_app_key);
2025-08-31 02:12:10 +00:00
MaxSdk.InitializeSdk();
2025-09-01 07:14:26 +00:00
LoadRewarded();
LoadInterstitial();
_initialized = true;
2025-08-31 02:12:10 +00:00
}
2025-09-01 12:53:08 +00:00
public void RefreshAdsData()
{
_max_app_key = AdConfigParser.GetMaxAppKey();
_max_interstitial_units = AdConfigParser.GetMaxAdUnits(AdsType.Interstitial).FirstOrDefault();
_max_rewarded_units = AdConfigParser.GetMaxAdUnits(AdsType.Rewarded).FirstOrDefault();
}
2025-08-31 02:12:10 +00:00
#region 广
private void InitRewardedCallback()
2025-08-31 12:48:14 +00:00
{
2025-09-01 12:53:08 +00:00
if (string.IsNullOrEmpty(_max_rewarded_units)) return;
2025-08-31 02:12:10 +00:00
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;
MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent;
2025-08-31 02:12:10 +00:00
}
public void LoadRewarded()
{
2025-09-01 12:53:08 +00:00
if (string.IsNullOrEmpty(_max_rewarded_units)) return;
MaxSdk.LoadRewardedAd(_max_rewarded_units);
2025-09-01 07:14:26 +00:00
AdsActionEvents.TrackAdStartLoad(Platfrom, "", "", AdsType.Rewarded);
_rvStartLoadTime = Time.realtimeSinceStartup;
2025-08-31 02:12:10 +00:00
}
2025-09-01 14:14:33 +00:00
public void DisplayRewarded(string adPos, Action<bool,double> rewardCallback = null, Action showFailedCallback = null)
2025-08-31 02:12:10 +00:00
{
2025-08-31 05:15:14 +00:00
_rvPos = adPos;
_rvCloseCallback = rewardCallback;
_rvShowFailedCallback = showFailedCallback;
2025-09-01 12:53:08 +00:00
MaxSdk.ShowRewardedAd(_max_rewarded_units);
2025-08-31 02:12:10 +00:00
}
public double GetRewardedRevenue()
2025-08-31 12:48:14 +00:00
{
2025-08-31 02:12:10 +00:00
if (IsRewardedAvailable() && _rewardAdInfo != null)
{
return _rewardAdInfo.Revenue;
}
else
{
return -1;
}
2025-08-31 12:48:14 +00:00
}
2025-08-31 02:12:10 +00:00
public bool IsRewardedAvailable()
{
2025-09-01 12:53:08 +00:00
return string.IsNullOrEmpty(_max_rewarded_units) ? false : MaxSdk.IsRewardedAdReady(_max_rewarded_units); ;
2025-08-31 02:12:10 +00:00
}
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);
2025-08-31 12:48:14 +00:00
TrackAdImpression(adInfo, AdsType.Rewarded);
2025-08-31 02:12:10 +00:00
}
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);
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Rewarded);
2025-08-31 02:12:10 +00:00
_rewardAdInfo = adInfo;
_rewardRetryAttempt = 0;
2025-09-01 07:14:26 +00:00
AdsActionEvents.TrackAdLoaded(Platfrom, adInfo.NetworkName, adInfo.AdUnitIdentifier, AdsType.Rewarded, Time.realtimeSinceStartup - _rvStartLoadTime);
2025-08-31 02:12:10 +00:00
}
2025-08-31 02:12:10 +00:00
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));
2025-09-01 13:28:17 +00:00
TimerUtils.Instance.DelayExecute((float)retryDelay, LoadRewarded);
AdsActionEvents.TrackAdFailToLoad(Platfrom, "", "", AdsType.Rewarded, Time.realtimeSinceStartup - _rvStartLoadTime, errorInfo.Message);
2025-09-01 07:14:26 +00:00
2025-08-31 02:12:10 +00:00
}
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");
2025-09-01 07:14:26 +00:00
AdsActionEvents.TrackAdClicked(Platfrom,adInfo.NetworkName,adInfo.AdUnitIdentifier,AdsType.Rewarded,_rvPos,adInfo.Revenue);
2025-08-31 02:12:10 +00:00
}
private void OnRewardedAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
{
LoggerUtils.Debug("[Max] OnRewardedAdFailedToDisplayEvent :" + errorInfo.Message + " " + errorInfo.Code + " " + errorInfo.MediatedNetworkErrorMessage + " " + errorInfo.MediatedNetworkErrorCode);
2025-08-31 05:15:14 +00:00
_rvShowFailedCallback?.Invoke();
_rvShowFailedCallback = null;
2025-08-31 02:12:10 +00:00
LoadRewarded();
}
private void OnRewardedAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
_rvCloseCallback?.Invoke(_receivedReward,adInfo.Revenue);
2025-08-31 05:15:14 +00:00
_rvCloseCallback = null;
_receivedReward = false;
2025-08-31 02:12:10 +00:00
LoadRewarded();
LoggerUtils.Debug("[Max] OnRewardedAdHiddenEvent "+_receivedReward);
2025-09-01 07:14:26 +00:00
AdsActionEvents.TrackAdClosed(Platfrom,adInfo.NetworkName,adInfo.AdUnitIdentifier,AdsType.Rewarded,_rvPos,adInfo.Revenue);
}
private void OnRewardedAdReceivedRewardEvent(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo arg3)
{
LoggerUtils.Debug("[Max] OnRewardedAdReceivedRewardEvent network: " + arg3.NetworkName + " revenue: " + arg3.Revenue + " NetworkPlacement: " + arg3.NetworkPlacement + " AdUnitIdentifier: " + arg3.AdUnitIdentifier + " Placement: " + arg3.Placement);
_receivedReward = true;
}
private void RewardCallback()
{
2025-09-01 07:14:26 +00:00
2025-08-31 02:12:10 +00:00
}
#endregion
#region 广
private void InitInterstitialCallback()
{
2025-09-01 12:53:08 +00:00
if (string.IsNullOrEmpty(_max_interstitial_units)) return;
2025-08-31 02:12:10 +00:00
MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoadedEvent;
MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialLoadFailedEvent;
MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterstitialAdFailedToDisplayEvent;
MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialHiddenEvent;
MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnInterstitialDisplayedEvent;
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnInterstitialRevenue;
2025-09-01 07:14:26 +00:00
MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterstitialClickedEvent;
2025-08-31 02:12:10 +00:00
}
public void LoadInterstitial()
{
2025-09-01 12:53:08 +00:00
if (string.IsNullOrEmpty(_max_rewarded_units)) return;
MaxSdk.LoadInterstitial(_max_interstitial_units);
2025-09-01 07:14:26 +00:00
AdsActionEvents.TrackAdStartLoad(Platfrom, "", "", AdsType.Interstitial);
_ivStartLoadTime = Time.realtimeSinceStartup;
2025-08-31 02:12:10 +00:00
}
public double GetInterstitialRevenue()
{
if (IsInterstitialAvailable() && _interAdInfo != null)
{
return _interAdInfo.Revenue;
}
else
{
return -1;
}
}
2025-09-01 14:14:33 +00:00
public void DisplayInterstitial(string ivPos, IvType _IvType = IvType.IV1, Action<double> closeCallback = null)
2025-08-31 02:12:10 +00:00
{
2025-08-31 05:15:14 +00:00
_ivPos = ivPos;
_ivCloseCallback = closeCallback;
2025-09-01 12:53:08 +00:00
MaxSdk.ShowInterstitial(_max_interstitial_units);
2025-08-31 02:12:10 +00:00
}
public bool IsInterstitialAvailable()
{
2025-09-01 12:53:08 +00:00
return string.IsNullOrEmpty(_max_interstitial_units) ? false : MaxSdk.IsInterstitialReady(_max_interstitial_units);
2025-08-31 02:12:10 +00:00
}
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);
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Interstitial);
2025-08-31 02:12:10 +00:00
_interAdInfo = adInfo;
_interRetryAttempt = 0;
2025-09-01 07:56:42 +00:00
AdsActionEvents.TrackAdLoaded(Platfrom, adInfo.NetworkName, adInfo.AdUnitIdentifier, AdsType.Interstitial, Time.realtimeSinceStartup - _ivStartLoadTime);
2025-09-01 07:14:26 +00:00
2025-08-31 02:12:10 +00:00
}
private void OnInterstitialLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
LoggerUtils.Debug("[Max] OnInterstitialLoadFailedEvent :" + errorInfo);
_interRetryAttempt++;
double retryDelay = Math.Pow(2, Math.Min(6, _interRetryAttempt));
2025-09-01 13:28:17 +00:00
TimerUtils.Instance.DelayExecute((float)retryDelay, LoadInterstitial);
2025-09-01 07:56:42 +00:00
AdsActionEvents.TrackAdFailToLoad(Platfrom, "","",AdsType.Interstitial,Time.realtimeSinceStartup - _ivStartLoadTime,errorInfo.Message);
2025-08-31 02:12:10 +00:00
}
2025-08-31 12:48:14 +00:00
private void OnInterstitialAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo arg3)
2025-08-31 02:12:10 +00:00
{
LoggerUtils.Debug("[Max] OnInterstitialAdFailedToDisplayEvent :" + errorInfo.Message + " " + errorInfo.Code + " " + errorInfo.MediatedNetworkErrorMessage + " " + errorInfo.MediatedNetworkErrorCode);
2025-09-01 14:14:33 +00:00
_ivCloseCallback?.Invoke(0);
2025-08-31 05:15:14 +00:00
_ivCloseCallback = null;
2025-08-31 02:12:10 +00:00
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}");
}
2025-09-01 07:14:26 +00:00
private void OnInterstitialHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
2025-08-31 02:12:10 +00:00
{
LoggerUtils.Debug($"[Max] OnInterstitialHiddenEvent");
2025-09-01 07:14:26 +00:00
AdsActionEvents.TrackAdClosed(Platfrom,adInfo.NetworkName,adInfo.AdUnitIdentifier,AdsType.Interstitial,"",adInfo.Revenue);
2025-09-01 14:14:33 +00:00
_ivCloseCallback?.Invoke(adInfo.Revenue);
2025-08-31 05:15:14 +00:00
_ivCloseCallback = null;
2025-08-31 02:12:10 +00:00
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);
2025-08-31 12:48:14 +00:00
TrackAdImpression(adInfo, AdsType.Interstitial);
2025-08-31 02:12:10 +00:00
}
2025-09-01 07:14:26 +00:00
private void OnInterstitialClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
AdsActionEvents.TrackAdClicked(Platfrom,adInfo.NetworkName,adInfo.AdUnitIdentifier,AdsType.Interstitial,"",adInfo.Revenue);
}
2025-08-31 02:12:10 +00:00
#endregion
#region 广
public void LoadSplash() { }
public bool IsSplashAvailable() { return false; }
2025-08-31 12:48:14 +00:00
public void DisplaySplash() { }
public double GetSplashRevenue() { return 0; }
2025-08-31 02:12:10 +00:00
#endregion
#region 广
2025-08-31 12:48:14 +00:00
public void LoadNative() { }
2025-09-02 02:07:10 +00:00
public bool IsNativeAvailable(string adUnitId)
{
return false;
}
public void DisplayNative(string _adPos, string adUnitId, NativeAdPosition position)
{
}
public void RemoveNative(string adUnitId)
{
}
public double GetNativeRevenue(string adUnitId)
{
return 0;
}
2025-08-31 02:12:10 +00:00
#endregion
#region 广
2025-08-31 12:48:14 +00:00
public void LoadBanner() { }
public bool IsBannerAvailable() { return false; }
public void HideBanner() { }
public double GetBannerRevenue() { return 0; }
public void DisplayBanner() { }
#endregion
#region 广
public void TrackAdImpression(MaxSdkBase.AdInfo adInfo, AdsType type)
{
AdjustTrackEvent.Instance.TrackAdEvent(adInfo.Revenue,
adInfo.NetworkName,
adInfo.AdUnitIdentifier,
adInfo.Placement);
FireBaseAnalyticsManager.Instance.OnAdRevenueEvent(ClientName,
adInfo.NetworkName,
adInfo.AdUnitIdentifier,
type,
2025-08-31 12:48:14 +00:00
adInfo.Revenue,
type == AdsType.Rewarded ? _rvPos : "",
2025-09-04 09:19:05 +00:00
AdPlayCountManager.GetAdsActionCount(type,AdPlayCountManager.PLAY_COUNT_SUFFIX));
2025-08-31 12:48:14 +00:00
ShuShuEvent.Instance.OnAdRevenueEvent(ClientName,
adInfo.NetworkName,
adInfo.AdUnitIdentifier,
type.ToString(),
adInfo.Revenue,
type == AdsType.Rewarded ? _rvPos : "",
2025-09-04 09:19:05 +00:00
AdPlayCountManager.GetAdsActionCount(type,AdPlayCountManager.PLAY_COUNT_SUFFIX));
2025-08-31 12:48:14 +00:00
}
2025-08-31 02:12:10 +00:00
#endregion
}
}