2023-12-26 03:40:48 +00:00
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 ( ) ;
}
2023-12-28 07:35:35 +00:00
public static bool IsInterstitialAdReady = > ADService . Instance . IsInterstitialADReady ( ) ;
2023-12-26 03:40:48 +00:00
/// <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 ( ) ;
}
2023-12-28 07:35:35 +00:00
public static bool IsRewardAdReady = > ADService . Instance . IsRewardedADReady ( ) ;
2023-12-26 03:40:48 +00:00
/// <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
}
}