Unity-Technologies / com.unity.ads.ios-support

Provides support for App Tracking Transparency and SkAdNetwork API newly introduced in Apple iOS 14.
79 stars 23 forks source link

ATTrackingStatusBinding.RequestAuthorizationTracking is calling back on backgound thread #21

Open abcjjy opened 10 months ago

abcjjy commented 10 months ago

This behavior is error prone. Please make it in main thread or give a warning in the doc.

simon129 commented 1 month ago

if you have UniTask in your project, this is my workaround, but I agree with you, it should be noticed in Doc

public UniTask AppTrackingTransparencyAsync()
{
    var status = ATTrackingStatusBinding.GetAuthorizationTrackingStatus();
    Version currentVersion = new Version(Device.systemVersion);
    Version ios14 = new Version("14.5");

    Debug.Log($"GetAuthorizationTrackingStatus={status}");
    if (status == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED && currentVersion >= ios14)
    {
        var utcs = new UniTaskCompletionSource();

        ATTrackingStatusBinding.RequestAuthorizationTracking(async (int status) =>
        {
            // 2:not allow 3:allow
            Debug.Log("RequestAuthorizationTracking: " + status);

            // callback is in another thread, switch back to Unity main thread
            await UniTask.SwitchToMainThread();
            utcs.TrySetResult();
        });

        return utcs.Task;
    }

    return UniTask.CompletedTask;
}