using IVDataFormat; using System.Collections; using UnityEngine; using UnityEngine.Networking; public class AdsMgr : MonoBehaviour { #region Variables protected const int I_RETRY = 0; public const int PlatformAdMob = 0; public const int PlatformUnityAds = 1; public const int PlatformIronSource = 3; public const string ZoneBase = "rewarded_video"; public enum eAdsFinish { Fail = 0, Skip = 1, Success = 2, Loading = -1 } public enum eRewardType { None = 0, Shop = 1, Buff = 2 } public static bool B_ADS_CLICK = false; public static bool B_ADS_REWARD { get; set; } public static bool B_ADS_CLOSE { get; set; } private static AdsMgr curMgr = null; private static eRewardType rewardType = eRewardType.None; private static int rewardId = -1; #endregion Variables #region Base private void Awake() { if (curMgr != null) { Destroy(this.gameObject); return; } curMgr = this; DontDestroyOnLoad(this.gameObject); } public static void SForceStopCoroutines() { if (curMgr != null) curMgr.StopAllCoroutines(); } public static void SInit() { if (curMgr != null) curMgr.Init(); } private void Init() { #if ADS_ENABLE #if ADS_ADMOB AdMobMgr.Instance.InitAdsMgr(this); #elif ADS_IRON IronSourceMgr.Instance.InitAdsMgr(this); #elif ADS_UNITY UnityAdsMgr.Instance.InitAdsMgr(this); #endif #endif } // 광고 재생 횟수 추가. protected void AddAdsCnt() { //DataHandler.AddRecord(eCondition.AdPlay); //QuestMgr. //MissionMgr. } #endregion Base #region Play Rewarded Video Ads public static void SPlayRewardAds(eRewardType rewtype, int irewid) { curMgr.PlayRewardAds(rewtype, irewid); } // 보상형 광고 재생. private void PlayRewardAds(eRewardType rewtype, int irewid) { //Debug.Log("ShowRewardAds"); B_ADS_CLICK = false; B_ADS_REWARD = false; B_ADS_CLOSE = false; rewardType = rewtype; rewardId = irewid; if (Application.internetReachability == NetworkReachability.NotReachable) { StartCoroutine(OnAdsFinished(eAdsFinish.Fail, false)); GameUIMgr.SOpenPopup1Button(LocalizationText.GetText(Global.STR_CheckNetwork)); return; } #if UNITY_EDITOR StartCoroutine(OnAdsFinished(eAdsFinish.Success, true)); #elif !ADS_ENABLE StartCoroutine(OnAdsFinished(eAdsFinish.Success, true)); #else // 광고 제거. if (DataHandler.PlayData.adsRemove) { StartCoroutine(OnAdsFinished(eAdsFinish.Success, true)); return; } // 재생 가능한 광고. if (!GetAdsAvailable()) { StartCoroutine(OnAdsFinished(eAdsFinish.Fail, false)); return; } #if ADS_ADMOB SingleMgr.Instance.SetAdsPause(true); SettingMgr.SMasterSoundOff(); AdMobMgr.Instance.ShowRewardVideo(); #elif ADS_IRON SingleMgr.Instance.SetAdsPause(true); SettingMgr.SMasterSoundOff(); IronSourceMgr.Instance.ShowRewardVideo(); #elif ADS_UNITY SingleMgr.Instance.SetAdsPause(true); SettingMgr.SMasterSoundOff(); UnityAdsMgr.Instance.ShowAds(); #else SingleMgr.Instance.SetAdsPause(false); StartCoroutine(OnAdsFinished(eAdsFinish.Fail, false)); #endif #endif } // 보상형 광고 재생 가능 상태. private bool GetAdsAvailable() { #if UNITY_EDITOR return false; #elif !ADS_ENABLE return false; #else if (Application.internetReachability.Equals(NetworkReachability.NotReachable)) { return false; } #if ADS_ADMOB return AdMobMgr.GetAdsAvailable(); #elif ADS_IRON return IronSourceMgr.GetAdsAvailable(); #elif ADS_UNITY return UnityAdsMgr.GetAdsAvailable(); #endif return false; #endif } #endregion Play Rewarded Video Ads #region Invoke Ads Finished // AdMob의 경우 광고 닫고 바로 체크하면 크래시 현상이 발생하므로 0.3초 딜레이 후 처리. public void InvokeAdsRew() { B_ADS_REWARD = true; } public void InvokeAdsClose() { B_ADS_CLOSE = true; Invoke("CheckAdsFinished", 0.3f * Time.timeScale); } public void InvokeAdsFinishFail() { B_ADS_REWARD = false; B_ADS_CLOSE = false; Invoke("OnAdsFinishedFail", 0.3f * Time.timeScale); } protected void CheckAdsFinished() { if (!B_ADS_CLOSE) return; B_ADS_CLOSE = false; if (B_ADS_REWARD) { B_ADS_REWARD = false; StartCoroutine(OnAdsFinished(eAdsFinish.Success, true)); } else { StartCoroutine(OnAdsFinished(eAdsFinish.Skip, true)); } } protected void OnAdsFinishedFail() { StartCoroutine(OnAdsFinished(eAdsFinish.Fail, true)); } #endregion Invoke Ads Finished // 보상형 광고 종료시 처리. public IEnumerator OnAdsFinished(eAdsFinish eads, bool bshowreal) { //Debug.Log("OnAdsFinished"); SingleMgr.Instance.SetAdsPause(true); //@ 광고 종료 후 다시 인게임 사운드 켜기. //SettingMgr.SMasterSoundOn(); yield return null; // 광고 재생 완료. if (eads == eAdsFinish.Success) { if (bshowreal) AddAdsCnt(); switch (rewardType) { case eRewardType.Shop: ShopMgr.SSubProcessSucc(rewardId); break; } if (bshowreal) { AnalyticsMgr.EventCompAds(); if (B_ADS_CLICK) AnalyticsMgr.EventClickAds(); } } // 광고 재생 실패. else if (eads == eAdsFinish.Fail) { switch (rewardType) { case eRewardType.Shop: ShopMgr.SSubProcessFail(rewardId); break; } GameUIMgr.SOpenToast(LocalizationText.GetText("error_adsfail")); } // 광고 스킵. else { switch (rewardType) { case eRewardType.Shop: ShopMgr.SSubProcessFail(rewardId); break; } } } }