132 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
#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";
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 获取状态
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        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;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 转字符串
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="status"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        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 "";
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 状态码转字符串
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="value"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static string GetStatusString(int value) 
 | 
						|
            => GetStatusString((ATTrackingStatusBinding.AuthorizationTrackingStatus)value);
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 是否支持ATT
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        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;
 | 
						|
        }
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 请求系统弹窗
 | 
						|
        /// </summary>
 | 
						|
        public static void RequestATTDailog(Action<string> callback = null)
 | 
						|
        {
 | 
						|
            if (!IsATTSupported())
 | 
						|
            {
 | 
						|
                callback?.Invoke(ATT_STATUS_NOT_APPLICABLE); //  不支持
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            
 | 
						|
            ATTrackingStatusBinding.RequestAuthorizationTracking(status =>{
 | 
						|
                callback?.Invoke(GetStatusString(status));
 | 
						|
            });
 | 
						|
        }
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// 启动时检查状态
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="callback"></param>
 | 
						|
        public static void CheckStatus(Action<string> callback = null)
 | 
						|
        {
 | 
						|
            if (!IsATTSupported())
 | 
						|
            {
 | 
						|
                callback?.Invoke(ATT_STATUS_NOT_APPLICABLE); //  不支持
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            
 | 
						|
            callback?.Invoke(GetStatus());
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#endif |