using System; using System.Collections.Generic; using GoogleMobileAds.Api; using Script.Common; using Script.SDKManager.AdsSDKManager.Constant; using Script.SDKManager.AdsSDKManager.Utils; using Script.Utils; namespace Script.SDKManager.AdsSDKManager.AdmobAdsManager { public class AdmobAdsManager : NormalSingleton, IAdService { public string ClientName => "Admob"; private AdmobBannerAdManager _admobBannerAdManager; private AdmobInterstitialAdManager _admobInterstitialAdManager; private AdmobRewardedAdManager _admobRewardedAdManager; private AdmobNativeAdManager _admobNativeAdManager; private AdmobSplashAdManager _admobSplashAdManager; private List _interstitialAdUnits; private List _rewardedAdUnits; private List _nativeAdUnits; private List _splashAdUnits; private List _bannerAdUnits; private string _rvPos; private string _ivPos; private Action _rvCloseCallback = null; private Action _ivCloseCallback = null; private Action _rvShowFailedCallback = null; private bool _initialized; public void Initialize() { MobileAds.RaiseAdEventsOnUnityMainThread = true; _bannerAdUnits = AdConfigParser.GetAdmobAdUnits(AdsType.Banner); MobileAds.Initialize(initStatus => { if (_bannerAdUnits.Count > 0) { _admobBannerAdManager = new AdmobBannerAdManager(); _admobBannerAdManager.InitializeAdUnits(BannerAliignType.BannerCenterBottomAlign, _bannerAdUnits, OnBannerAdLoaded, OnBannerAdLoadFailed, OnBannerAdPaid, OnBannerAdClicked ); } if (_interstitialAdUnits.Count > 0) LoadInterstitial(); if (_rewardedAdUnits.Count > 0) LoadRewarded(); LoadSplash(); _initialized = true; LoggerUtils.Debug("[Admob] init success"); }); } #region 激励广告功能 public void LoadRewarded() { _admobRewardedAdManager.Destroy(); _admobRewardedAdManager = new AdmobRewardedAdManager(); _admobRewardedAdManager.InitializeAdUnits( _rewardedAdUnits, OnRewardedAdLoaded, OnRewardedAdLoadFailed, OnRewardedAdShowed, OnRewardedAdDismissed, OnRewardedAdError, OnRewardAdPaid, OnRewardedAdClicked ); } public void DisplayRewarded(string adPos, Action rewardCallback = null, Action showFailedCallback = null) { _rvPos = adPos; _rvCloseCallback = rewardCallback; _rvShowFailedCallback = showFailedCallback; _admobRewardedAdManager.ShowHighestPayingAd(); } public double GetRewardedRevenue() { return _admobRewardedAdManager.GetHighestPayingAdRevenue(); } public bool IsRewardedAvailable() { if (!_initialized) return false; return _admobRewardedAdManager.GetAvailableAdUnits().Count > 0; } private void OnRewardedAdLoaded(string adUnitId) { } private void OnRewardedAdLoadFailed(string adUnitId, int errorCode, string errorMsg) { } private void OnRewardedAdShowed(string adUnitId) { } private void OnRewardedAdDismissed(string adUnitId) { _rvCloseCallback?.Invoke(true); _rvCloseCallback = null; LoadRewarded(); } private void OnRewardedAdError(string adUnitId, int errorCode, string errorMsg) { _rvShowFailedCallback?.Invoke(); _rvShowFailedCallback = null; LoadRewarded(); } private void OnRewardedAdClicked(string adUnitId) { } private void OnRewardAdPaid(AdValue adValue) { } #endregion #region 插页广告功能 public void LoadInterstitial() { _admobInterstitialAdManager.Destroy(); _admobInterstitialAdManager = new AdmobInterstitialAdManager(); _admobInterstitialAdManager.InitializeAdUnits( _interstitialAdUnits, OnInterstitialAdLoaded, OnInterstitialAdLoadFailed, OnInterstitialAdShowed, OnInterstitialAdDismissed, OnInterstitialAdError, OnInterstitialAdPaid, OnInterstitialAdClicked ); } public double GetInterstitialRevenue() { return _admobInterstitialAdManager.GetHighestPayingAdRevenue(); } public void DisplayInterstitial(string ivPos, IvType _IvType = IvType.IV1, Action closeCallback = null) { _ivPos = ivPos; _ivCloseCallback = closeCallback; _admobInterstitialAdManager.ShowHighestPayingAd(); } public bool IsInterstitialAvailable() { if (!_initialized) return false; return _admobInterstitialAdManager.GetAvailableAdUnits().Count > 0; } private void OnInterstitialAdLoaded(string adUnitId) { } private void OnInterstitialAdLoadFailed(string adUnitId, int errorCode, string errorMsg) { } private void OnInterstitialAdClicked(string adUnitId) { } private void OnInterstitialAdPaid(AdValue adValue) { } private void OnInterstitialAdShowed(string adUnitId) { } private void OnInterstitialAdDismissed(string adUnitId) { _ivCloseCallback?.Invoke(); _ivCloseCallback = null; LoadInterstitial(); } private void OnInterstitialAdError(string adUnitId, int errorCode, string errorMsg) { _ivCloseCallback?.Invoke(); _ivCloseCallback = null; LoadInterstitial(); } #endregion #region 开屏广告功能 public void LoadSplash() { _admobSplashAdManager.Destroy(); _admobSplashAdManager = new AdmobSplashAdManager(); _admobSplashAdManager.InitializeAdUnits( _splashAdUnits, OnSplashAdLoaded, OnSplashAdLoadFailed, OnSplashAdShowed, OnSplashAdDismissed, OnSplashAdError, OnSplashAdPaid, OnSplashAdClicked ); } public bool IsSplashAvailable() { if (!_initialized) return false; return _admobBannerAdManager.GetAvailableAdUnits().Count > 0; } public void DisplaySplash() { _admobSplashAdManager.ShowHighestPayingAd(); } public double GetSplashRevenue() { return _admobSplashAdManager.GetHighestPayingAdRevenue(); } private void OnSplashAdLoaded(string adUnitId) { } private void OnSplashAdLoadFailed(string adUnitId, int errorCode, string errorMsg) { } private void OnSplashAdShowed(string adUnitId) { } private void OnSplashAdDismissed(string adUnitId) { } private void OnSplashAdError(string adUnitId, int errorCode, string errorMsg) { } private void OnSplashAdClicked(string adUnitId) { } private void OnSplashAdPaid(AdValue adValue) { } #endregion #region 原生广告功能 public void LoadNative() { throw new System.NotImplementedException(); } public double GetNativeRevenue() { return 0; } public void DisplayNative(NativeAdPosition position) { } public bool IsNativeAvailable() { return false; } public void RemoveNative() { } #endregion #region 横幅广告功能 public void LoadBanner() { foreach (var adUnitId in _bannerAdUnits) { _admobBannerAdManager.LoadAd(adUnitId); } } public bool IsBannerAvailable() { if (!_initialized) return false; return _admobBannerAdManager.GetAvailableAdUnits().Count > 0; } public void HideBanner() { _admobBannerAdManager.HideBanner(); } public double GetBannerRevenue() { return _admobBannerAdManager.GetHighestPayingAdRevenue(); } public void DisplayBanner() { _admobBannerAdManager.ShowHighestPayingAd(); } private void OnBannerAdLoaded(string adUnitId) { } private void OnBannerAdLoadFailed(string adUnitId, int errorCode, string errorMsg) { } private void OnBannerAdClicked() { } private void OnBannerAdPaid(AdValue adValue) { } #endregion #region 收益上报 public void TrackAdImpression(AdapterResponseInfo loadedAdapterResponseInfo, AdValue adValue, AdsType type, string placement) { AdjustTrackEvent.Instance.TrackAdEvent(adValue.Value / 1000000f, loadedAdapterResponseInfo.AdSourceName, placement, loadedAdapterResponseInfo.AdSourceInstanceName); FireBaseAnalyticsManager.Instance.OnAdRevenueEvent(PlatformType.Admob.ToString(), loadedAdapterResponseInfo.AdSourceName, placement, type, adValue.Value / 1000000f, type == AdsType.Rewarded ? _rvPos : "", AdPlayCountManager.GetAdPlayCount(type)); ShuShuEvent.Instance.OnAdRevenueEvent(PlatformType.Admob.ToString(), loadedAdapterResponseInfo.AdSourceName, placement, type.ToString(), adValue.Value / 1000000f, type == AdsType.Rewarded ? _rvPos : "", AdPlayCountManager.GetAdPlayCount(type)); } #endregion #region 广告行为事件上报 public void TrackAdAction(AdapterResponseInfo loadedAdapterResponseInfo, double revenue, AdsType type, string placement) { } #endregion } }