using System; using UnityEngine; using System.Runtime.InteropServices; namespace Unity.Advertisement.IosSupport { using AOT; public class ATTrackingStatusBinding { #if UNITY_IOS [DllImport("__Internal")] private static extern void InterfaceTrackingAuthorizationRequest(RequestAuthorizationTrackingCompleteHandler callback); [DllImport("__Internal")] private static extern int InterfaceGetTrackingAuthorizationStatus(); #endif public delegate void RequestAuthorizationTrackingCompleteHandler(int status); private static RequestAuthorizationTrackingCompleteHandler _requestAuthorizationTrackingCompleteCallback = null; /// /// The enumerated states of an authorization tracking request. /// public enum AuthorizationTrackingStatus { NOT_DETERMINED = 0, RESTRICTED, DENIED, AUTHORIZED } /// /// This method allows you to request the user permission dialogue. /// public static void RequestAuthorizationTracking() { RequestAuthorizationTracking(null); } /// /// This method allows you to request the user permission dialogue. /// public static void RequestAuthorizationTracking(RequestAuthorizationTrackingCompleteHandler callback) { #if UNITY_IOS if (Application.platform != RuntimePlatform.IPhonePlayer) return; if (_requestAuthorizationTrackingCompleteCallback != null) { throw new InvalidOperationException("App tracking transparency request is already triggered and awaiting completion"); } _requestAuthorizationTrackingCompleteCallback = callback; InterfaceTrackingAuthorizationRequest(AppTransparencyTrackingRequestCompleted); #endif } /// /// This method allows you to check the app tracking transparency (ATT) authorization status. /// /// An AuthorizationTrackingStatus enum value. public static AuthorizationTrackingStatus GetAuthorizationTrackingStatus() { #if UNITY_IOS if (Application.platform == RuntimePlatform.IPhonePlayer) { return (AuthorizationTrackingStatus)InterfaceGetTrackingAuthorizationStatus(); } #endif return AuthorizationTrackingStatus.NOT_DETERMINED; } [MonoPInvokeCallback(typeof(RequestAuthorizationTrackingCompleteHandler))] public static void AppTransparencyTrackingRequestCompleted(int status) { _requestAuthorizationTrackingCompleteCallback?.Invoke(status); _requestAuthorizationTrackingCompleteCallback = null; } } }