using UnityEngine; #if ADS_ENABLE && ADS_ADMOB && (UNITY_ANDROID || UNITY_IOS) using GoogleMobileAds.Api; using GoogleMobileAds.Api.Mediation.AppLovin; using GoogleMobileAds.Api.Mediation.Vungle; #endif public class AdMobMgr : MonoSingleton { #region Variables #if ADS_ENABLE && ADS_ADMOB && (UNITY_ANDROID || UNITY_IOS) protected static RewardedAd rewardBasedVideo = null; #endif protected static float RELOAD_DELAY = 1f; protected static bool B_INIT = false; protected static bool B_PLAYING = false; protected static bool B_OPEN = false; protected static bool B_CLOSE = false; protected static bool B_REWARD = false; protected static bool B_Ready = false; protected static bool B_Loading = false; #if VER_ONESTORE public const string AdRewardUnitId = "ca-app-pub-9646992028424809/4855252576"; #elif UNITY_ANDROID public const string AdRewardUnitId = "ca-app-pub-9646992028424809/2987260143"; #elif UNITY_IOS public const string AdRewardUnitId = "ca-app-pub-9646992028424809/1314305573"; #else public const string AdRewardUnitId = "unexpected_platform"; #endif #endregion Variables public void InitAdsMgr(AdsMgr adsmgr) { RELOAD_DELAY = 1f; #if ADS_ENABLE && ADS_ADMOB && (UNITY_ANDROID || UNITY_IOS) if (!B_INIT) MobileAds.Initialize(OnAdsInitialized); else CheckRewardVideoLoad(); #endif } protected void InitRewardVideo() { if (!B_INIT) return; #if ADS_ENABLE && ADS_ADMOB && (UNITY_ANDROID || UNITY_IOS) Debug.Log("Admob - InitRewardVideo"); AdRequest request; if (DataMgr.IsGDPR && !DataMgr.IsGDPRAgree) request = new AdRequest.Builder().AddExtra("max_ad_content_rating", "T").AddExtra("npa", "1").Build(); else request = new AdRequest.Builder().AddExtra("max_ad_content_rating", "T").Build(); if (B_Ready) { B_Loading = true; if (rewardBasedVideo != null) rewardBasedVideo.Destroy(); rewardBasedVideo = new RewardedAd(AdRewardUnitId6); rewardBasedVideo.OnAdLoaded += OnRewardVideoLoad; rewardBasedVideo.OnAdFailedToLoad += OnRewardVideoFailedToLoad; rewardBasedVideo.OnAdOpening += OnRewardVideoOpening; rewardBasedVideo.OnAdFailedToShow += OnRewardVideoFailedToShow; rewardBasedVideo.OnUserEarnedReward += OnRewardVideoRewarded; rewardBasedVideo.OnAdClosed += OnRewardVideoClosed; rewardBasedVideo.LoadAd(request); } #endif } protected void InitRewardVideo6() { #if ADS_ENABLE && ADS_ADMOB && (UNITY_ANDROID || UNITY_IOS) if (!B_INIT) return; if (B_Loading) return; Debug.Log("Admob - InitRewardVideo6"); B_Loading = true; AdRequest request; if (DataMgr.IsGDPR && !DataMgr.IsGDPRAgree) request = new AdRequest.Builder().AddExtra("max_ad_content_rating", "T").AddExtra("npa", "1").Build(); else request = new AdRequest.Builder().AddExtra("max_ad_content_rating", "T").Build(); if (rewardBasedVideo != null) rewardBasedVideo.Destroy(); rewardBasedVideo = new RewardedAd(AdRewardUnitId6); rewardBasedVideo.OnAdLoaded += OnRewardVideoLoad; rewardBasedVideo.OnAdFailedToLoad += OnRewardVideoFailedToLoad; rewardBasedVideo.OnAdOpening += OnRewardVideoOpening; rewardBasedVideo.OnAdFailedToShow += OnRewardVideoFailedToShow; rewardBasedVideo.OnUserEarnedReward += OnRewardVideoRewarded; rewardBasedVideo.OnAdClosed += OnRewardVideoClosed; rewardBasedVideo.LoadAd(request); #endif } public void CheckRewardVideoLoad() { #if ADS_ENABLE && ADS_ADMOB && (UNITY_ANDROID || UNITY_IOS) if (!B_INIT) return; Debug.Log("Admob - CheckRewardVideoLoad"); if (rewardBasedVideo == null || !rewardBasedVideo.IsLoaded()) { AdMobMgr.Instance.InitRewardVideo6(); } #endif } protected void LoadRewardVideo6() { #if ADS_ENABLE && ADS_ADMOB && (UNITY_ANDROID || UNITY_IOS) if (!B_INIT) return; Debug.Log("Admob - LoadRewardVideo6"); if (rewardBasedVideo == null) { InitRewardVideo6(); return; } AdRequest request; if (DataMgr.IsGDPR && !DataMgr.IsGDPRAgree) request = new AdRequest.Builder().AddExtra("max_ad_content_rating", "T").AddExtra("npa", "1").Build(); else request = new AdRequest.Builder().AddExtra("max_ad_content_rating", "T").Build(); rewardBasedVideo.LoadAd(request); #endif } #if ADS_ENABLE && ADS_ADMOB && (UNITY_ANDROID || UNITY_IOS) public void OnAdsInitialized(InitializationStatus initstatus) { Debug.Log("Admob Initialized : " + initstatus.ToString()); B_INIT = true; #if SERVER_DEV || SERVER_BETA || STAGE_TEST Dictionary map = initstatus.getAdapterStatusMap(); foreach (KeyValuePair keyValuePair in map) { string className = keyValuePair.Key; AdapterStatus status = keyValuePair.Value; Debug.Log("Admob - [" + className + "] : " + status.InitializationState.ToString()); } #endif B_Ready = true; InitRewardVideo(); AppLovin.Initialize(); } public void OnRewardVideoLoad(object sender, System.EventArgs e) { Debug.Log("Admob OnAdLoaded"); CheckLoadRewardVideo(sender); } private void OnRewardVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args) { Debug.Log("Admob OnAdFailedToLoad\n" + args.LoadAdError.ToString()); //Debug.Log("Admob OnAdFailedToLoad : " + sender + " ::: " + sender.ToString() + " / " + args.LoadAdError.ToString()); ReloadRewardVideo(sender); LoadAdError loadAdError = args.LoadAdError; // Get response information, which may include results of mediation requests. string strresponse = null; ResponseInfo responseInfo = loadAdError.GetResponseInfo(); if (responseInfo != null) strresponse = responseInfo.ToString(); AnalyticsMgr.EventFailAdsLoad(loadAdError.GetDomain(), loadAdError.GetCode(), loadAdError.GetMessage(), strresponse); } private void OnRewardVideoOpening(object sender, System.EventArgs e) { if (B_OPEN) return; B_OPEN = true; B_PLAYING = true; B_CLOSE = false; B_REWARD = false; Debug.Log("Admob OnAdOpening"); } public void OnRewardVideoFailedToShow(object sender, AdErrorEventArgs args) { Debug.Log("Admob OnAdFailedToShow : " + args.ToString()); if (adsMgr != null) { adsMgr.InvokeAdsFinishFail(); } AdError adError = args.AdError; AnalyticsMgr.EventFailAdsShow(adError.GetDomain(), adError.GetCode(), adError.GetMessage()); } public void OnRewardVideoRewarded(object sender, Reward e) { if (B_REWARD) return; B_REWARD = true; B_PLAYING = false; if (adsMgr != null) adsMgr.InvokeAdsRew(); Debug.Log("Admob OnAdRewarded"); } public void OnRewardVideoClosed(object sender, System.EventArgs e) { if (B_CLOSE) return; B_CLOSE = true; Debug.Log("Admob OnAdClosed"); if (B_PLAYING) B_PLAYING = false; if (adsMgr != null) adsMgr.InvokeAdsClose(); CheckRewardVideoLoad(); } #endif public void ShowRewardVideo(int itype) { #if ADS_ENABLE && ADS_ADMOB && (UNITY_ANDROID || UNITY_IOS) B_PLAYING = true; B_OPEN = false; B_CLOSE = false; B_REWARD = false; rewardBasedVideo.Show(); #endif } public void CheckLoadRewardVideo(object sender) { #if UNITY_EDITOR || SERVER_DEV || SERVER_STAGE || STAGE_TEST || !ADS_ENABLE || !ADS_ADMOB #else if (sender == null) return; if (sender == rewardBasedVideo) { Debug.Log("Admob - CheckLoadRewardVideo6"); B_Loading = false; return; } if (RELOAD_DELAY > 1f) RELOAD_DELAY -= 0.2f; #endif } public void ReloadRewardVideo(object sender) { #if UNITY_EDITOR || SERVER_DEV || SERVER_STAGE || STAGE_TEST || !ADS_ENABLE || !ADS_ADMOB return; #else if (sender == null) return; if (sender == rewardBasedVideo) { Debug.Log("Admob - ReloadRewardVideo6"); B_Loading = false; Invoke("InitRewardVideo6", RELOAD_DELAY * Time.timeScale); return; } if (RELOAD_DELAY < 3f) RELOAD_DELAY += 0.2f; #endif } public static bool GetAdsAvailableOnly() { #if UNITY_EDITOR || !ADS_ENABLE || !ADS_ADMOB return true; #else if (!B_INIT) return false; return B_Ready && rewardBasedVideo != null && rewardBasedVideo.IsLoaded(); #endif } public static bool GetAdsAvailable() { #if UNITY_EDITOR || !ADS_ENABLE || !ADS_ADMOB return false; #else if (!B_INIT) return false; if (!B_Ready) return false; if (rewardBasedVideo == null) { //Debug.Log("Admob - VIDEO NULL"); AdMobMgr.Instance.InitRewardVideo6(); return false; } if (!rewardBasedVideo.IsLoaded()) { //Debug.Log("Admob - VIDEO NOT LOADED"); AdMobMgr.Instance.InitRewardVideo6(); return false; } return true; #endif } }