| 
									
										
										
										
											2025-08-30 04:15:48 +00:00
										 |  |  |  | using System; | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  |  | using System.Linq; | 
					
						
							| 
									
										
										
										
											2025-09-01 05:59:06 +00:00
										 |  |  |  | using Firebase.RemoteConfig; | 
					
						
							|  |  |  |  | using Newtonsoft.Json; | 
					
						
							| 
									
										
										
										
											2025-08-30 04:15:48 +00:00
										 |  |  |  | using UnityEngine; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  | namespace WZ | 
					
						
							| 
									
										
										
										
											2025-08-30 04:15:48 +00:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2025-09-02 09:14:49 +00:00
										 |  |  |  |     public class AdsSDKManager : D_MonoSingleton<AdsSDKManager> | 
					
						
							| 
									
										
										
										
											2025-08-30 04:15:48 +00:00
										 |  |  |  |     { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         private List<IAdService> _adNetworks = new List<IAdService>(); | 
					
						
							|  |  |  |  |         // 是否有激励视频或者插屏广告在展示 | 
					
						
							|  |  |  |  |         public bool otherAdsOnShow = false; | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 看完广告的回调 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         private Action<double> AdRewardCallback; | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 广告竞价开关:激励、插屏、全屏Native广告竞价 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public bool IsMoreAdsBidding = false; | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         public Action OnSplashAdCloseCallback; | 
					
						
							| 
									
										
										
										
											2025-08-30 04:15:48 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         public void InitSDK(Action action) | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             OnSplashAdCloseCallback = action; | 
					
						
							| 
									
										
										
										
											2025-09-02 09:14:49 +00:00
										 |  |  |  |             // 初始化广告平台状态,用于竞价失败后刷新 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             BidPlatformManager.Instance.InitializePlatformStates(AdConfigParser.GetAdExpireInSec()); | 
					
						
							|  |  |  |  |             InitializeAdNetworks(); | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         private void InitializeAdNetworks() | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             _adNetworks.Add(AdmobAdsManager.Instance); | 
					
						
							|  |  |  |  |             _adNetworks.Add(BigoAdsManager.Instance); | 
					
						
							|  |  |  |  |             _adNetworks.Add(TpnAdsManager.Instance); | 
					
						
							|  |  |  |  |             _adNetworks.Add(MaxAdsManager.Instance); | 
					
						
							| 
									
										
										
										
											2025-09-02 05:38:42 +00:00
										 |  |  |  |             _adNetworks.Add(KwaiAdsManager.Instance); | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             foreach (var network in _adNetworks) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-01 12:53:08 +00:00
										 |  |  |  |                 network.RefreshAdsData(); | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |                 network.Initialize(); | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-09-01 13:28:17 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public void RefreshAdsData() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             foreach (var network in _adNetworks) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 network.RefreshAdsData(); | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  | #region  激励视频广告 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         public bool IsRewardAdReady() | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             return _adNetworks.Any(network => network.IsRewardedAvailable()); | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 展示激励广告 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="callback"></param> | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |         public void ShowRewardAd(string _adPos, Action<bool, double> _rewardCallback = null, Action _showFailedCallback = null) | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-02 09:14:49 +00:00
										 |  |  |  |             LoggerUtils.Debug("ShowRewardAd _adPos:"+_adPos+" ready:"+IsRewardAdReady()); | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             AdsActionEvents.TrackAdPosition(AdsType.Rewarded, _adPos); | 
					
						
							|  |  |  |  |             if (!IsRewardAdReady()) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _showFailedCallback?.Invoke(); | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-09-02 09:14:49 +00:00
										 |  |  |  |             AdsSDKManager.Instance.otherAdsOnShow = true; | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             PlatformType result = GetBestPlatformType(false); | 
					
						
							|  |  |  |  |             BidPlatformManager.Instance.RecordBidSuccess(result, AdsType.Rewarded); | 
					
						
							|  |  |  |  |             if (result == PlatformType.AppLovin) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 MaxAdsManager.Instance.DisplayRewarded(_adPos, _rewardCallback, _showFailedCallback); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else if (result == PlatformType.Admob) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 AdmobAdsManager.Instance.DisplayRewarded(_adPos, _rewardCallback, _showFailedCallback); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else if (result == PlatformType.Bigo) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 BigoAdsManager.Instance.DisplayRewarded(_adPos, _rewardCallback, _showFailedCallback); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else if (result == PlatformType.Topon) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 TpnAdsManager.Instance.DisplayRewarded(_adPos, _rewardCallback, _showFailedCallback); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else if (result == PlatformType.Kwai) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-02 05:38:42 +00:00
										 |  |  |  |                 KwaiAdsManager.Instance.DisplayRewarded(_adPos,_rewardCallback, _showFailedCallback); | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _showFailedCallback?.Invoke(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             AdPlayCountManager.IncrementAdPlayCount(AdsType.Rewarded); | 
					
						
							|  |  |  |  |             CheckAndRefreshExpiredBids(AdsType.Rewarded); | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  | #endregion | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  | #region  插屏广告 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         public bool IsInterstitialReady() | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             return _adNetworks.Any(network => network.IsInterstitialAvailable()); | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 展示激励广告 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="callback"></param> | 
					
						
							| 
									
										
										
										
											2025-09-01 14:14:33 +00:00
										 |  |  |  |         public void ShowInterstitialAd(string _adPos, IvType _IvType = IvType.IV1, Action<double> _closeCallback = null) | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             AdsActionEvents.TrackAdPosition(AdsType.Interstitial, _adPos); | 
					
						
							| 
									
										
										
										
											2025-09-02 05:38:42 +00:00
										 |  |  |  |             if (!IsInterstitialReady()) | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-01 14:14:33 +00:00
										 |  |  |  |                 _closeCallback?.Invoke(0); | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |                 _closeCallback = null; | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-09-02 09:14:49 +00:00
										 |  |  |  |             AdsSDKManager.Instance.otherAdsOnShow = true; | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             PlatformType result = GetBestPlatformType(true); | 
					
						
							|  |  |  |  |             BidPlatformManager.Instance.RecordBidSuccess(result, AdsType.Interstitial); | 
					
						
							|  |  |  |  |             if (result == PlatformType.AppLovin) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 MaxAdsManager.Instance.DisplayInterstitial(_adPos, _IvType, _closeCallback); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else if (result == PlatformType.Admob) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 AdmobAdsManager.Instance.DisplayInterstitial(_adPos, _IvType, _closeCallback); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else if (result == PlatformType.Bigo) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 BigoAdsManager.Instance.DisplayInterstitial(_adPos, _IvType, _closeCallback); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else if (result == PlatformType.Topon) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 TpnAdsManager.Instance.DisplayInterstitial(_adPos, _IvType, _closeCallback); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else if (result == PlatformType.Kwai) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-02 05:38:42 +00:00
										 |  |  |  |                 KwaiAdsManager.Instance.DisplayInterstitial(_adPos, _IvType, _closeCallback); | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-01 14:14:33 +00:00
										 |  |  |  |                 _closeCallback?.Invoke(0); | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             AdPlayCountManager.IncrementAdPlayCount(AdsType.Interstitial); | 
					
						
							|  |  |  |  |             // 刷新其他类型广告 | 
					
						
							|  |  |  |  |             CheckAndRefreshExpiredBids(AdsType.Interstitial); | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region  横幅广告 | 
					
						
							|  |  |  |  |         public bool IsBannerAdReady() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             return AdmobAdsManager.Instance.IsBannerAvailable(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public void ShowBanner() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             AdsActionEvents.TrackAdPosition(AdsType.Interstitial, ""); | 
					
						
							|  |  |  |  |             if (IsBannerAdReady()) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 AdmobAdsManager.Instance.DisplayBanner(); | 
					
						
							|  |  |  |  |                 AdPlayCountManager.IncrementAdPlayCount(AdsType.Banner); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public void HideBanner() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             AdmobAdsManager.Instance.HideBanner(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 原生广告 | 
					
						
							| 
									
										
										
										
											2025-09-02 02:07:10 +00:00
										 |  |  |  |         public bool IsNativeAdReady(string adUnitId) | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-02 02:07:10 +00:00
										 |  |  |  |             return AdmobAdsManager.Instance.IsNativeAvailable(adUnitId); | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-02 02:07:10 +00:00
										 |  |  |  |         public void ShowNativeAd(string _adPos, string adUnitId, NativeAdPosition position) | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-02 02:07:10 +00:00
										 |  |  |  |             if (IsNativeAdReady(adUnitId)) | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-02 02:07:10 +00:00
										 |  |  |  |                 AdmobAdsManager.Instance.DisplayNative(_adPos, adUnitId, position); | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |                 AdPlayCountManager.IncrementAdPlayCount(AdsType.Native); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-02 02:07:10 +00:00
										 |  |  |  |         public void RemoveNativeAd(string adUnitId) | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-02 02:07:10 +00:00
										 |  |  |  |             AdmobAdsManager.Instance.RemoveNative(adUnitId); | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         #region 开屏广告 | 
					
						
							|  |  |  |  |         public bool IsSplashAvailable() | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             return _adNetworks.Any(network => network.IsSplashAvailable()); | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         public void ShowSplashAd() | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             AdmobAdsManager.Instance.DisplaySplash(); | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         public void LoadSplashAd() | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             AdmobAdsManager.Instance.LoadSplash(); | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private PlatformType GetBestPlatformType(bool isInterstitial) | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             if (isInterstitial) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-02 09:14:49 +00:00
										 |  |  |  |                 LoggerUtils.Debug("yangwu max price"); | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |                 AdPriceInfo priceInfo = new AdPriceInfo( | 
					
						
							|  |  |  |  |                     maxPrice: MaxAdsManager.Instance.GetInterstitialRevenue(), | 
					
						
							|  |  |  |  |                     admobPrice: AdmobAdsManager.Instance.GetInterstitialRevenue(), | 
					
						
							|  |  |  |  |                     bigoPrice: BigoAdsManager.Instance.GetInterstitialRevenue(), | 
					
						
							| 
									
										
										
										
											2025-09-02 05:38:42 +00:00
										 |  |  |  |                     kwaiPrice: KwaiAdsManager.Instance.GetInterstitialRevenue(), | 
					
						
							| 
									
										
										
										
											2025-09-01 12:53:08 +00:00
										 |  |  |  |                     toponAdUnitId: TpnAdsManager.Instance._topon_interstitial_units | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |                 ); | 
					
						
							|  |  |  |  |                 return AdsBidResult.GetPlatformType(priceInfo); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 AdPriceInfo priceInfo = new AdPriceInfo( | 
					
						
							|  |  |  |  |                     maxPrice: MaxAdsManager.Instance.GetRewardedRevenue(), | 
					
						
							|  |  |  |  |                     admobPrice: AdmobAdsManager.Instance.GetRewardedRevenue(), | 
					
						
							|  |  |  |  |                     bigoPrice: BigoAdsManager.Instance.GetRewardedRevenue(), | 
					
						
							| 
									
										
										
										
											2025-09-02 05:38:42 +00:00
										 |  |  |  |                     kwaiPrice: KwaiAdsManager.Instance.GetRewardedRevenue(), | 
					
						
							| 
									
										
										
										
											2025-09-01 12:53:08 +00:00
										 |  |  |  |                     toponAdUnitId: TpnAdsManager.Instance._topon_rewarded_units | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |                 ); | 
					
						
							|  |  |  |  |                 return AdsBidResult.GetPlatformType(priceInfo); | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-02 06:20:54 +00:00
										 |  |  |  |         #region IvRules | 
					
						
							| 
									
										
										
										
											2025-09-02 06:29:21 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |         public bool IvRulesShow(IvType ivadType) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             //1.获取远程配置 | 
					
						
							|  |  |  |  |             string json = FireBaseRemoteConfigManager.Instance.GetRemoteConfigString("IV_RULES"); | 
					
						
							|  |  |  |  |             if (string.IsNullOrEmpty(json)) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return true; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             //2.解析配置 | 
					
						
							|  |  |  |  |             var dates = JsonConvert.DeserializeObject<IvRulesData[]>(json); | 
					
						
							|  |  |  |  |             if (dates == null && dates.Length == 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return true; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             //3.获取IVADType对应的配置 | 
					
						
							|  |  |  |  |             IvRulesData ivRulesData = null; | 
					
						
							|  |  |  |  |             foreach (var data in dates) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (data.type == (int)ivadType) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     ivRulesData = data; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (ivRulesData == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return true; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             //4.判断skip(次安装跳过几次触发不展示广告) | 
					
						
							|  |  |  |  |             int skipLevel = ivRulesData.skipLevel; | 
					
						
							| 
									
										
										
										
											2025-09-02 06:20:54 +00:00
										 |  |  |  |             int currentSkipLevel = PlayerPrefsUtils.GetPlayerPrefsInt($"{IvRulesKey.KEY_SKIPLEVEL}_{ivadType.ToString()}", 0); | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |             if (currentSkipLevel < skipLevel) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-02 06:20:54 +00:00
										 |  |  |  |                 LoggerUtils.Debug($"[SDK] {ivadType} skipLevel limit"); | 
					
						
							|  |  |  |  |                 PlayerPrefsUtils.SavePlayerPrefsInt($"{IvRulesKey.KEY_SKIPLEVEL}_{ivadType.ToString()}", currentSkipLevel + 1); | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |                 return false; | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-09-02 06:20:54 +00:00
										 |  |  |  |             //5.判断overLevel(每跳过几次触发) | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |             int overLevel = ivRulesData.overLevel; | 
					
						
							| 
									
										
										
										
											2025-09-02 06:20:54 +00:00
										 |  |  |  |             int currentOverLevel = IvRulesConst.OverLevels.ContainsKey(ivadType.ToString()) ?  IvRulesConst.OverLevels[ivadType.ToString()] : 0; | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |             if (currentOverLevel < overLevel) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-02 06:20:54 +00:00
										 |  |  |  |                 LoggerUtils.Debug($"[SDK] {ivadType} overLevel limit"); | 
					
						
							|  |  |  |  |                 IvRulesConst.OverLevels[ivadType.ToString()] = currentOverLevel + 1; | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |                 return false; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             //6.判断interval(广告时间间隔) | 
					
						
							|  |  |  |  |             int interval = ivRulesData.interval; | 
					
						
							| 
									
										
										
										
											2025-09-02 06:20:54 +00:00
										 |  |  |  |             long currentInterval = IvRulesConst.Intervals.ContainsKey(ivadType.ToString()) ? IvRulesConst.Intervals[ivadType.ToString()] : 0; | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |             long localTimestamp = TimeUtils.GetLocalTimestamp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (localTimestamp < currentInterval + (interval * 1000L)) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-02 06:20:54 +00:00
										 |  |  |  |                 LoggerUtils.Debug($"[SDK] {ivadType} interval limit"); | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |                 return false; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return true; | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-02 06:20:54 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 看激励广告之后调用 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void ClearIvRules() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             var localTimestamp = TimeUtils.GetLocalTimestamp(); | 
					
						
							|  |  |  |  |             foreach (var key in IvRulesConst.Intervals.Keys.ToList()) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 IvRulesConst.Intervals[key] = localTimestamp; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-02 06:29:21 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-02 06:20:54 +00:00
										 |  |  |  |         #endregion | 
					
						
							| 
									
										
										
										
											2025-09-02 06:29:21 +00:00
										 |  |  |  |        | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  |          | 
					
						
							|  |  |  |  |         #region 检查并刷新过期竞价 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         private void CheckAndRefreshExpiredBids(AdsType _adsType) | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             Dictionary<PlatformType, List<AdsType>> expiredBids = BidPlatformManager.Instance.GetExpiredBids(); | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             foreach (var kvp in expiredBids) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 PlatformType platformName = kvp.Key; | 
					
						
							|  |  |  |  |                 foreach (AdsType adType in kvp.Value) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     if (_adsType == adType) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         LoggerUtils.Debug($"{platformName} 平台 {adType} 广告竞价已过期,重新加载广告"); | 
					
						
							|  |  |  |  |                         RefreshPlatformAds(platformName, adType); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         private void RefreshPlatformAds(PlatformType platformName, AdsType adType) | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             switch (platformName) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 case PlatformType.Admob: | 
					
						
							|  |  |  |  |                     RefreshAdmobAds(adType); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case PlatformType.Topon: | 
					
						
							|  |  |  |  |                     RefreshTopOnAds(adType); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case PlatformType.AppLovin: | 
					
						
							|  |  |  |  |                     RefreshMaxAds(adType); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case PlatformType.Bigo: | 
					
						
							|  |  |  |  |                     RefreshBigoAds(adType); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case PlatformType.Kwai: | 
					
						
							|  |  |  |  |                     RefreshKwaiAds(adType); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 default: | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-08-31 05:15:14 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-08-30 04:15:48 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         private void RefreshAdmobAds(AdsType adType) | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             switch (adType) | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |                 case AdsType.Rewarded: | 
					
						
							|  |  |  |  |                     AdmobAdsManager.Instance.LoadRewarded(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case AdsType.Interstitial: | 
					
						
							|  |  |  |  |                     AdmobAdsManager.Instance.LoadInterstitial(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case AdsType.Banner: | 
					
						
							|  |  |  |  |                     AdmobAdsManager.Instance.LoadBanner(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case AdsType.Native: | 
					
						
							|  |  |  |  |                     AdmobAdsManager.Instance.LoadNative(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case AdsType.Splash: | 
					
						
							|  |  |  |  |                     AdmobAdsManager.Instance.LoadSplash(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 default: | 
					
						
							|  |  |  |  |                     break; | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 刷新TopOn广告 | 
					
						
							|  |  |  |  |         private void RefreshTopOnAds(AdsType adType) | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             switch (adType) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 case AdsType.Rewarded: | 
					
						
							|  |  |  |  |                     TpnAdsManager.Instance.LoadRewarded(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case AdsType.Interstitial: | 
					
						
							|  |  |  |  |                     TpnAdsManager.Instance.LoadInterstitial(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 default: | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |         // 刷新Max广告 | 
					
						
							|  |  |  |  |         private void RefreshMaxAds(AdsType adType) | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             switch (adType) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 case AdsType.Rewarded: | 
					
						
							|  |  |  |  |                     MaxAdsManager.Instance.LoadRewarded(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case AdsType.Interstitial: | 
					
						
							|  |  |  |  |                     MaxAdsManager.Instance.LoadInterstitial(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 default: | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 刷新Bigo广告 | 
					
						
							|  |  |  |  |         private void RefreshBigoAds(AdsType adType) | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             switch (adType) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 case AdsType.Rewarded: | 
					
						
							|  |  |  |  |                     BigoAdsManager.Instance.LoadRewarded(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case AdsType.Interstitial: | 
					
						
							|  |  |  |  |                     BigoAdsManager.Instance.LoadInterstitial(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 default: | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         private void RefreshKwaiAds(AdsType adType) | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |             switch (adType) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 case AdsType.Rewarded: | 
					
						
							| 
									
										
										
										
											2025-09-02 05:38:42 +00:00
										 |  |  |  |                     KwaiAdsManager.Instance.LoadRewarded(); | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case AdsType.Interstitial: | 
					
						
							| 
									
										
										
										
											2025-09-02 05:38:42 +00:00
										 |  |  |  |                     KwaiAdsManager.Instance.LoadInterstitial(); | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 default: | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-01 15:29:31 +00:00
										 |  |  |  | #endregion | 
					
						
							| 
									
										
										
										
											2025-09-01 05:59:06 +00:00
										 |  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  |  | } |