#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