diff --git a/Runtime/Code/SDK/GuruSDK.Ads.cs b/Runtime/Code/SDK/GuruSDK.Ads.cs index b229b5b..dfff69b 100644 --- a/Runtime/Code/SDK/GuruSDK.Ads.cs +++ b/Runtime/Code/SDK/GuruSDK.Ads.cs @@ -29,11 +29,20 @@ namespace Guru /// 使用自定义的Consent, 获取用户授权后, 调用此方法 /// /// - public static void StartAdsWithCustomConsent(bool userAllow = true) + /// Consent 引导的类型, 如果使用了 MAX 的 consent 请填写 max + public static void StartAdsWithCustomConsent(bool userAllow = true, string guideType = "custom") { +#if UNITY_IOS + _attType = guideType; + InitAttStatus(); +#endif if (userAllow) { +#if UNITY_IOS + CheckAttStatus(); +#else StartAdService(); +#endif } else { @@ -56,6 +65,9 @@ namespace Guru private void OnConsentOver(int code) { +#if UNITY_IOS + InitAttStatus(); +#endif Callbacks.ConsentFlow._onConsentResult?.Invoke(code); switch(code) { @@ -63,27 +75,79 @@ namespace Guru case GuruConsent.StatusCode.NOT_AVAILABLE: // 已获取授权, 或者地区不可用 #if UNITY_IOS - CheckATTStatus(); + CheckAttStatus(); #else StartAdService(); #endif break; } } - + + #endregion + + #region IOS ATT 广告授权流程 + #if UNITY_IOS - /// + + private static string _initialAttStatus; + private static String _attType = "admob"; + + + /// + /// 显示系统的 ATT 弹窗 + /// + public static void RequestAttDialog() + { + LogI($"RequestATTDialog"); + ATTManager.RequestATTDailog(ReportAttStatus); + } + + /// + /// 初始化 ATT 状态 + /// + public static void InitAttStatus() + { + _initialAttStatus = ATTManager.GetStatus(); + SetUserProperty(Analytics.ParameterATTStatus, _initialAttStatus); // 上报一个初始的状态 + } + + /// /// iOS 平台检查 ATT 状态 /// - private void CheckATTStatus() + private static void CheckAttStatus() => ATTManager.CheckStatus(ReportAttStatus); + + private static void ReportAttStatus(string status) { - AttManager.Instance.CheckATTStatus(OnATTStatus); - } + LogI($"{Tag} --- Get Att status: {status}"); + SetUserProperty(Analytics.ParameterATTStatus, status); // 当前的状态 + if (!string.IsNullOrEmpty(_initialAttStatus) + && status != ATTManager.ATT_STATUS_NOT_DETERMINED + && _initialAttStatus != status) + { + // 上报点位: + Analytics.AttResult(status, _attType); + } + + switch(status) + { + case ATTManager.ATT_STATUS_NOT_DETERMINED: + // ATT 状态未知, 请求弹窗 + RequestAttDialog(); + break; + case ATTManager.ATT_STATUS_RESTRICTED: + case ATTManager.ATT_STATUS_DENIED: + // ATT 状态受限, 或者被拒绝, 不请求广告 + break; + case ATTManager.ATT_STATUS_AUTHORIZED: + // ATT 状态已授权, 请求广告 + StartAdService(); + break; + } + } #endif - - #endregion - + #endregion + #region Ad Services private static bool _initAdsCompleted = false; diff --git a/Runtime/Code/SDK/GuruSDK.cs b/Runtime/Code/SDK/GuruSDK.cs index 8aa71fa..24801aa 100644 --- a/Runtime/Code/SDK/GuruSDK.cs +++ b/Runtime/Code/SDK/GuruSDK.cs @@ -143,7 +143,7 @@ namespace Guru private void OnFirebaseReady() { IsInitialSuccess = true; - + if (!InitConfig.UseCustomConsent) { // LogI($"--- #3 Start Consent Flow ---");