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;
}
}
}