#if UNITY_IOS namespace Guru { using UnityEngine; using System; using Unity.Advertisement.IosSupport; public class ATTManager { public const string Version = "1.0.0"; public const string ATT_STATUS_AUTHORIZED = "authorized"; public const string ATT_STATUS_DENIED = "denied"; public const string ATT_STATUS_RESTRICTED = "restricted"; public const string ATT_STATUS_NOT_DETERMINED = "notDetermined"; public const string ATT_STATUS_NOT_APPLICABLE = "notApplicable"; public const int ATT_REQUIRED_MIN_OS = 14; //---------- 引导类型 ------------ public const string GUIDE_TYPE_ADMOB = "admob"; public const string GUIDE_TYPE_CUSTOM = "custom"; public const string GUIDE_TYPE_MAX = "max"; /// /// 获取状态 /// /// public static string GetStatus() { if (!IsATTSupported()) return ATT_STATUS_NOT_APPLICABLE; var status = GetStatusString(ATTrackingStatusBinding.GetAuthorizationTrackingStatus()); if(!string.IsNullOrEmpty(status)) return status; return ATT_STATUS_NOT_APPLICABLE; } /// /// 转字符串 /// /// /// public static string GetStatusString(ATTrackingStatusBinding.AuthorizationTrackingStatus status) { switch (status) { case ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED: return ATT_STATUS_NOT_DETERMINED; case ATTrackingStatusBinding.AuthorizationTrackingStatus.AUTHORIZED: return ATT_STATUS_AUTHORIZED; case ATTrackingStatusBinding.AuthorizationTrackingStatus.DENIED: return ATT_STATUS_DENIED; case ATTrackingStatusBinding.AuthorizationTrackingStatus.RESTRICTED: return ATT_STATUS_RESTRICTED; } return ""; } /// /// 状态码转字符串 /// /// /// public static string GetStatusString(int value) => GetStatusString((ATTrackingStatusBinding.AuthorizationTrackingStatus)value); /// /// 是否支持ATT /// /// private static bool IsATTSupported() { string version = UnityEngine.iOS.Device.systemVersion; // Debug.Log($"[ATT] --- Get iOS system version: {version}"); string tmp = version; if (version.Contains(" ")) { var a1 = version.Split(' '); tmp = a1[a1.Length - 1]; } string num = tmp; if (tmp.Contains(".")) { num = tmp.Split('.')[0]; } if (int.TryParse(num, out var ver)) { if (ver >= ATT_REQUIRED_MIN_OS) return true; } return false; } /// /// 请求系统弹窗 /// public static void RequestATTDailog(Action callback = null) { if (!IsATTSupported()) { callback?.Invoke(ATT_STATUS_NOT_APPLICABLE); // 不支持 return; } ATTrackingStatusBinding.RequestAuthorizationTracking(status =>{ callback?.Invoke(GetStatusString(status)); }); } /// /// 启动时检查状态 /// /// public static void CheckStatus(Action callback = null) { if (!IsATTSupported()) { callback?.Invoke(ATT_STATUS_NOT_APPLICABLE); // 不支持 return; } callback?.Invoke(GetStatus()); } } } #endif