From a009a220e47d714b8d5bb9914b03d4e486de99bd Mon Sep 17 00:00:00 2001 From: huyfei Date: Tue, 30 Jan 2024 10:23:49 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E5=AE=8C=E5=96=84=20IOS=20ATT=20?= =?UTF-8?q?=E6=89=93=E7=82=B9=E5=92=8C=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runtime/Code/SDK/GuruSDK.Ads.cs | 84 +++++++++++++++++++++++++++++---- Runtime/Code/SDK/GuruSDK.cs | 2 +- 2 files changed, 75 insertions(+), 11 deletions(-) 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 ---");