update: 更新 UnityPackage -> 4.38.0
							parent
							
								
									7fc563e567
								
							
						
					
					
						commit
						2425e6916b
					
				|  | @ -8,7 +8,7 @@ namespace com.adjust.sdk | ||||||
| #if UNITY_ANDROID | #if UNITY_ANDROID | ||||||
|     public class AdjustAndroid |     public class AdjustAndroid | ||||||
|     { |     { | ||||||
|         private const string sdkPrefix = "unity4.36.0"; |         private const string sdkPrefix = "unity4.38.0"; | ||||||
|         private static bool launchDeferredDeeplink = true; |         private static bool launchDeferredDeeplink = true; | ||||||
|         private static AndroidJavaClass ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust"); |         private static AndroidJavaClass ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust"); | ||||||
|         private static AndroidJavaObject ajoCurrentActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"); |         private static AndroidJavaObject ajoCurrentActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"); | ||||||
|  | @ -19,6 +19,7 @@ namespace com.adjust.sdk | ||||||
|         private static SessionTrackingFailedListener onSessionTrackingFailedListener; |         private static SessionTrackingFailedListener onSessionTrackingFailedListener; | ||||||
|         private static SessionTrackingSucceededListener onSessionTrackingSucceededListener; |         private static SessionTrackingSucceededListener onSessionTrackingSucceededListener; | ||||||
|         private static VerificationInfoListener onVerificationInfoListener; |         private static VerificationInfoListener onVerificationInfoListener; | ||||||
|  |         private static DeeplinkResolutionListener onDeeplinkResolvedListener; | ||||||
| 
 | 
 | ||||||
|         public static void Start(AdjustConfig adjustConfig) |         public static void Start(AdjustConfig adjustConfig) | ||||||
|         { |         { | ||||||
|  | @ -684,6 +685,14 @@ namespace com.adjust.sdk | ||||||
|             ajcAdjust.CallStatic("verifyPurchase", ajoPurchase, onVerificationInfoListener); |             ajcAdjust.CallStatic("verifyPurchase", ajoPurchase, onVerificationInfoListener); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public static void ProcessDeeplink(string url, Action<string> resolvedLinkCallback) | ||||||
|  |         { | ||||||
|  |             onDeeplinkResolvedListener = new DeeplinkResolutionListener(resolvedLinkCallback); | ||||||
|  |             AndroidJavaClass ajcUri = new AndroidJavaClass("android.net.Uri"); | ||||||
|  |             AndroidJavaObject ajoUri = ajcUri.CallStatic<AndroidJavaObject>("parse", url); | ||||||
|  |             ajcAdjust.CallStatic("processDeeplink", ajoUri, ajoCurrentActivity, onDeeplinkResolvedListener); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Used for testing only. |         // Used for testing only. | ||||||
|         public static void SetTestOptions(Dictionary<string, string> testOptions) |         public static void SetTestOptions(Dictionary<string, string> testOptions) | ||||||
|         { |         { | ||||||
|  | @ -1024,6 +1033,24 @@ namespace com.adjust.sdk | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         private class DeeplinkResolutionListener : AndroidJavaProxy | ||||||
|  |         { | ||||||
|  |             private Action<string> callback; | ||||||
|  | 
 | ||||||
|  |             public DeeplinkResolutionListener(Action<string> pCallback) : base("com.adjust.sdk.OnDeeplinkResolvedListener") | ||||||
|  |             { | ||||||
|  |                 this.callback = pCallback; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             public void onDeeplinkResolved(string resolvedLink) | ||||||
|  |             { | ||||||
|  |                 if (callback != null) | ||||||
|  |                 { | ||||||
|  |                     callback(resolvedLink); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Private & helper methods. |         // Private & helper methods. | ||||||
|         private static bool IsAppSecretSet(AdjustConfig adjustConfig) |         private static bool IsAppSecretSet(AdjustConfig adjustConfig) | ||||||
|         { |         { | ||||||
|  |  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -11,9 +11,9 @@ public class AdjustSettings : ScriptableObject | ||||||
|     [SerializeField] |     [SerializeField] | ||||||
|     private bool _iOSFrameworkAdSupport = true; |     private bool _iOSFrameworkAdSupport = true; | ||||||
|     [SerializeField] |     [SerializeField] | ||||||
|     private bool _iOSFrameworkAdServices = true; |     private bool _iOSFrameworkAdServices = false; | ||||||
|     [SerializeField] |     [SerializeField] | ||||||
|     private bool _iOSFrameworkAppTrackingTransparency = true; |     private bool _iOSFrameworkAppTrackingTransparency = false; | ||||||
|     [SerializeField] |     [SerializeField] | ||||||
|     private bool _iOSFrameworkStoreKit = false; |     private bool _iOSFrameworkStoreKit = false; | ||||||
|     [SerializeField] |     [SerializeField] | ||||||
|  | @ -50,11 +50,7 @@ public class AdjustSettings : ScriptableObject | ||||||
|                 { |                 { | ||||||
|                     return instance; |                     return instance; | ||||||
|                 } |                 } | ||||||
| //                var assetPath = AssetDatabase.GUIDToAssetPath(guids[0]).Replace("AdjustSettings.cs", "AdjustSettings.asset"); |                 var assetPath = AssetDatabase.GUIDToAssetPath(guids[0]).Replace("AdjustSettings.cs", "AdjustSettings.asset"); | ||||||
| 				// ************ Auto fixed by Guru Adjust ************ |  | ||||||
| 				if(!System.IO.Directory.Exists("Assets/Guru/Editor")) System.IO.Directory.CreateDirectory("Assets/Guru/Editor"); |  | ||||||
| 				var assetPath = "Assets/Guru/Editor/AdjustSettings.asset"; |  | ||||||
| 				// ************ Auto fixed by Guru Adjust ************ |  | ||||||
|                 AssetDatabase.CreateAsset(instance, assetPath); |                 AssetDatabase.CreateAsset(instance, assetPath); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -86,6 +86,7 @@ namespace com.adjust.sdk | ||||||
|         private static Action<string> skadUpdateConversionValueDelegate = null; |         private static Action<string> skadUpdateConversionValueDelegate = null; | ||||||
|         private static Action<string> skad4UpdateConversionValueDelegate = null; |         private static Action<string> skad4UpdateConversionValueDelegate = null; | ||||||
|         private static Action<AdjustPurchaseVerificationInfo> verificationInfoDelegate = null; |         private static Action<AdjustPurchaseVerificationInfo> verificationInfoDelegate = null; | ||||||
|  |         private static Action<string> deeplinkResolutionDelegate = null; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|         void Awake() |         void Awake() | ||||||
|  | @ -959,6 +960,28 @@ namespace com.adjust.sdk | ||||||
| #endif | #endif | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public static void processDeeplink( | ||||||
|  |             string url, | ||||||
|  |             Action<string> resolvedLinkDelegate, | ||||||
|  |             string sceneName = "Adjust") | ||||||
|  |         { | ||||||
|  |             if (IsEditor()) | ||||||
|  |             { | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  | #if UNITY_IOS | ||||||
|  |             Adjust.deeplinkResolutionDelegate = resolvedLinkDelegate; | ||||||
|  |             AdjustiOS.ProcessDeeplink(url, sceneName); | ||||||
|  | #elif UNITY_ANDROID | ||||||
|  |             AdjustAndroid.ProcessDeeplink(url, resolvedLinkDelegate); | ||||||
|  | #elif (UNITY_WSA || UNITY_WP8) | ||||||
|  |             Debug.Log("[Adjust]: Deep link processing is only supported for Android and iOS platform."); | ||||||
|  | #else | ||||||
|  |             Debug.Log(errorMsgPlatform); | ||||||
|  | #endif | ||||||
|  |         } | ||||||
|  | 
 | ||||||
| #if UNITY_IOS | #if UNITY_IOS | ||||||
|         public void GetNativeAttribution(string attributionData) |         public void GetNativeAttribution(string attributionData) | ||||||
|         { |         { | ||||||
|  | @ -1178,6 +1201,22 @@ namespace com.adjust.sdk | ||||||
|             var verificationInfo = new AdjustPurchaseVerificationInfo(verificationInfoData); |             var verificationInfo = new AdjustPurchaseVerificationInfo(verificationInfoData); | ||||||
|             Adjust.verificationInfoDelegate(verificationInfo); |             Adjust.verificationInfoDelegate(verificationInfo); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         public void GetNativeResolvedLink(string resolvedLink) | ||||||
|  |         { | ||||||
|  |             if (IsEditor()) | ||||||
|  |             { | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (Adjust.deeplinkResolutionDelegate == null) | ||||||
|  |             { | ||||||
|  |                 Debug.Log("[Adjust]: Deep link reoslution delegate was not set."); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             Adjust.deeplinkResolutionDelegate(resolvedLink); | ||||||
|  |         } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|         private static bool IsEditor() |         private static bool IsEditor() | ||||||
|  |  | ||||||
|  | @ -23,6 +23,7 @@ namespace com.adjust.sdk | ||||||
|         public const string AdjustAdRevenueSourcePublisher = "publisher_sdk"; |         public const string AdjustAdRevenueSourcePublisher = "publisher_sdk"; | ||||||
|         public const string AdjustAdRevenueSourceTopOn = "topon_sdk"; |         public const string AdjustAdRevenueSourceTopOn = "topon_sdk"; | ||||||
|         public const string AdjustAdRevenueSourceAdx = "adx_sdk"; |         public const string AdjustAdRevenueSourceAdx = "adx_sdk"; | ||||||
|  |         public const string AdjustAdRevenueTradPlus = "tradplus_sdk"; | ||||||
| 
 | 
 | ||||||
|         internal string appToken; |         internal string appToken; | ||||||
|         internal string sceneName; |         internal string sceneName; | ||||||
|  | @ -43,6 +44,7 @@ namespace com.adjust.sdk | ||||||
|         internal bool? playStoreKidsAppEnabled; |         internal bool? playStoreKidsAppEnabled; | ||||||
|         internal bool? allowSuppressLogLevel; |         internal bool? allowSuppressLogLevel; | ||||||
|         internal bool? needsCost; |         internal bool? needsCost; | ||||||
|  |         internal bool? readDeviceInfoOnceEnabled; | ||||||
|         internal bool launchDeferredDeeplink; |         internal bool launchDeferredDeeplink; | ||||||
|         internal AdjustLogLevel? logLevel; |         internal AdjustLogLevel? logLevel; | ||||||
|         internal AdjustEnvironment environment; |         internal AdjustEnvironment environment; | ||||||
|  | @ -62,7 +64,6 @@ namespace com.adjust.sdk | ||||||
|         internal string preinstallFilePath; |         internal string preinstallFilePath; | ||||||
|         internal bool? finalAndroidAttributionEnabled; |         internal bool? finalAndroidAttributionEnabled; | ||||||
|         internal string fbAppId; |         internal string fbAppId; | ||||||
|         internal bool? readDeviceInfoOnceEnabled; |  | ||||||
|         // iOS specific members |         // iOS specific members | ||||||
|         internal bool? allowAdServicesInfoReading; |         internal bool? allowAdServicesInfoReading; | ||||||
|         internal bool? allowIdfaReading; |         internal bool? allowIdfaReading; | ||||||
|  |  | ||||||
|  | @ -15,6 +15,7 @@ namespace com.adjust.sdk | ||||||
|         internal List<string> callbackList; |         internal List<string> callbackList; | ||||||
|         // iOS specific members |         // iOS specific members | ||||||
|         internal string receipt; |         internal string receipt; | ||||||
|  |         internal string receiptBase64; | ||||||
|         internal bool isReceiptSet; |         internal bool isReceiptSet; | ||||||
|         // Android specific members |         // Android specific members | ||||||
|         internal string purchaseToken; |         internal string purchaseToken; | ||||||
|  | @ -81,6 +82,11 @@ namespace com.adjust.sdk | ||||||
|             this.receipt = receipt; |             this.receipt = receipt; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public void setReceiptBase64(string receiptBase64) | ||||||
|  |         { | ||||||
|  |             this.receiptBase64 = receiptBase64; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Android specific methods |         // Android specific methods | ||||||
|         public void setPurchaseToken(string purchaseToken) |         public void setPurchaseToken(string purchaseToken) | ||||||
|         { |         { | ||||||
|  |  | ||||||
|  | @ -36,6 +36,7 @@ namespace com.adjust.sdk | ||||||
|         public static string KeyTestOptionsGdprUrl = "gdprUrl"; |         public static string KeyTestOptionsGdprUrl = "gdprUrl"; | ||||||
|         public static string KeyTestOptionsSubscriptionUrl = "subscriptionUrl"; |         public static string KeyTestOptionsSubscriptionUrl = "subscriptionUrl"; | ||||||
|         public static string KeyTestOptionsPurchaseVerificationUrl = "purchaseVerificationUrl"; |         public static string KeyTestOptionsPurchaseVerificationUrl = "purchaseVerificationUrl"; | ||||||
|  |         public static string KeyTestOptionsOverwriteUrl = "urlOverwrite"; | ||||||
|         public static string KeyTestOptionsExtraPath = "extraPath"; |         public static string KeyTestOptionsExtraPath = "extraPath"; | ||||||
|         public static string KeyTestOptionsBasePath = "basePath"; |         public static string KeyTestOptionsBasePath = "basePath"; | ||||||
|         public static string KeyTestOptionsGdprPath = "gdprPath"; |         public static string KeyTestOptionsGdprPath = "gdprPath"; | ||||||
|  | @ -48,6 +49,8 @@ namespace com.adjust.sdk | ||||||
|         public static string KeyTestOptionsTeardown = "teardown"; |         public static string KeyTestOptionsTeardown = "teardown"; | ||||||
|         public static string KeyTestOptionsNoBackoffWait = "noBackoffWait"; |         public static string KeyTestOptionsNoBackoffWait = "noBackoffWait"; | ||||||
|         public static string KeyTestOptionsAdServicesFrameworkEnabled = "adServicesFrameworkEnabled"; |         public static string KeyTestOptionsAdServicesFrameworkEnabled = "adServicesFrameworkEnabled"; | ||||||
|  |         public static string KeyTestOptionsAttStatus = "attStatus"; | ||||||
|  |         public static string KeyTestOptionsIdfa = "idfa"; | ||||||
| 
 | 
 | ||||||
|         public static int ConvertLogLevel(AdjustLogLevel? logLevel) |         public static int ConvertLogLevel(AdjustLogLevel? logLevel) | ||||||
|         { |         { | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ namespace com.adjust.sdk | ||||||
| { | { | ||||||
|     public class AdjustWindows |     public class AdjustWindows | ||||||
|     { |     { | ||||||
|         private const string sdkPrefix = "unity4.36.0"; |         private const string sdkPrefix = "unity4.38.0"; | ||||||
|         private static bool appLaunched = false; |         private static bool appLaunched = false; | ||||||
| 
 | 
 | ||||||
|         public static void Start(AdjustConfig adjustConfig) |         public static void Start(AdjustConfig adjustConfig) | ||||||
|  |  | ||||||
|  | @ -291,4 +291,9 @@ | ||||||
|  */ |  */ | ||||||
| @property (nonatomic, assign) BOOL coppaCompliantEnabled; | @property (nonatomic, assign) BOOL coppaCompliantEnabled; | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief Enables caching of device ids to read it only once | ||||||
|  |  */ | ||||||
|  | @property (nonatomic, assign) BOOL readDeviceInfoOnceEnabled; | ||||||
|  | 
 | ||||||
| @end | @end | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| //  Adjust.h
 | //  Adjust.h
 | ||||||
| //  Adjust SDK
 | //  Adjust SDK
 | ||||||
| //
 | //
 | ||||||
| //  V4.36.0
 | //  V4.38.0
 | ||||||
| //  Created by Christian Wellenbrock (@wellle) on 23rd July 2013.
 | //  Created by Christian Wellenbrock (@wellle) on 23rd July 2013.
 | ||||||
| //  Copyright (c) 2012-2021 Adjust GmbH. All rights reserved.
 | //  Copyright (c) 2012-2021 Adjust GmbH. All rights reserved.
 | ||||||
| //
 | //
 | ||||||
|  | @ -17,17 +17,18 @@ | ||||||
| #import "ADJPurchase.h" | #import "ADJPurchase.h" | ||||||
| #import "ADJPurchaseVerificationResult.h" | #import "ADJPurchaseVerificationResult.h" | ||||||
| 
 | 
 | ||||||
|  | typedef void(^AdjustResolvedDeeplinkBlock)(NSString * _Nonnull resolvedLink); | ||||||
|  | 
 | ||||||
| @interface AdjustTestOptions : NSObject | @interface AdjustTestOptions : NSObject | ||||||
| 
 | 
 | ||||||
| @property (nonatomic, copy, nullable) NSString *baseUrl; | @property (nonatomic, copy, nullable) NSString *urlOverwrite; | ||||||
| @property (nonatomic, copy, nullable) NSString *gdprUrl; |  | ||||||
| @property (nonatomic, copy, nullable) NSString *subscriptionUrl; |  | ||||||
| @property (nonatomic, copy, nullable) NSString *purchaseVerificationUrl; |  | ||||||
| @property (nonatomic, copy, nullable) NSString *extraPath; | @property (nonatomic, copy, nullable) NSString *extraPath; | ||||||
| @property (nonatomic, copy, nullable) NSNumber *timerIntervalInMilliseconds; | @property (nonatomic, copy, nullable) NSNumber *timerIntervalInMilliseconds; | ||||||
| @property (nonatomic, copy, nullable) NSNumber *timerStartInMilliseconds; | @property (nonatomic, copy, nullable) NSNumber *timerStartInMilliseconds; | ||||||
| @property (nonatomic, copy, nullable) NSNumber *sessionIntervalInMilliseconds; | @property (nonatomic, copy, nullable) NSNumber *sessionIntervalInMilliseconds; | ||||||
| @property (nonatomic, copy, nullable) NSNumber *subsessionIntervalInMilliseconds; | @property (nonatomic, copy, nullable) NSNumber *subsessionIntervalInMilliseconds; | ||||||
|  | @property (nonatomic, copy, nullable) NSNumber *attStatusInt; | ||||||
|  | @property (nonatomic, copy, nullable) NSString *idfa; | ||||||
| @property (nonatomic, assign) BOOL teardown; | @property (nonatomic, assign) BOOL teardown; | ||||||
| @property (nonatomic, assign) BOOL deleteState; | @property (nonatomic, assign) BOOL deleteState; | ||||||
| @property (nonatomic, assign) BOOL noBackoffWait; | @property (nonatomic, assign) BOOL noBackoffWait; | ||||||
|  | @ -56,6 +57,7 @@ extern NSString * __nonnull const ADJAdRevenueSourceHeliumChartboost; | ||||||
| extern NSString * __nonnull const ADJAdRevenueSourcePublisher; | extern NSString * __nonnull const ADJAdRevenueSourcePublisher; | ||||||
| extern NSString * __nonnull const ADJAdRevenueSourceTopOn; | extern NSString * __nonnull const ADJAdRevenueSourceTopOn; | ||||||
| extern NSString * __nonnull const ADJAdRevenueSourceADX; | extern NSString * __nonnull const ADJAdRevenueSourceADX; | ||||||
|  | extern NSString * __nonnull const ADJAdRevenueSourceTradplus; | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Constants for country app's URL strategies. |  * Constants for country app's URL strategies. | ||||||
|  | @ -137,6 +139,15 @@ extern NSString * __nonnull const ADJDataResidencyUS; | ||||||
|  */ |  */ | ||||||
| + (void)appWillOpenUrl:(nonnull NSURL *)url; | + (void)appWillOpenUrl:(nonnull NSURL *)url; | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * @brief Process the deep link that has opened an app and potentially get a resolved link. | ||||||
|  |  * | ||||||
|  |  * @param deeplink URL object which contains info about adjust deep link. | ||||||
|  |  * @param completionHandler Completion handler where either resolved or echoed deep link will be sent. | ||||||
|  |  */ | ||||||
|  | + (void)processDeeplink:(nonnull NSURL *)deeplink | ||||||
|  |       completionHandler:(void (^_Nonnull)(NSString * _Nonnull resolvedLink))completionHandler; | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * @brief Set the device token used by push notifications. |  * @brief Set the device token used by push notifications. | ||||||
|  * |  * | ||||||
|  | @ -407,6 +418,9 @@ extern NSString * __nonnull const ADJDataResidencyUS; | ||||||
| 
 | 
 | ||||||
| - (void)appWillOpenUrl:(nonnull NSURL *)url; | - (void)appWillOpenUrl:(nonnull NSURL *)url; | ||||||
| 
 | 
 | ||||||
|  | - (void)processDeeplink:(nonnull NSURL *)deeplink | ||||||
|  |       completionHandler:(void (^_Nonnull)(NSString * _Nonnull resolvedLink))completionHandler; | ||||||
|  | 
 | ||||||
| - (void)setOfflineMode:(BOOL)enabled; | - (void)setOfflineMode:(BOOL)enabled; | ||||||
| 
 | 
 | ||||||
| - (void)setDeviceToken:(nonnull NSData *)deviceToken; | - (void)setDeviceToken:(nonnull NSData *)deviceToken; | ||||||
|  |  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -101,6 +101,7 @@ extern "C" | ||||||
|                           int linkMeEnabled, |                           int linkMeEnabled, | ||||||
|                           int needsCost, |                           int needsCost, | ||||||
|                           int coppaCompliant, |                           int coppaCompliant, | ||||||
|  |                           int readDeviceInfoOnce, | ||||||
|                           int64_t secretId, |                           int64_t secretId, | ||||||
|                           int64_t info1, |                           int64_t info1, | ||||||
|                           int64_t info2, |                           int64_t info2, | ||||||
|  | @ -222,6 +223,11 @@ extern "C" | ||||||
|             [adjustConfig setCoppaCompliantEnabled:(BOOL)coppaCompliant]; |             [adjustConfig setCoppaCompliantEnabled:(BOOL)coppaCompliant]; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         // Read device info just once. | ||||||
|  |         if (readDeviceInfoOnce != -1) { | ||||||
|  |             [adjustConfig setReadDeviceInfoOnceEnabled:(BOOL)readDeviceInfoOnce]; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // User agent. |         // User agent. | ||||||
|         if (stringUserAgent != nil) { |         if (stringUserAgent != nil) { | ||||||
|             [adjustConfig setUserAgent:stringUserAgent]; |             [adjustConfig setUserAgent:stringUserAgent]; | ||||||
|  | @ -270,6 +276,7 @@ extern "C" | ||||||
|                            double revenue, |                            double revenue, | ||||||
|                            const char* currency, |                            const char* currency, | ||||||
|                            const char* receipt, |                            const char* receipt, | ||||||
|  |                            const char* receiptBase64, | ||||||
|                            const char* productId, |                            const char* productId, | ||||||
|                            const char* transactionId, |                            const char* transactionId, | ||||||
|                            const char* callbackId, |                            const char* callbackId, | ||||||
|  | @ -324,6 +331,14 @@ extern "C" | ||||||
|             [event setReceipt:[stringReceipt dataUsingEncoding:NSUTF8StringEncoding]]; |             [event setReceipt:[stringReceipt dataUsingEncoding:NSUTF8StringEncoding]]; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         // Base64 encoded receipt. | ||||||
|  |         if (receiptBase64 != NULL) { | ||||||
|  |             // If both (receipt and receiptBase64) set, receiptBase64 will be used. | ||||||
|  |             NSString *stringReceiptBase64 = [NSString stringWithUTF8String:receiptBase64]; | ||||||
|  |             NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:stringReceiptBase64 options:0]; | ||||||
|  |             [event setReceipt:decodedData]; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Callback ID. |         // Callback ID. | ||||||
|         if (callbackId != NULL) { |         if (callbackId != NULL) { | ||||||
|             NSString *stringCallbackId = [NSString stringWithUTF8String:callbackId]; |             NSString *stringCallbackId = [NSString stringWithUTF8String:callbackId]; | ||||||
|  | @ -848,7 +863,8 @@ extern "C" | ||||||
| 
 | 
 | ||||||
|         // Receipt. |         // Receipt. | ||||||
|         if (receipt != NULL) { |         if (receipt != NULL) { | ||||||
|             dataReceipt = [[NSString stringWithUTF8String:receipt] dataUsingEncoding:NSUTF8StringEncoding]; |             NSString *stringReceiptBase64 = [NSString stringWithUTF8String:receipt]; | ||||||
|  |             dataReceipt = [[NSData alloc] initWithBase64EncodedString:stringReceiptBase64 options:0]; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // Scene name. |         // Scene name. | ||||||
|  | @ -881,10 +897,34 @@ extern "C" | ||||||
|         }]; |         }]; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void _AdjustSetTestOptions(const char* baseUrl, |     void _AdjustProcessDeeplink(const char* url, const char* sceneName) { | ||||||
|                                const char* gdprUrl, |         NSString *strSceneName = isStringValid(sceneName) == true ? [NSString stringWithUTF8String:sceneName] : nil; | ||||||
|                                const char* subscriptionUrl, |         if (url != NULL) { | ||||||
|                                const char* purchaseVerificationUrl, |             NSString *stringUrl = [NSString stringWithUTF8String:url]; | ||||||
|  |             NSURL *nsUrl; | ||||||
|  |             if ([NSString instancesRespondToSelector:@selector(stringByAddingPercentEncodingWithAllowedCharacters:)]) { | ||||||
|  |                 nsUrl = [NSURL URLWithString:[stringUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]]; | ||||||
|  |             } else { | ||||||
|  | #pragma clang diagnostic push | ||||||
|  | #pragma clang diagnostic ignored "-Wdeprecated-declarations" | ||||||
|  |                 nsUrl = [NSURL URLWithString:[stringUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; | ||||||
|  |             } | ||||||
|  | #pragma clang diagnostic pop | ||||||
|  | 
 | ||||||
|  |             [Adjust processDeeplink:nsUrl completionHandler:^(NSString * _Nonnull resolvedLink) { | ||||||
|  |                 if (strSceneName == nil) { | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |                 if (resolvedLink == nil) { | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |                 const char* resolvedLinkCString = [resolvedLink UTF8String]; | ||||||
|  |                 UnitySendMessage([strSceneName UTF8String], "GetNativeResolvedLink", resolvedLinkCString); | ||||||
|  |             }]; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     void _AdjustSetTestOptions(const char* overwriteUrl, | ||||||
|                                const char* extraPath, |                                const char* extraPath, | ||||||
|                                long timerIntervalInMilliseconds, |                                long timerIntervalInMilliseconds, | ||||||
|                                long timerStartInMilliseconds, |                                long timerStartInMilliseconds, | ||||||
|  | @ -893,38 +933,29 @@ extern "C" | ||||||
|                                int teardown, |                                int teardown, | ||||||
|                                int deleteState, |                                int deleteState, | ||||||
|                                int noBackoffWait, |                                int noBackoffWait, | ||||||
|                                int adServicesFrameworkEnabled) { |                                int adServicesFrameworkEnabled, | ||||||
|  |                                int attStatus, | ||||||
|  |                                const char *idfa) { | ||||||
|         AdjustTestOptions *testOptions = [[AdjustTestOptions alloc] init]; |         AdjustTestOptions *testOptions = [[AdjustTestOptions alloc] init]; | ||||||
| 
 | 
 | ||||||
|         NSString *stringBaseUrl = isStringValid(baseUrl) == true ? [NSString stringWithUTF8String:baseUrl] : nil; |         NSString *stringOverwriteUrl = isStringValid(overwriteUrl) == true ? [NSString stringWithUTF8String:overwriteUrl] : nil; | ||||||
|         if (stringBaseUrl != nil) { |         if (stringOverwriteUrl != nil) { | ||||||
|             [testOptions setBaseUrl:stringBaseUrl]; |             [testOptions setUrlOverwrite:stringOverwriteUrl]; | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         NSString *stringGdprUrl = isStringValid(baseUrl) == true ? [NSString stringWithUTF8String:gdprUrl] : nil; |  | ||||||
|         if (stringGdprUrl != nil) { |  | ||||||
|             [testOptions setGdprUrl:stringGdprUrl]; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         NSString *stringSubscriptionUrl = isStringValid(baseUrl) == true ? [NSString stringWithUTF8String:subscriptionUrl] : nil; |  | ||||||
|         if (stringSubscriptionUrl != nil) { |  | ||||||
|             [testOptions setSubscriptionUrl:stringSubscriptionUrl]; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         NSString *stringPurchaseVerificationUrl = isStringValid(baseUrl) == true ? [NSString stringWithUTF8String:purchaseVerificationUrl] : nil; |  | ||||||
|         if (stringPurchaseVerificationUrl != nil) { |  | ||||||
|             [testOptions setPurchaseVerificationUrl:stringPurchaseVerificationUrl]; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         NSString *stringExtraPath = isStringValid(extraPath) == true ? [NSString stringWithUTF8String:extraPath] : nil; |         NSString *stringExtraPath = isStringValid(extraPath) == true ? [NSString stringWithUTF8String:extraPath] : nil; | ||||||
|         if (stringExtraPath != nil && [stringExtraPath length] > 0) { |         if (stringExtraPath != nil && [stringExtraPath length] > 0) { | ||||||
|             [testOptions setExtraPath:stringExtraPath]; |             [testOptions setExtraPath:stringExtraPath]; | ||||||
|         } |         } | ||||||
|  |         NSString *stringIdfa = isStringValid(idfa) == true ? [NSString stringWithUTF8String:idfa] : nil; | ||||||
|  |         if (stringIdfa != nil && [stringIdfa length] > 0) { | ||||||
|  |             [testOptions setIdfa:stringIdfa]; | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         testOptions.timerIntervalInMilliseconds = [NSNumber numberWithLong:timerIntervalInMilliseconds]; |         testOptions.timerIntervalInMilliseconds = [NSNumber numberWithLong:timerIntervalInMilliseconds]; | ||||||
|         testOptions.timerStartInMilliseconds = [NSNumber numberWithLong:timerStartInMilliseconds]; |         testOptions.timerStartInMilliseconds = [NSNumber numberWithLong:timerStartInMilliseconds]; | ||||||
|         testOptions.sessionIntervalInMilliseconds = [NSNumber numberWithLong:sessionIntervalInMilliseconds]; |         testOptions.sessionIntervalInMilliseconds = [NSNumber numberWithLong:sessionIntervalInMilliseconds]; | ||||||
|         testOptions.subsessionIntervalInMilliseconds = [NSNumber numberWithLong:subsessionIntervalInMilliseconds]; |         testOptions.subsessionIntervalInMilliseconds = [NSNumber numberWithLong:subsessionIntervalInMilliseconds]; | ||||||
|  |         testOptions.attStatusInt = [NSNumber numberWithInt:attStatus]; | ||||||
| 
 | 
 | ||||||
|         if (teardown != -1) { |         if (teardown != -1) { | ||||||
|             [AdjustUnityDelegate teardown]; |             [AdjustUnityDelegate teardown]; | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ namespace com.adjust.sdk | ||||||
| #if UNITY_IOS | #if UNITY_IOS | ||||||
|     public class AdjustiOS |     public class AdjustiOS | ||||||
|     { |     { | ||||||
|         private const string sdkPrefix = "unity4.36.0"; |         private const string sdkPrefix = "unity4.38.0"; | ||||||
| 
 | 
 | ||||||
|         [DllImport("__Internal")] |         [DllImport("__Internal")] | ||||||
|         private static extern void _AdjustLaunchApp( |         private static extern void _AdjustLaunchApp( | ||||||
|  | @ -31,6 +31,7 @@ namespace com.adjust.sdk | ||||||
|             int linkMeEnabled, |             int linkMeEnabled, | ||||||
|             int needsCost, |             int needsCost, | ||||||
|             int coppaCompliant, |             int coppaCompliant, | ||||||
|  |             int readDeviceInfoOnce, | ||||||
|             long secretId, |             long secretId, | ||||||
|             long info1, |             long info1, | ||||||
|             long info2, |             long info2, | ||||||
|  | @ -54,6 +55,7 @@ namespace com.adjust.sdk | ||||||
|             double revenue, |             double revenue, | ||||||
|             string currency, |             string currency, | ||||||
|             string receipt, |             string receipt, | ||||||
|  |             string receiptBase64, | ||||||
|             string productId, |             string productId, | ||||||
|             string transactionId, |             string transactionId, | ||||||
|             string callbackId, |             string callbackId, | ||||||
|  | @ -153,10 +155,7 @@ namespace com.adjust.sdk | ||||||
| 
 | 
 | ||||||
|         [DllImport("__Internal")] |         [DllImport("__Internal")] | ||||||
|         private static extern void _AdjustSetTestOptions( |         private static extern void _AdjustSetTestOptions( | ||||||
|             string baseUrl, |             string overwriteUrl, | ||||||
|             string gdprUrl, |  | ||||||
|             string subscriptionUrl, |  | ||||||
|             string purchaseVerificationUrl, |  | ||||||
|             string extraPath, |             string extraPath, | ||||||
|             long timerIntervalInMilliseconds, |             long timerIntervalInMilliseconds, | ||||||
|             long timerStartInMilliseconds, |             long timerStartInMilliseconds, | ||||||
|  | @ -165,7 +164,9 @@ namespace com.adjust.sdk | ||||||
|             int teardown, |             int teardown, | ||||||
|             int deleteState, |             int deleteState, | ||||||
|             int noBackoffWait, |             int noBackoffWait, | ||||||
|             int adServicesFrameworkEnabled); |             int adServicesFrameworkEnabled, | ||||||
|  |             int attStatus, | ||||||
|  |             string idfa); | ||||||
| 
 | 
 | ||||||
|         [DllImport("__Internal")] |         [DllImport("__Internal")] | ||||||
|         private static extern void _AdjustRequestTrackingAuthorizationWithCompletionHandler(string sceneName); |         private static extern void _AdjustRequestTrackingAuthorizationWithCompletionHandler(string sceneName); | ||||||
|  | @ -201,6 +202,9 @@ namespace com.adjust.sdk | ||||||
|             string receipt, |             string receipt, | ||||||
|             string sceneName); |             string sceneName); | ||||||
| 
 | 
 | ||||||
|  |         [DllImport("__Internal")] | ||||||
|  |         private static extern void _AdjustProcessDeeplink(string url, string sceneName); | ||||||
|  | 
 | ||||||
|         public AdjustiOS() {} |         public AdjustiOS() {} | ||||||
| 
 | 
 | ||||||
|         public static void Start(AdjustConfig adjustConfig) |         public static void Start(AdjustConfig adjustConfig) | ||||||
|  | @ -231,6 +235,7 @@ namespace com.adjust.sdk | ||||||
|             int linkMeEnabled = AdjustUtils.ConvertBool(adjustConfig.linkMeEnabled); |             int linkMeEnabled = AdjustUtils.ConvertBool(adjustConfig.linkMeEnabled); | ||||||
|             int needsCost = AdjustUtils.ConvertBool(adjustConfig.needsCost); |             int needsCost = AdjustUtils.ConvertBool(adjustConfig.needsCost); | ||||||
|             int coppaCompliant = AdjustUtils.ConvertBool(adjustConfig.coppaCompliantEnabled); |             int coppaCompliant = AdjustUtils.ConvertBool(adjustConfig.coppaCompliantEnabled); | ||||||
|  |             int readDeviceInfoOnce = AdjustUtils.ConvertBool(adjustConfig.readDeviceInfoOnceEnabled); | ||||||
|             int isAttributionCallbackImplemented = AdjustUtils.ConvertBool(adjustConfig.getAttributionChangedDelegate() != null); |             int isAttributionCallbackImplemented = AdjustUtils.ConvertBool(adjustConfig.getAttributionChangedDelegate() != null); | ||||||
|             int isEventSuccessCallbackImplemented = AdjustUtils.ConvertBool(adjustConfig.getEventSuccessDelegate() != null); |             int isEventSuccessCallbackImplemented = AdjustUtils.ConvertBool(adjustConfig.getEventSuccessDelegate() != null); | ||||||
|             int isEventFailureCallbackImplemented = AdjustUtils.ConvertBool(adjustConfig.getEventFailureDelegate() != null); |             int isEventFailureCallbackImplemented = AdjustUtils.ConvertBool(adjustConfig.getEventFailureDelegate() != null); | ||||||
|  | @ -260,6 +265,7 @@ namespace com.adjust.sdk | ||||||
|                 linkMeEnabled, |                 linkMeEnabled, | ||||||
|                 needsCost, |                 needsCost, | ||||||
|                 coppaCompliant, |                 coppaCompliant, | ||||||
|  |                 readDeviceInfoOnce, | ||||||
|                 secretId, |                 secretId, | ||||||
|                 info1, |                 info1, | ||||||
|                 info2, |                 info2, | ||||||
|  | @ -285,13 +291,25 @@ namespace com.adjust.sdk | ||||||
|             string eventToken = adjustEvent.eventToken; |             string eventToken = adjustEvent.eventToken; | ||||||
|             string currency = adjustEvent.currency; |             string currency = adjustEvent.currency; | ||||||
|             string receipt = adjustEvent.receipt; |             string receipt = adjustEvent.receipt; | ||||||
|  |             string receiptBase64 = adjustEvent.receiptBase64; | ||||||
|             string productId = adjustEvent.productId; |             string productId = adjustEvent.productId; | ||||||
|             string transactionId = adjustEvent.transactionId; |             string transactionId = adjustEvent.transactionId; | ||||||
|             string callbackId = adjustEvent.callbackId; |             string callbackId = adjustEvent.callbackId; | ||||||
|             string stringJsonCallbackParameters = AdjustUtils.ConvertListToJson(adjustEvent.callbackList); |             string stringJsonCallbackParameters = AdjustUtils.ConvertListToJson(adjustEvent.callbackList); | ||||||
|             string stringJsonPartnerParameters = AdjustUtils.ConvertListToJson(adjustEvent.partnerList); |             string stringJsonPartnerParameters = AdjustUtils.ConvertListToJson(adjustEvent.partnerList); | ||||||
| 
 | 
 | ||||||
|             _AdjustTrackEvent(eventToken, revenue, currency, receipt, productId, transactionId, callbackId, isReceiptSet, stringJsonCallbackParameters, stringJsonPartnerParameters); |             _AdjustTrackEvent( | ||||||
|  |                 eventToken, | ||||||
|  |                 revenue, | ||||||
|  |                 currency, | ||||||
|  |                 receipt, | ||||||
|  |                 receiptBase64, | ||||||
|  |                 productId, | ||||||
|  |                 transactionId, | ||||||
|  |                 callbackId, | ||||||
|  |                 isReceiptSet, | ||||||
|  |                 stringJsonCallbackParameters, | ||||||
|  |                 stringJsonPartnerParameters); | ||||||
|         }         |         }         | ||||||
| 
 | 
 | ||||||
|         public static void SetEnabled(bool enabled) |         public static void SetEnabled(bool enabled) | ||||||
|  | @ -526,14 +544,17 @@ namespace com.adjust.sdk | ||||||
|                 cSceneName); |                 cSceneName); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public static void ProcessDeeplink(string url, string sceneName) | ||||||
|  |         { | ||||||
|  |             _AdjustProcessDeeplink(url, sceneName); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Used for testing only. |         // Used for testing only. | ||||||
|         public static void SetTestOptions(Dictionary<string, string> testOptions) |         public static void SetTestOptions(Dictionary<string, string> testOptions) | ||||||
|         { |         { | ||||||
|             string baseUrl = testOptions[AdjustUtils.KeyTestOptionsBaseUrl]; |             string overwriteUrl = testOptions[AdjustUtils.KeyTestOptionsOverwriteUrl]; | ||||||
|             string gdprUrl = testOptions[AdjustUtils.KeyTestOptionsGdprUrl]; |  | ||||||
|             string subscriptionUrl = testOptions[AdjustUtils.KeyTestOptionsSubscriptionUrl]; |  | ||||||
|             string purchaseVerificationUrl = testOptions[AdjustUtils.KeyTestOptionsPurchaseVerificationUrl]; |  | ||||||
|             string extraPath = testOptions.ContainsKey(AdjustUtils.KeyTestOptionsExtraPath) ? testOptions[AdjustUtils.KeyTestOptionsExtraPath] : null; |             string extraPath = testOptions.ContainsKey(AdjustUtils.KeyTestOptionsExtraPath) ? testOptions[AdjustUtils.KeyTestOptionsExtraPath] : null; | ||||||
|  |             string idfa = testOptions.ContainsKey(AdjustUtils.KeyTestOptionsIdfa) ? testOptions[AdjustUtils.KeyTestOptionsIdfa] : null; | ||||||
|             long timerIntervalMilis = -1; |             long timerIntervalMilis = -1; | ||||||
|             long timerStartMilis = -1; |             long timerStartMilis = -1; | ||||||
|             long sessionIntMilis = -1; |             long sessionIntMilis = -1; | ||||||
|  | @ -542,6 +563,7 @@ namespace com.adjust.sdk | ||||||
|             bool deleteState = false; |             bool deleteState = false; | ||||||
|             bool noBackoffWait = false; |             bool noBackoffWait = false; | ||||||
|             bool adServicesFrameworkEnabled = false; |             bool adServicesFrameworkEnabled = false; | ||||||
|  |             int attStatus = -1; | ||||||
| 
 | 
 | ||||||
|             if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsTimerIntervalInMilliseconds))  |             if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsTimerIntervalInMilliseconds))  | ||||||
|             { |             { | ||||||
|  | @ -575,21 +597,24 @@ namespace com.adjust.sdk | ||||||
|             { |             { | ||||||
|                 adServicesFrameworkEnabled = testOptions[AdjustUtils.KeyTestOptionsAdServicesFrameworkEnabled].ToLower() == "true"; |                 adServicesFrameworkEnabled = testOptions[AdjustUtils.KeyTestOptionsAdServicesFrameworkEnabled].ToLower() == "true"; | ||||||
|             } |             } | ||||||
|  |             if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsAttStatus))  | ||||||
|  |             { | ||||||
|  |                 attStatus = int.Parse(testOptions[AdjustUtils.KeyTestOptionsAttStatus]); | ||||||
|  |             } | ||||||
| 
 | 
 | ||||||
|             _AdjustSetTestOptions( |             _AdjustSetTestOptions( | ||||||
|                 baseUrl, |                 overwriteUrl, | ||||||
|                 gdprUrl, |  | ||||||
|                 subscriptionUrl, |  | ||||||
|                 purchaseVerificationUrl, |  | ||||||
|                 extraPath, |                 extraPath, | ||||||
|                 timerIntervalMilis, |                 timerIntervalMilis, | ||||||
|                 timerStartMilis, |                 timerStartMilis, | ||||||
|                 sessionIntMilis, |                 sessionIntMilis, | ||||||
|                 subsessionIntMilis,  |                 subsessionIntMilis, | ||||||
|                 AdjustUtils.ConvertBool(teardown), |                 AdjustUtils.ConvertBool(teardown), | ||||||
|                 AdjustUtils.ConvertBool(deleteState), |                 AdjustUtils.ConvertBool(deleteState), | ||||||
|                 AdjustUtils.ConvertBool(noBackoffWait), |                 AdjustUtils.ConvertBool(noBackoffWait), | ||||||
|                 AdjustUtils.ConvertBool(adServicesFrameworkEnabled)); |                 AdjustUtils.ConvertBool(adServicesFrameworkEnabled), | ||||||
|  |                 attStatus, | ||||||
|  |                 idfa); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public static void TrackSubsessionStart(string testingArgument = null) |         public static void TrackSubsessionStart(string testingArgument = null) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 1caf9524837164956bbd913fc07df697 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,80 @@ | ||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||||||
|  | <plist version="1.0"> | ||||||
|  |     <dict> | ||||||
|  |         <key>NSPrivacyTracking</key> | ||||||
|  |         <true/> | ||||||
|  |         <key>NSPrivacyTrackingDomains</key> | ||||||
|  |         <array> | ||||||
|  |             <string>https://consent.adjust.com</string> | ||||||
|  |             <string>https://consent.adjust.net.in</string> | ||||||
|  |             <string>https://consent.adjust.world</string> | ||||||
|  |             <string>https://consent.adjust.cn</string> | ||||||
|  |             <string>https://consent.eu.adjust.com</string> | ||||||
|  |             <string>https://consent.tr.adjust.com</string> | ||||||
|  |             <string>https://consent.us.adjust.com</string> | ||||||
|  |         </array> | ||||||
|  |         <key>NSPrivacyAccessedAPITypes</key> | ||||||
|  |         <array> | ||||||
|  |             <dict> | ||||||
|  |                 <key>NSPrivacyAccessedAPIType</key> | ||||||
|  |                 <string>NSPrivacyAccessedAPICategoryUserDefaults</string> | ||||||
|  |                 <key>NSPrivacyAccessedAPITypeReasons</key> | ||||||
|  |                 <array> | ||||||
|  |                     <string>CA92.1</string> | ||||||
|  |                 </array> | ||||||
|  |             </dict> | ||||||
|  |             <dict> | ||||||
|  |                 <key>NSPrivacyAccessedAPIType</key> | ||||||
|  |                 <string>NSPrivacyAccessedAPICategoryFileTimestamp</string> | ||||||
|  |                 <key>NSPrivacyAccessedAPITypeReasons</key> | ||||||
|  |                 <array> | ||||||
|  |                     <string>C617.1</string> | ||||||
|  |                 </array> | ||||||
|  |             </dict> | ||||||
|  |         </array> | ||||||
|  |         <key>NSPrivacyCollectedDataTypes</key> | ||||||
|  |         <array> | ||||||
|  |             <dict> | ||||||
|  |                 <key>NSPrivacyCollectedDataType</key> | ||||||
|  |                 <string>NSPrivacyCollectedDataTypeDeviceID</string> | ||||||
|  |                 <key>NSPrivacyCollectedDataTypeLinked</key> | ||||||
|  |                 <true/> | ||||||
|  |                 <key>NSPrivacyCollectedDataTypeTracking</key> | ||||||
|  |                 <false/> | ||||||
|  |                 <key>NSPrivacyCollectedDataTypePurposes</key> | ||||||
|  |                 <array> | ||||||
|  |                     <string>NSPrivacyCollectedDataTypePurposeAnalytics</string> | ||||||
|  |                     <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string> | ||||||
|  |                 </array> | ||||||
|  |             </dict> | ||||||
|  |             <dict> | ||||||
|  |                 <key>NSPrivacyCollectedDataType</key> | ||||||
|  |                 <string>NSPrivacyCollectedDataTypeAdvertisingData</string> | ||||||
|  |                 <key>NSPrivacyCollectedDataTypeLinked</key> | ||||||
|  |                 <true/> | ||||||
|  |                 <key>NSPrivacyCollectedDataTypeTracking</key> | ||||||
|  |                 <true/> | ||||||
|  |                 <key>NSPrivacyCollectedDataTypePurposes</key> | ||||||
|  |                 <array> | ||||||
|  |                     <string>NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising</string> | ||||||
|  |                     <string>NSPrivacyCollectedDataTypePurposeDeveloperAdvertising</string> | ||||||
|  |                 </array> | ||||||
|  |             </dict> | ||||||
|  |             <dict> | ||||||
|  |                 <key>NSPrivacyCollectedDataType</key> | ||||||
|  |                 <string>NSPrivacyCollectedDataTypeProductInteraction</string> | ||||||
|  |                 <key>NSPrivacyCollectedDataTypeLinked</key> | ||||||
|  |                 <true/> | ||||||
|  |                 <key>NSPrivacyCollectedDataTypeTracking</key> | ||||||
|  |                 <false/> | ||||||
|  |                 <key>NSPrivacyCollectedDataTypePurposes</key> | ||||||
|  |                 <array> | ||||||
|  |                     <string>NSPrivacyCollectedDataTypePurposeAnalytics</string> | ||||||
|  |                     <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string> | ||||||
|  |                     <string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string> | ||||||
|  |                 </array> | ||||||
|  |             </dict> | ||||||
|  |         </array> | ||||||
|  |     </dict> | ||||||
|  | </plist> | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 50d6b4f70c684250a7c697555a855ad0 | ||||||
|  | timeCreated: 1713243654 | ||||||
		Loading…
	
		Reference in New Issue