223 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C#
		
	
	
 | 
						|
 | 
						|
namespace Guru
 | 
						|
{
 | 
						|
    using UnityEngine;
 | 
						|
    using System;
 | 
						|
    
 | 
						|
    
 | 
						|
    public partial class GuruSDK
 | 
						|
    {
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 启动广告服务
 | 
						|
        /// </summary>
 | 
						|
        public static void StartAds()
 | 
						|
        {
 | 
						|
            if (InitConfig.UseCustomConsent)
 | 
						|
            {
 | 
						|
                Debug.Log($"{Tag} --- Call <color=orange>StartAdsWithCustomConsent</color> when you use custom consent, and pass the result (boolean) to the method.");
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                // 默认的启动顺序是先启动Consent后, 根据用户回调的结果来启动广告
 | 
						|
                Instance.StartConsentFlow();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 使用自定义的Consent, 获取用户授权后, 调用此方法
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="userAllow"></param>
 | 
						|
        public static void StartAdsWithCustomConsent(bool userAllow = true)
 | 
						|
        {
 | 
						|
            if (userAllow)
 | 
						|
            {
 | 
						|
                StartAdService();
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                Debug.Log($"{Tag} --- User refuse to provide ads Id, Ads Service will be cancelled");
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
        #region Guru Consent
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 启动Consent流程
 | 
						|
        /// </summary>
 | 
						|
        private void StartConsentFlow()
 | 
						|
        {
 | 
						|
            LogI($"StartConsentFlow");
 | 
						|
            GuruConsent.StartConsent(OnConsentOver);
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnConsentOver(int code)
 | 
						|
        {
 | 
						|
            Callbacks.ConsentFlow._onConsentResult?.Invoke(code);
 | 
						|
            switch(code)
 | 
						|
            {
 | 
						|
                case GuruConsent.StatusCode.OBTAINED:
 | 
						|
                case GuruConsent.StatusCode.NOT_AVAILABLE:
 | 
						|
                    // 已获取授权, 或者地区不可用
 | 
						|
#if UNITY_IOS
 | 
						|
                    CheckATTStatus();
 | 
						|
#else
 | 
						|
                    StartAdService();
 | 
						|
#endif
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
#if UNITY_IOS
 | 
						|
         /// <summary>
 | 
						|
        /// iOS 平台检查 ATT 状态
 | 
						|
        /// </summary>
 | 
						|
        private void CheckATTStatus()
 | 
						|
        {
 | 
						|
            AttManager.Instance.CheckATTStatus(OnATTStatus);
 | 
						|
        }
 | 
						|
#endif
 | 
						|
        
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Ad Services
 | 
						|
 | 
						|
        private static bool _initAdsCompleted = false;
 | 
						|
        
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 启动广告服务
 | 
						|
        /// </summary>
 | 
						|
        public static void StartAdService()
 | 
						|
        {
 | 
						|
            LogI($"StartAdService");
 | 
						|
            ADService.Instance.StartService(OnAdsInitComplete, 
 | 
						|
                InitConfig.AutoLoadWhenAdsReady, IsDebugMode);
 | 
						|
            
 | 
						|
            //--------- Callbacks -----------
 | 
						|
            ADService.OnInterstitialLoaded = OnInterstitialLoaded;
 | 
						|
            ADService.OnInterstitialFailed = OnInterstitialFailed;
 | 
						|
            ADService.OnRewardLoaded = OnRewardLoaded;
 | 
						|
            ADService.OnRewardFailed = OnRewardFailed;
 | 
						|
        }
 | 
						|
 | 
						|
        private static void OnInterstitialLoaded() 
 | 
						|
            => Callbacks.Ads._onInterstitialADLoaded?.Invoke();
 | 
						|
        private static void OnInterstitialFailed()
 | 
						|
            => Callbacks.Ads._onInterstitialADFailed?.Invoke();
 | 
						|
        private static void OnRewardLoaded()
 | 
						|
            => Callbacks.Ads._onRewardedADLoaded?.Invoke(); 
 | 
						|
        private static void OnRewardFailed()
 | 
						|
            => Callbacks.Ads._onRewardADFailed?.Invoke();
 | 
						|
 | 
						|
        private static void OnAdsInitComplete()
 | 
						|
        {
 | 
						|
            _initAdsCompleted = true;
 | 
						|
            Callbacks.Ads._onAdsInitComplete?.Invoke();
 | 
						|
        }
 | 
						|
 | 
						|
        private static bool CheckAdsReady()
 | 
						|
        {
 | 
						|
            if (!_initAdsCompleted)
 | 
						|
            {
 | 
						|
                LogE("Ads is not ready. Call <GuruSDk.StartAdService> first.");
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
            return true;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 显示Banner广告
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="placement"></param>
 | 
						|
        public static void ShowBanner(string placement = "")
 | 
						|
        {
 | 
						|
            if (!CheckAdsReady()) return;
 | 
						|
            ADService.Instance.ShowBanner(placement);
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// 隐藏Banner广告
 | 
						|
        /// </summary>
 | 
						|
        public static void HideBanner()
 | 
						|
        {
 | 
						|
            if (!CheckAdsReady()) return;
 | 
						|
            ADService.Instance.HideBanner();
 | 
						|
        }
 | 
						|
 | 
						|
        public static void LoadInterstitialAd()
 | 
						|
        {
 | 
						|
            if (!CheckAdsReady()) return;
 | 
						|
            ADService.Instance.RequestInterstitialAD();
 | 
						|
        }
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 显示插屏广告
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="placement"></param>
 | 
						|
        /// <param name="onDismissed"></param>
 | 
						|
        public static void ShowInterstitialAd(string placement = "", Action onDismissed = null)
 | 
						|
        {
 | 
						|
            if (!CheckAdsReady()) return;
 | 
						|
            if (!ADService.Instance.IsInterstitialADReady())
 | 
						|
            {
 | 
						|
                LogE("Interstitial is not ready. Call <GuruSDk.ShowInterstitialAd> again.");
 | 
						|
                LoadInterstitialAd();
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            ADService.Instance.ShowInterstitialAD(placement, onDismissed);
 | 
						|
        }
 | 
						|
 | 
						|
        public static void LoadRewardAd()
 | 
						|
        {
 | 
						|
            if (!CheckAdsReady()) return;
 | 
						|
            ADService.Instance.RequestRewardedAD();
 | 
						|
        }
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 显示激励视频广告
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="placement"></param>
 | 
						|
        /// <param name="onRewarded"></param>
 | 
						|
        /// <param name="onFailed"></param>
 | 
						|
        public static void ShowRewardAd(string placement = "", Action onRewarded = null, Action<string> onFailed = null)
 | 
						|
        {
 | 
						|
            if (!CheckAdsReady()) return;
 | 
						|
            if (!ADService.Instance.IsRewardedADReady())
 | 
						|
            {
 | 
						|
                LogE("RewardAd is not ready. Call <GuruSDk.LoadRewardAd> again.");
 | 
						|
                LoadRewardAd();
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            ADService.Instance.ShowRewardedAD(placement, onRewarded, onFailed);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region MaxServices
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 显示Max调试菜单
 | 
						|
        /// </summary>
 | 
						|
        public static void ShowMaxDebugPanel()
 | 
						|
        {
 | 
						|
#if UNITY_EDITOR
 | 
						|
 | 
						|
            LogI($"Can not show Max Debug Panel in Editor, skipped.");
 | 
						|
            return;
 | 
						|
#endif
 | 
						|
            if (!ADService.Instance.IsInitialized)
 | 
						|
            {
 | 
						|
                LogI($"ADService is not initialized, call <GuruSDK.StartAds> first.");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            ADService.Instance.ShowMaxDebugPanel();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
} |