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 ---");