using System; using System.Collections.Generic; using System.Linq; using DKManager.AdsSDKManager.Constant; using Script.Common; using Script.SDKManager.AdsSDKManager.AdmobAdsManager; using Script.SDKManager.AdsSDKManager.BigoAdsManager; using Script.SDKManager.AdsSDKManager.MaxAdsManager; using Script.SDKManager.AdsSDKManager.TpnAdsManager; using Script.SDKManager.AdsSDKManager.Utils; using Script.Utils; using SDK.Utils; using SDKManager.AdsSDKManager.Constant; using UnityEngine; public class AdsSDKManager : NormalSingleton { private List _adNetworks = new List(); /// /// 看完广告的回调 /// private Action AdRewardCallback; /// /// 广告竞价开关:激励、插屏、全屏Native广告竞价 /// public bool IsMoreAdsBidding = false; public void InitSDK() { // 初始化广告平台状态 BidPlatformManager.Instance.InitializePlatformStates(AdConfigParser.GetAdExpireInSec()); InitializeAdNetworks(); } private void InitializeAdNetworks() { _adNetworks.Add(AdmobAdsManager.Instance); _adNetworks.Add(BigoAdsManager.Instance); _adNetworks.Add(TpnAdsManager.Instance); _adNetworks.Add(MaxAdsManager.Instance); foreach (var network in _adNetworks) { network.Initialize(); } } public bool IsRewardAdReady() { return _adNetworks.Any(network => network.IsRewardedAvailable()); } /// /// 展示激励广告 /// /// public void ShowRewardAd(string _adPos, Action _rewardCallback = null, Action _showFailedCallback = null) { if (!IsRewardAdReady()) { _showFailedCallback?.Invoke(); return; } PlatformType result = GetBestPlatformType(false); BidPlatformManager.Instance.RecordBidSuccess(result, AdsType.Rewarded); if (result == PlatformType.Max) { 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.Tpn) { TpnAdsManager.Instance.DisplayRewarded(_adPos, _rewardCallback, _showFailedCallback); } else if (result == PlatformType.Kwai) { } else { _showFailedCallback?.Invoke(); } CheckAndRefreshExpiredBids(AdsType.Rewarded); } public bool IsInterstitialReady() { return _adNetworks.Any(network => network.IsInterstitialAvailable()); } /// /// 展示激励广告 /// /// public void ShowInterstitialAd(string _adPos, IvType _IvType = IvType.IV1, Action _closeCallback = null) { if (!IsRewardAdReady()) { _closeCallback?.Invoke(); _closeCallback = null; return; } PlatformType result = GetBestPlatformType(true); BidPlatformManager.Instance.RecordBidSuccess(result, AdsType.Interstitial); if (result == PlatformType.Max) { 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.Tpn) { TpnAdsManager.Instance.DisplayInterstitial(_adPos, _IvType, _closeCallback); } else if (result == PlatformType.Kwai) { } else { _closeCallback?.Invoke(); } // 刷新其他类型广告 CheckAndRefreshExpiredBids(AdsType.Interstitial); } private PlatformType GetBestPlatformType(bool isInterstitial) { if (isInterstitial) { AdPriceInfo priceInfo = new AdPriceInfo( maxPrice: MaxAdsManager.Instance.GetInterstitialRevenue(), admobPrice: AdmobAdsManager.Instance.GetInterstitialRevenue(), bigoPrice: BigoAdsManager.Instance.GetInterstitialRevenue(), // todo : 这里的kwaiPrice暂时设置为0,后续需要根据实际情况设置 kwaiPrice: 0, toponAdUnitId: TpnAdsManager.Instance.topon_interstitial_units ); return AdsBidResult.GetPlatformType(priceInfo); } else { AdPriceInfo priceInfo = new AdPriceInfo( maxPrice: MaxAdsManager.Instance.GetRewardedRevenue(), admobPrice: AdmobAdsManager.Instance.GetRewardedRevenue(), bigoPrice: BigoAdsManager.Instance.GetRewardedRevenue(), // todo : 这里的kwaiPrice暂时设置为0,后续需要根据实际情况设置 kwaiPrice: 0, toponAdUnitId: TpnAdsManager.Instance.topon_rewarded_units ); return AdsBidResult.GetPlatformType(priceInfo); } } // 检查并刷新过期竞价 private void CheckAndRefreshExpiredBids(AdsType _adsType) { Dictionary> expiredBids = BidPlatformManager.Instance.GetExpiredBids(); 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); } } } } private void RefreshPlatformAds(PlatformType platformName, AdsType adType) { switch (platformName) { case PlatformType.Admob: RefreshAdmobAds(adType); break; case PlatformType.Tpn: RefreshTopOnAds(adType); break; case PlatformType.Max: RefreshMaxAds(adType); break; case PlatformType.Bigo: RefreshBigoAds(adType); break; case PlatformType.Kwai: RefreshKwaiAds(adType); break; default: break; } } private void RefreshAdmobAds(AdsType adType) { switch (adType) { 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; } } // 刷新TopOn广告 private void RefreshTopOnAds(AdsType adType) { switch (adType) { case AdsType.Rewarded: TpnAdsManager.Instance.LoadRewarded(); break; case AdsType.Interstitial: TpnAdsManager.Instance.LoadInterstitial(); break; default: break; } } // 刷新Max广告 private void RefreshMaxAds(AdsType adType) { switch (adType) { case AdsType.Rewarded: MaxAdsManager.Instance.LoadRewarded(); break; case AdsType.Interstitial: MaxAdsManager.Instance.LoadInterstitial(); break; default: break; } } // 刷新Bigo广告 private void RefreshBigoAds(AdsType adType) { switch (adType) { case AdsType.Rewarded: BigoAdsManager.Instance.LoadRewarded(); break; case AdsType.Interstitial: BigoAdsManager.Instance.LoadInterstitial(); break; default: break; } } private void RefreshKwaiAds (AdsType adType) { switch (adType) { case AdsType.Rewarded: // todo: 刷新激励广告 break; case AdsType.Interstitial: // todo: 刷新插屏广告 break; default: break; } } /// /// 广告看完回调 /// public void OnRewardAdCallback(double price) { AdRewardCallback?.Invoke(price); AdRewardCallback = null; } }