Files
BingoGrassland/unity_package/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTrackingStatusBinding.cs
T

76 lines
3.2 KiB
C#
Raw Normal View History

2026-04-20 13:49:36 +08:00
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;
/// <summary>
/// The enumerated states of an authorization tracking request.
/// </summary>
public enum AuthorizationTrackingStatus
{
NOT_DETERMINED = 0,
RESTRICTED,
DENIED,
AUTHORIZED
}
/// <summary>
/// This method allows you to <a href="https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/3547037-requesttrackingauthorization">request the user permission dialogue</a>.
/// </summary>
public static void RequestAuthorizationTracking()
{
RequestAuthorizationTracking(null);
}
/// <summary>
/// This method allows you to <a href="https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/3547037-requesttrackingauthorization">request the user permission dialogue</a>.
/// </summary>
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
}
/// <summary>
/// This method allows you to check the app tracking transparency (ATT) <a href="https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/3547038-trackingauthorizationstatus">authorization status</a>.
/// </summary>
/// <returns>An <c>AuthorizationTrackingStatus</c> enum value.</returns>
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;
}
}
}