From 27c0f048fd566e792101a58f01b027d49c79a3a2 Mon Sep 17 00:00:00 2001 From: Ivan Murzak Date: Wed, 1 Dec 2021 19:57:38 +0200 Subject: [PATCH 1/2] Making usage easier Added AATracking class in two variants: 1. iOS with implementations, 2. non-iOS for supporting compilation for all other platforms. AATracking has easy to use Property called "bool SupportediOSVersion", it returns result of iOS version validation. Also there is function "RequestAuthorizationTracking" with better callback implementation. Replaced raw int values to enum which tells more about the status in callback. --- .../Runtime/iOSTransparency/ATTracking.cs | 57 +++++++++++++++++++ .../iOSTransparency/ATTracking.cs.meta | 11 ++++ .../iOSTransparency/ATTracking.non_iOS.cs | 23 ++++++++ .../ATTracking.non_iOS.cs.meta | 11 ++++ 4 files changed, 102 insertions(+) create mode 100644 com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.cs create mode 100644 com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.cs.meta create mode 100644 com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs create mode 100644 com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs.meta diff --git a/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.cs b/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.cs new file mode 100644 index 0000000..c4aff12 --- /dev/null +++ b/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.cs @@ -0,0 +1,57 @@ +#if UNITY_IOS + +using System; +using System.Collections.Generic; +using UnityEngine.iOS; + +namespace Unity.Advertisement.IosSupport +{ + using TrackingStatus = ATTrackingStatusBinding.AuthorizationTrackingStatus; + + public static class ATTracking + { + static Dictionary Statuses = new Dictionary() + { + { 0, TrackingStatus.NOT_DETERMINED}, + { 1, TrackingStatus.RESTRICTED}, + { 2, TrackingStatus.DENIED}, + { 3, TrackingStatus.AUTHORIZED} + }; + public static bool SupportediOSVersion => new Version(Device.systemVersion) > new Version("14.5"); + + public static bool IsTrackingAccepted() + { + // check with iOS to see if the user has accepted or declined tracking + var status = ATTrackingStatusBinding.GetAuthorizationTrackingStatus(); + + if (SupportediOSVersion) + { + return status == TrackingStatus.AUTHORIZED; + } + else + { + return true; + } + } + + public static bool RequestAuthorizationTracking(Action callback = null) + { + var authStatus = ATTrackingStatusBinding.GetAuthorizationTrackingStatus(); + + if (SupportediOSVersion) + { + if (authStatus == TrackingStatus.NOT_DETERMINED) + { + ATTrackingStatusBinding.RequestAuthorizationTracking((requestStatus) => + { + if (callback != null) + callback.Invoke(Statuses[requestStatus]); + }); + return true; + } + } + return false; + } + } +} +#endif \ No newline at end of file diff --git a/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.cs.meta b/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.cs.meta new file mode 100644 index 0000000..a046edd --- /dev/null +++ b/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cedd5f7f66e90e44ba50a39fb03b9ffd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs b/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs new file mode 100644 index 0000000..27fb091 --- /dev/null +++ b/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs @@ -0,0 +1,23 @@ +#if !UNITY_IOS + +using System; + +namespace Unity.Advertisement.IosSupport +{ + using TrackingStatus = ATTrackingStatusBinding.AuthorizationTrackingStatus; + + public static class ATTracking + { + public static bool SupportediOSVersion => false; + public static bool IsTrackingAccepted() + { + return false; + } + public static bool RequestAuthorizationTracking(Action callback = null) + { + // Do nothing + return false; + } + } +} +#endif \ No newline at end of file diff --git a/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs.meta b/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs.meta new file mode 100644 index 0000000..897d09e --- /dev/null +++ b/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3be053b6204af6249aa4debaa5d9faeb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 052467422d45256870330cf720be8087fb8f9910 Mon Sep 17 00:00:00 2001 From: Ivan Murzak Date: Wed, 1 Dec 2021 20:20:42 +0200 Subject: [PATCH 2/2] IsTrackingAccepted returns True for non iOS platforms Because there is no Apple Transparency Tracking limitation at other platforms --- .../Runtime/iOSTransparency/ATTracking.non_iOS.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs b/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs index 27fb091..86166eb 100644 --- a/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs +++ b/com.unity.ads.ios-support/Runtime/iOSTransparency/ATTracking.non_iOS.cs @@ -11,7 +11,7 @@ public static class ATTracking public static bool SupportediOSVersion => false; public static bool IsTrackingAccepted() { - return false; + return true; } public static bool RequestAuthorizationTracking(Action callback = null) {