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 |