1122 lines
44 KiB
C#
1122 lines
44 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.InteropServices;
|
|
using UnityEngine;
|
|
|
|
namespace AdjustSdk
|
|
{
|
|
#if UNITY_IOS
|
|
public class AdjustiOS
|
|
{
|
|
private const string sdkPrefix = "unity5.4.2";
|
|
|
|
// app callbacks as method parameters
|
|
private static List<Action<bool>> appIsEnabledGetterCallbacks;
|
|
private static List<Action<AdjustAttribution>> appAttributionGetterCallbacks;
|
|
private static List<Action<string>> appAdidGetterCallbacks;
|
|
private static List<Action<string>> appIdfaGetterCallbacks;
|
|
private static List<Action<string>> appIdfvGetterCallbacks;
|
|
private static List<Action<string>> appLastDeeplinkGetterCallbacks;
|
|
private static List<Action<string>> appSdkVersionGetterCallbacks;
|
|
private static List<Action<int>> appAttCallbacks;
|
|
private static Dictionary<int, Action<AdjustPurchaseVerificationResult>> appPurchaseVerificationCallbacks;
|
|
private static Dictionary<int, Action<AdjustPurchaseVerificationResult>> appVerifyAndTrackCallbacks;
|
|
private static int nextPurchaseVerificationCallbackId = 0;
|
|
private static int nextVerifyAndTrackCallbackId = 0;
|
|
private static Action<string> appResolvedDeeplinkCallback;
|
|
private static Action<string> appSkanErrorCallback;
|
|
|
|
// app callbacks as subscriptions
|
|
private static Action<AdjustAttribution> appAttributionCallback;
|
|
private static Action<AdjustSessionSuccess> appSessionSuccessCallback;
|
|
private static Action<AdjustSessionFailure> appSessionFailureCallback;
|
|
private static Action<AdjustEventSuccess> appEventSuccessCallback;
|
|
private static Action<AdjustEventFailure> appEventFailureCallback;
|
|
private static Action<string> appDeferredDeeplinkCallback;
|
|
private static Action<Dictionary<string, string>> appSkanUpdatedCallback;
|
|
|
|
// extenral C methods
|
|
private delegate void AdjustDelegateAttributionCallback(string attribution);
|
|
private delegate void AdjustDelegateSessionSuccessCallback(string sessionSuccess);
|
|
private delegate void AdjustDelegateSessionFailureCallback(string sessionFailure);
|
|
private delegate void AdjustDelegateEventSuccessCallback(string eventSuccess);
|
|
private delegate void AdjustDelegateEventFailureCallback(string eventFailure);
|
|
private delegate void AdjustDelegateDeferredDeeplinkCallback(string callback);
|
|
private delegate void AdjustDelegateSkanUpdatedCallback(string callback);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustInitSdk(
|
|
string appToken,
|
|
string environment,
|
|
string sdkPrefix,
|
|
string defaultTracker,
|
|
string externalDeviceId,
|
|
string jsonUrlStrategyDomains,
|
|
string storeName,
|
|
string storeAppId,
|
|
int allowSuppressLogLevel,
|
|
int logLevel,
|
|
int attConsentWaitingInterval,
|
|
int eventDeduplicationIdsMaxSize,
|
|
int shouldUseSubdomains,
|
|
int isCoppaComplianceEnabled,
|
|
int isDataResidency,
|
|
int isSendingInBackgroundEnabled,
|
|
int isAdServicesEnabled,
|
|
int isIdfaReadingEnabled,
|
|
int isIdfvReadingEnabled,
|
|
int isSkanAttributionEnabled,
|
|
int isLinkMeEnabled,
|
|
int isCostDataInAttributionEnabled,
|
|
int isDeviceIdsReadingOnceEnabled,
|
|
int isAppTrackingTransparencyUsageEnabled,
|
|
int isFirstSessionDelayEnabled,
|
|
int isDeferredDeeplinkOpeningEnabled,
|
|
AdjustDelegateAttributionCallback attributionCallback,
|
|
AdjustDelegateEventSuccessCallback eventSuccessCallback,
|
|
AdjustDelegateEventFailureCallback eventFailureCallback,
|
|
AdjustDelegateSessionSuccessCallback sessionSuccessCallback,
|
|
AdjustDelegateSessionFailureCallback sessionFailureCallback,
|
|
AdjustDelegateDeferredDeeplinkCallback deferredDeeplinkCallback,
|
|
AdjustDelegateSkanUpdatedCallback skanUpdatedCallback);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustTrackEvent(
|
|
string eventToken,
|
|
double revenue,
|
|
string currency,
|
|
string productId,
|
|
string transactionId,
|
|
string callbackId,
|
|
string deduplicationId,
|
|
string jsonCallbackParameters,
|
|
string jsonPartnerParameters);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustEnable();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustDisable();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustSwitchToOfflineMode();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustSwitchBackToOnlineMode();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustSetPushToken(string pushToken);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustProcessDeeplink(string deeplink, string referrer);
|
|
|
|
private delegate void AdjustDelegateResolvedDeeplinkCallback(string deeplink);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustProcessAndResolveDeeplink(
|
|
string deeplink,
|
|
AdjustDelegateResolvedDeeplinkCallback callback);
|
|
|
|
private delegate void AdjustDelegateIsEnabledGetter(bool isEnabed);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustIsEnabled(AdjustDelegateIsEnabledGetter callback);
|
|
|
|
private delegate void AdjustDelegateAttributionGetter(string attribution);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustGetAttribution(AdjustDelegateAttributionGetter callback);
|
|
|
|
private delegate void AdjustDelegateAdidGetter(string adid);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustGetAdid(AdjustDelegateAdidGetter callback);
|
|
|
|
private delegate void AdjustDelegateIdfaGetter(string idfa);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustGetIdfa(AdjustDelegateIdfaGetter callback);
|
|
|
|
private delegate void AdjustDelegateIdfvGetter(string idfv);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustGetIdfv(AdjustDelegateIdfvGetter callback);
|
|
|
|
private delegate void AdjustDelegateLastDeeplinkGetter(string lastDeeplink);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustGetLastDeeplink(AdjustDelegateLastDeeplinkGetter callback);
|
|
|
|
private delegate void AdjustDelegateSdkVersionGetter(string sdkVersion);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustGetSdkVersion(AdjustDelegateSdkVersionGetter callback);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustGdprForgetMe();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustAddGlobalPartnerParameter(string key, string value);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustAddGlobalCallbackParameter(string key, string value);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustRemoveGlobalPartnerParameter(string key);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustRemoveGlobalCallbackParameter(string key);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustRemoveGlobalPartnerParameters();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustRemoveGlobalCallbackParameters();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustTrackAdRevenue(
|
|
string source,
|
|
double revenue,
|
|
string currency,
|
|
int adImpressionsCount,
|
|
string adRevenueNetwork,
|
|
string adRevenueUnit,
|
|
string adRevenuePlacement,
|
|
string jsonCallbackParameters,
|
|
string jsonPartnerParameters);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustTrackAppStoreSubscription(
|
|
string price,
|
|
string currency,
|
|
string transactionId,
|
|
string transactionDate,
|
|
string salesRegion,
|
|
string jsonCallbackParameters,
|
|
string jsonPartnerParameters);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustTrackThirdPartySharing(
|
|
int enabled,
|
|
string jsonGranularOptions,
|
|
string jsonPartnerSharingSettings);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustTrackMeasurementConsent(int enabled);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustSetTestOptions(
|
|
string overwriteUrl,
|
|
string extraPath,
|
|
long timerIntervalInMilliseconds,
|
|
long timerStartInMilliseconds,
|
|
long sessionIntervalInMilliseconds,
|
|
long subsessionIntervalInMilliseconds,
|
|
int teardown,
|
|
int deleteState,
|
|
int noBackoffWait,
|
|
int adServicesFrameworkEnabled,
|
|
int attStatus,
|
|
string idfa);
|
|
|
|
private delegate void AdjustDelegateAttCallback(int status);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustRequestAppTrackingAuthorization(AdjustDelegateAttCallback callback);
|
|
|
|
private delegate void AdjustDelegateSkanErrorCallback(string error);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustUpdateSkanConversionValue(
|
|
int conversionValue,
|
|
string coarseValue,
|
|
int lockWindow,
|
|
AdjustDelegateSkanErrorCallback callback);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern int _AdjustGetAppTrackingAuthorizationStatus();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustTrackSubsessionStart();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustTrackSubsessionEnd();
|
|
|
|
private delegate void AdjustDelegatePurchaseVerificationCallback(string verificationResult, int callbackId);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustVerifyAppStorePurchase(
|
|
string transactionId,
|
|
string productId,
|
|
int callbackId,
|
|
AdjustDelegatePurchaseVerificationCallback callback);
|
|
|
|
private delegate void AdjustDelegateVerifyAndTrackCallback(string verificationResult, int callbackId);
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustVerifyAndTrackAppStorePurchase(
|
|
string eventToken,
|
|
double revenue,
|
|
string currency,
|
|
string productId,
|
|
string transactionId,
|
|
string callbackId,
|
|
string deduplicationId,
|
|
string jsonCallbackParameters,
|
|
string jsonPartnerParameters,
|
|
int verificationCallbackId,
|
|
AdjustDelegateVerifyAndTrackCallback callback);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustEndFirstSessionDelay();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustEnableCoppaComplianceInDelay();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustDisableCoppaComplianceInDelay();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void _AdjustSetExternalDeviceIdInDelay(string externalDeviceId);
|
|
|
|
// public API
|
|
public AdjustiOS() {}
|
|
|
|
public static void InitSdk(AdjustConfig adjustConfig)
|
|
{
|
|
string appToken = adjustConfig.AppToken != null ? adjustConfig.AppToken : "ADJ_INVALID";
|
|
string environment = adjustConfig.Environment.ToLowercaseString();
|
|
string defaultTracker = adjustConfig.DefaultTracker != null ? adjustConfig.DefaultTracker : "ADJ_INVALID";
|
|
string externalDeviceId = adjustConfig.ExternalDeviceId != null ? adjustConfig.ExternalDeviceId : "ADJ_INVALID";
|
|
string stringJsonUrlStrategyDomains = AdjustUtils.ConvertReadOnlyCollectionToJson(
|
|
adjustConfig.UrlStrategyDomains != null ? adjustConfig.UrlStrategyDomains.AsReadOnly() : null);
|
|
string storeName = "ADJ_INVALID";
|
|
string storeAppId = "ADJ_INVALID";
|
|
if (adjustConfig.StoreInfo != null)
|
|
{
|
|
storeName = adjustConfig.StoreInfo.StoreName != null ? adjustConfig.StoreInfo.StoreName : "ADJ_INVALID";
|
|
storeAppId = adjustConfig.StoreInfo.StoreAppId != null ? adjustConfig.StoreInfo.StoreAppId : "ADJ_INVALID";
|
|
}
|
|
int attConsentWaitingInterval = AdjustUtils.ConvertInt(adjustConfig.AttConsentWaitingInterval);
|
|
int eventDeduplicationIdsMaxSize = AdjustUtils.ConvertInt(adjustConfig.EventDeduplicationIdsMaxSize);
|
|
int logLevel = AdjustUtils.ConvertLogLevel(adjustConfig.LogLevel);
|
|
int isCoppaComplianceEnabled = AdjustUtils.ConvertBool(adjustConfig.IsCoppaComplianceEnabled);
|
|
int isSendingInBackgroundEnabled = AdjustUtils.ConvertBool(adjustConfig.IsSendingInBackgroundEnabled);
|
|
int isAdServicesEnabled = AdjustUtils.ConvertBool(adjustConfig.IsAdServicesEnabled);
|
|
int isIdfaReadingEnabled = AdjustUtils.ConvertBool(adjustConfig.IsIdfaReadingEnabled);
|
|
int isIdfvReadingEnabled = AdjustUtils.ConvertBool(adjustConfig.IsIdfvReadingEnabled);
|
|
int allowSuppressLogLevel = AdjustUtils.ConvertBool(adjustConfig.AllowSuppressLogLevel);
|
|
int isDeferredDeeplinkOpeningEnabled = AdjustUtils.ConvertBool(adjustConfig.IsDeferredDeeplinkOpeningEnabled);
|
|
int isSkanAttributionEnabled = AdjustUtils.ConvertBool(adjustConfig.IsSkanAttributionEnabled);
|
|
int isLinkMeEnabled = AdjustUtils.ConvertBool(adjustConfig.IsLinkMeEnabled);
|
|
int isCostDataInAttributionEnabled = AdjustUtils.ConvertBool(adjustConfig.IsCostDataInAttributionEnabled);
|
|
int isDeviceIdsReadingOnceEnabled = AdjustUtils.ConvertBool(adjustConfig.IsDeviceIdsReadingOnceEnabled);
|
|
int isAppTrackingTransparencyUsageEnabled = AdjustUtils.ConvertBool(adjustConfig.IsAppTrackingTransparencyUsageEnabled);
|
|
int isFirstSessionDelayEnabled = AdjustUtils.ConvertBool(adjustConfig.IsFirstSessionDelayEnabled);
|
|
int shouldUseSubdomains = AdjustUtils.ConvertBool(adjustConfig.ShouldUseSubdomains);
|
|
int isDataResidency = AdjustUtils.ConvertBool(adjustConfig.IsDataResidency);
|
|
appAttributionCallback = adjustConfig.AttributionChangedDelegate;
|
|
appEventSuccessCallback = adjustConfig.EventSuccessDelegate;
|
|
appEventFailureCallback = adjustConfig.EventFailureDelegate;
|
|
appSessionSuccessCallback = adjustConfig.SessionSuccessDelegate;
|
|
appSessionFailureCallback = adjustConfig.SessionFailureDelegate;
|
|
appDeferredDeeplinkCallback = adjustConfig.DeferredDeeplinkDelegate;
|
|
appSkanUpdatedCallback = adjustConfig.SkanUpdatedDelegate;
|
|
|
|
_AdjustInitSdk(
|
|
appToken,
|
|
environment,
|
|
sdkPrefix,
|
|
defaultTracker,
|
|
externalDeviceId,
|
|
stringJsonUrlStrategyDomains,
|
|
storeName,
|
|
storeAppId,
|
|
allowSuppressLogLevel,
|
|
logLevel,
|
|
attConsentWaitingInterval,
|
|
eventDeduplicationIdsMaxSize,
|
|
shouldUseSubdomains,
|
|
isCoppaComplianceEnabled,
|
|
isDataResidency,
|
|
isSendingInBackgroundEnabled,
|
|
isAdServicesEnabled,
|
|
isIdfaReadingEnabled,
|
|
isIdfvReadingEnabled,
|
|
isSkanAttributionEnabled,
|
|
isLinkMeEnabled,
|
|
isCostDataInAttributionEnabled,
|
|
isDeviceIdsReadingOnceEnabled,
|
|
isAppTrackingTransparencyUsageEnabled,
|
|
isFirstSessionDelayEnabled,
|
|
isDeferredDeeplinkOpeningEnabled,
|
|
AttributionCallbackMonoPInvoke,
|
|
EventSuccessCallbackMonoPInvoke,
|
|
EventFailureCallbackMonoPInvoke,
|
|
SessionSuccessCallbackMonoPInvoke,
|
|
SessionFailureCallbackMonoPInvoke,
|
|
DeferredDeeplinkCallbackMonoPInvoke,
|
|
SkanUpdatedCallbackMonoPInvoke);
|
|
}
|
|
|
|
public static void TrackEvent(AdjustEvent adjustEvent)
|
|
{
|
|
double revenue = AdjustUtils.ConvertDouble(adjustEvent.Revenue);
|
|
string eventToken = adjustEvent.EventToken;
|
|
string currency = adjustEvent.Currency;
|
|
string productId = adjustEvent.ProductId;
|
|
string transactionId = adjustEvent.TransactionId;
|
|
string callbackId = adjustEvent.CallbackId;
|
|
string deduplicationId = adjustEvent.DeduplicationId;
|
|
string stringJsonCallbackParameters = AdjustUtils.ConvertReadOnlyCollectionOfPairsToJson(adjustEvent.CallbackParameters);
|
|
string stringJsonPartnerParameters = AdjustUtils.ConvertReadOnlyCollectionOfPairsToJson(adjustEvent.PartnerParameters);
|
|
|
|
_AdjustTrackEvent(
|
|
eventToken,
|
|
revenue,
|
|
currency,
|
|
productId,
|
|
transactionId,
|
|
callbackId,
|
|
deduplicationId,
|
|
stringJsonCallbackParameters,
|
|
stringJsonPartnerParameters);
|
|
}
|
|
|
|
public static void Enable()
|
|
{
|
|
_AdjustEnable();
|
|
}
|
|
|
|
public static void Disable()
|
|
{
|
|
_AdjustDisable();
|
|
}
|
|
|
|
public static void SwitchToOfflineMode()
|
|
{
|
|
_AdjustSwitchToOfflineMode();
|
|
}
|
|
|
|
public static void SwitchBackToOnlineMode()
|
|
{
|
|
_AdjustSwitchBackToOnlineMode();
|
|
}
|
|
|
|
public static void ProcessDeeplink(AdjustDeeplink adjustDeeplink)
|
|
{
|
|
_AdjustProcessDeeplink(adjustDeeplink.Deeplink, adjustDeeplink.Referrer);
|
|
}
|
|
|
|
public static void AddGlobalPartnerParameter(string key, string value)
|
|
{
|
|
_AdjustAddGlobalPartnerParameter(key, value);
|
|
}
|
|
|
|
public static void AddGlobalCallbackParameter(string key, string value)
|
|
{
|
|
_AdjustAddGlobalCallbackParameter(key, value);
|
|
}
|
|
|
|
public static void RemoveGlobalPartnerParameter(string key)
|
|
{
|
|
_AdjustRemoveGlobalPartnerParameter(key);
|
|
}
|
|
|
|
public static void RemoveGlobalCallbackParameter(string key)
|
|
{
|
|
_AdjustRemoveGlobalCallbackParameter(key);
|
|
}
|
|
|
|
public static void RemoveGlobalPartnerParameters()
|
|
{
|
|
_AdjustRemoveGlobalPartnerParameters();
|
|
}
|
|
|
|
public static void RemoveGlobalCallbackParameters()
|
|
{
|
|
_AdjustRemoveGlobalCallbackParameters();
|
|
}
|
|
|
|
public static void TrackAdRevenue(AdjustAdRevenue adRevenue)
|
|
{
|
|
string source = adRevenue.Source;
|
|
double revenue = AdjustUtils.ConvertDouble(adRevenue.Revenue);
|
|
string currency = adRevenue.Currency;
|
|
int adImpressionsCount = AdjustUtils.ConvertInt(adRevenue.AdImpressionsCount);
|
|
string adRevenueNetwork = adRevenue.AdRevenueNetwork;
|
|
string adRevenueUnit = adRevenue.AdRevenueUnit;
|
|
string adRevenuePlacement = adRevenue.AdRevenuePlacement;
|
|
string stringJsonCallbackParameters = AdjustUtils.ConvertReadOnlyCollectionOfPairsToJson(adRevenue.CallbackParameters);
|
|
string stringJsonPartnerParameters = AdjustUtils.ConvertReadOnlyCollectionOfPairsToJson(adRevenue.PartnerParameters);
|
|
|
|
_AdjustTrackAdRevenue(
|
|
source,
|
|
revenue,
|
|
currency,
|
|
adImpressionsCount,
|
|
adRevenueNetwork,
|
|
adRevenueUnit,
|
|
adRevenuePlacement,
|
|
stringJsonCallbackParameters,
|
|
stringJsonPartnerParameters);
|
|
}
|
|
|
|
public static void TrackAppStoreSubscription(AdjustAppStoreSubscription subscription)
|
|
{
|
|
string price = subscription.Price;
|
|
string currency = subscription.Currency;
|
|
string transactionId = subscription.TransactionId;
|
|
string transactionDate = subscription.TransactionDate;
|
|
string salesRegion = subscription.SalesRegion;
|
|
string stringJsonCallbackParameters = AdjustUtils.ConvertReadOnlyCollectionOfPairsToJson(subscription.CallbackParameters);
|
|
string stringJsonPartnerParameters = AdjustUtils.ConvertReadOnlyCollectionOfPairsToJson(subscription.PartnerParameters);
|
|
|
|
_AdjustTrackAppStoreSubscription(
|
|
price,
|
|
currency,
|
|
transactionId,
|
|
transactionDate,
|
|
salesRegion,
|
|
stringJsonCallbackParameters,
|
|
stringJsonPartnerParameters);
|
|
}
|
|
|
|
public static void TrackThirdPartySharing(AdjustThirdPartySharing thirdPartySharing)
|
|
{
|
|
int enabled = AdjustUtils.ConvertBool(thirdPartySharing.IsEnabled);
|
|
string stringJsonGranularOptions = AdjustUtils.ConvertReadOnlyCollectionOfTripletsToJson(thirdPartySharing.GranularOptions);
|
|
string stringJsonPartnerSharingSettings = AdjustUtils.ConvertReadOnlyCollectionOfTripletsToJson(thirdPartySharing.PartnerSharingSettings);
|
|
|
|
_AdjustTrackThirdPartySharing(
|
|
enabled,
|
|
stringJsonGranularOptions,
|
|
stringJsonPartnerSharingSettings);
|
|
}
|
|
|
|
public static void TrackMeasurementConsent(bool enabled)
|
|
{
|
|
_AdjustTrackMeasurementConsent(AdjustUtils.ConvertBool(enabled));
|
|
}
|
|
|
|
public static void RequestAppTrackingAuthorization(Action<int> callback)
|
|
{
|
|
if (appAttCallbacks == null)
|
|
{
|
|
appAttCallbacks = new List<Action<int>>();
|
|
}
|
|
appAttCallbacks.Add(callback);
|
|
_AdjustRequestAppTrackingAuthorization(AttCallbackMonoPInvoke);
|
|
}
|
|
|
|
public static void UpdateSkanConversionValue(
|
|
int conversionValue,
|
|
string coarseValue,
|
|
bool lockedWindow,
|
|
Action<string> callback)
|
|
{
|
|
appSkanErrorCallback = callback;
|
|
_AdjustUpdateSkanConversionValue(
|
|
conversionValue,
|
|
coarseValue,
|
|
AdjustUtils.ConvertBool(lockedWindow),
|
|
SkanErrorCallbackMonoPInvoke);
|
|
}
|
|
|
|
// TODO: consider making async
|
|
public static int GetAppTrackingAuthorizationStatus()
|
|
{
|
|
return _AdjustGetAppTrackingAuthorizationStatus();
|
|
}
|
|
|
|
public static void SetPushToken(string pushToken)
|
|
{
|
|
_AdjustSetPushToken(pushToken);
|
|
}
|
|
|
|
public static void IsEnabled(Action<bool> callback)
|
|
{
|
|
if (appIsEnabledGetterCallbacks == null)
|
|
{
|
|
appIsEnabledGetterCallbacks = new List<Action<bool>>();
|
|
}
|
|
appIsEnabledGetterCallbacks.Add(callback);
|
|
_AdjustIsEnabled(IsEnabledGetterMonoPInvoke);
|
|
}
|
|
|
|
public static void GetAttribution(Action<AdjustAttribution> callback)
|
|
{
|
|
if (appAttributionGetterCallbacks == null)
|
|
{
|
|
appAttributionGetterCallbacks = new List<Action<AdjustAttribution>>();
|
|
}
|
|
appAttributionGetterCallbacks.Add(callback);
|
|
_AdjustGetAttribution(AttributionGetterMonoPInvoke);
|
|
}
|
|
|
|
public static void GetAdid(Action<string> callback)
|
|
{
|
|
if (appAdidGetterCallbacks == null)
|
|
{
|
|
appAdidGetterCallbacks = new List<Action<string>>();
|
|
}
|
|
appAdidGetterCallbacks.Add(callback);
|
|
_AdjustGetAdid(AdidGetterMonoPInvoke);
|
|
}
|
|
|
|
public static void GetIdfa(Action<string> callback)
|
|
{
|
|
if (appIdfaGetterCallbacks == null)
|
|
{
|
|
appIdfaGetterCallbacks = new List<Action<string>>();
|
|
}
|
|
appIdfaGetterCallbacks.Add(callback);
|
|
_AdjustGetIdfa(IdfaGetterMonoPInvoke);
|
|
}
|
|
|
|
public static void GetIdfv(Action<string> callback)
|
|
{
|
|
if (appIdfvGetterCallbacks == null)
|
|
{
|
|
appIdfvGetterCallbacks = new List<Action<string>>();
|
|
}
|
|
appIdfvGetterCallbacks.Add(callback);
|
|
_AdjustGetIdfv(IdfvGetterMonoPInvoke);
|
|
}
|
|
|
|
public static void GetLastDeeplink(Action<string> callback)
|
|
{
|
|
if (appLastDeeplinkGetterCallbacks == null)
|
|
{
|
|
appLastDeeplinkGetterCallbacks = new List<Action<string>>();
|
|
}
|
|
appLastDeeplinkGetterCallbacks.Add(callback);
|
|
_AdjustGetLastDeeplink(LastDeeplinkGetterMonoPInvoke);
|
|
}
|
|
|
|
public static void GetSdkVersion(Action<string> callback)
|
|
{
|
|
if (appSdkVersionGetterCallbacks == null)
|
|
{
|
|
appSdkVersionGetterCallbacks = new List<Action<string>>();
|
|
}
|
|
appSdkVersionGetterCallbacks.Add(callback);
|
|
_AdjustGetSdkVersion(SdkVersionGetterMonoPInvoke);
|
|
}
|
|
|
|
public static void GdprForgetMe()
|
|
{
|
|
_AdjustGdprForgetMe();
|
|
}
|
|
|
|
public static void VerifyAppStorePurchase(
|
|
AdjustAppStorePurchase purchase,
|
|
Action<AdjustPurchaseVerificationResult> callback)
|
|
{
|
|
string transactionId = purchase.TransactionId;
|
|
string productId = purchase.ProductId;
|
|
|
|
if (appPurchaseVerificationCallbacks == null)
|
|
{
|
|
appPurchaseVerificationCallbacks = new Dictionary<int, Action<AdjustPurchaseVerificationResult>>();
|
|
}
|
|
|
|
int callbackId = ++nextPurchaseVerificationCallbackId;
|
|
appPurchaseVerificationCallbacks[callbackId] = callback;
|
|
|
|
_AdjustVerifyAppStorePurchase(
|
|
transactionId,
|
|
productId,
|
|
callbackId,
|
|
PurchaseVerificationCallbackMonoPInvoke);
|
|
}
|
|
|
|
public static void ProcessAndResolveDeeplink(AdjustDeeplink adjustDeeplink, Action<string> callback)
|
|
{
|
|
appResolvedDeeplinkCallback = callback;
|
|
_AdjustProcessAndResolveDeeplink(adjustDeeplink.Deeplink, ResolvedDeeplinkCallbackMonoPInvoke);
|
|
}
|
|
|
|
public static void VerifyAndTrackAppStorePurchase(
|
|
AdjustEvent adjustEvent,
|
|
Action<AdjustPurchaseVerificationResult> callback)
|
|
{
|
|
double revenue = AdjustUtils.ConvertDouble(adjustEvent.Revenue);
|
|
string eventToken = adjustEvent.EventToken;
|
|
string currency = adjustEvent.Currency;
|
|
string productId = adjustEvent.ProductId;
|
|
string transactionId = adjustEvent.TransactionId;
|
|
string callbackId = adjustEvent.CallbackId;
|
|
string deduplicationId = adjustEvent.DeduplicationId;
|
|
string stringJsonCallbackParameters = AdjustUtils.ConvertReadOnlyCollectionOfPairsToJson(adjustEvent.CallbackParameters);
|
|
string stringJsonPartnerParameters = AdjustUtils.ConvertReadOnlyCollectionOfPairsToJson(adjustEvent.PartnerParameters);
|
|
|
|
if (appVerifyAndTrackCallbacks == null)
|
|
{
|
|
appVerifyAndTrackCallbacks = new Dictionary<int, Action<AdjustPurchaseVerificationResult>>();
|
|
}
|
|
|
|
int verificationCallbackId = ++nextVerifyAndTrackCallbackId;
|
|
appVerifyAndTrackCallbacks[verificationCallbackId] = callback;
|
|
|
|
_AdjustVerifyAndTrackAppStorePurchase(
|
|
eventToken,
|
|
revenue,
|
|
currency,
|
|
productId,
|
|
transactionId,
|
|
callbackId,
|
|
deduplicationId,
|
|
stringJsonCallbackParameters,
|
|
stringJsonPartnerParameters,
|
|
verificationCallbackId,
|
|
VerifyAndTrackCallbackMonoPInvoke);
|
|
}
|
|
|
|
public static void EndFirstSessionDelay()
|
|
{
|
|
_AdjustEndFirstSessionDelay();
|
|
}
|
|
|
|
public static void EnableCoppaComplianceInDelay()
|
|
{
|
|
_AdjustEnableCoppaComplianceInDelay();
|
|
}
|
|
|
|
public static void DisableCoppaComplianceInDelay()
|
|
{
|
|
_AdjustDisableCoppaComplianceInDelay();
|
|
}
|
|
|
|
public static void SetExternalDeviceIdInDelay(string externalDeviceId)
|
|
{
|
|
_AdjustSetExternalDeviceIdInDelay(externalDeviceId);
|
|
}
|
|
|
|
// used for testing only (don't use this in your app)
|
|
public static void SetTestOptions(Dictionary<string, string> testOptions)
|
|
{
|
|
string overwriteUrl = testOptions[AdjustUtils.KeyTestOptionsOverwriteUrl];
|
|
string extraPath = testOptions.ContainsKey(AdjustUtils.KeyTestOptionsExtraPath) ? testOptions[AdjustUtils.KeyTestOptionsExtraPath] : null;
|
|
string idfa = testOptions.ContainsKey(AdjustUtils.KeyTestOptionsIdfa) ? testOptions[AdjustUtils.KeyTestOptionsIdfa] : null;
|
|
long timerIntervalMilis = -1;
|
|
long timerStartMilis = -1;
|
|
long sessionIntMilis = -1;
|
|
long subsessionIntMilis = -1;
|
|
bool teardown = false;
|
|
bool deleteState = false;
|
|
bool noBackoffWait = false;
|
|
bool adServicesFrameworkEnabled = false;
|
|
int attStatus = -1;
|
|
|
|
if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsTimerIntervalInMilliseconds))
|
|
{
|
|
timerIntervalMilis = long.Parse(testOptions[AdjustUtils.KeyTestOptionsTimerIntervalInMilliseconds]);
|
|
}
|
|
if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsTimerStartInMilliseconds))
|
|
{
|
|
timerStartMilis = long.Parse(testOptions[AdjustUtils.KeyTestOptionsTimerStartInMilliseconds]);
|
|
}
|
|
if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsSessionIntervalInMilliseconds))
|
|
{
|
|
sessionIntMilis = long.Parse(testOptions[AdjustUtils.KeyTestOptionsSessionIntervalInMilliseconds]);
|
|
}
|
|
if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsSubsessionIntervalInMilliseconds))
|
|
{
|
|
subsessionIntMilis = long.Parse(testOptions[AdjustUtils.KeyTestOptionsSubsessionIntervalInMilliseconds]);
|
|
}
|
|
if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsTeardown))
|
|
{
|
|
teardown = testOptions[AdjustUtils.KeyTestOptionsTeardown].ToLower() == "true";
|
|
}
|
|
if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsDeleteState))
|
|
{
|
|
deleteState = testOptions[AdjustUtils.KeyTestOptionsDeleteState].ToLower() == "true";
|
|
}
|
|
if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsNoBackoffWait))
|
|
{
|
|
noBackoffWait = testOptions[AdjustUtils.KeyTestOptionsNoBackoffWait].ToLower() == "true";
|
|
}
|
|
if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsAdServicesFrameworkEnabled))
|
|
{
|
|
adServicesFrameworkEnabled = testOptions[AdjustUtils.KeyTestOptionsAdServicesFrameworkEnabled].ToLower() == "true";
|
|
}
|
|
if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsAttStatus))
|
|
{
|
|
attStatus = int.Parse(testOptions[AdjustUtils.KeyTestOptionsAttStatus]);
|
|
}
|
|
|
|
_AdjustSetTestOptions(
|
|
overwriteUrl,
|
|
extraPath,
|
|
timerIntervalMilis,
|
|
timerStartMilis,
|
|
sessionIntMilis,
|
|
subsessionIntMilis,
|
|
AdjustUtils.ConvertBool(teardown),
|
|
AdjustUtils.ConvertBool(deleteState),
|
|
AdjustUtils.ConvertBool(noBackoffWait),
|
|
AdjustUtils.ConvertBool(adServicesFrameworkEnabled),
|
|
attStatus,
|
|
idfa);
|
|
}
|
|
|
|
public static void TrackSubsessionStart(string testingArgument = null)
|
|
{
|
|
if (testingArgument == "test")
|
|
{
|
|
_AdjustTrackSubsessionStart();
|
|
}
|
|
}
|
|
|
|
public static void TrackSubsessionEnd(string testingArgument = null)
|
|
{
|
|
if (testingArgument == "test")
|
|
{
|
|
_AdjustTrackSubsessionEnd();
|
|
}
|
|
}
|
|
|
|
// MonoPInvokeCallback methods as method parameters
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateIsEnabledGetter))]
|
|
private static void IsEnabledGetterMonoPInvoke(bool isEnabled)
|
|
{
|
|
if (appIsEnabledGetterCallbacks == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
foreach (Action<bool> callback in appIsEnabledGetterCallbacks)
|
|
{
|
|
if (callback != null)
|
|
{
|
|
callback.Invoke(isEnabled);
|
|
}
|
|
}
|
|
appIsEnabledGetterCallbacks.Clear();
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateAttributionGetter))]
|
|
private static void AttributionGetterMonoPInvoke(string attribution)
|
|
{
|
|
if (appAttributionGetterCallbacks == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
foreach (Action<AdjustAttribution> callback in appAttributionGetterCallbacks)
|
|
{
|
|
if (callback != null)
|
|
{
|
|
callback.Invoke(new AdjustAttribution(attribution));
|
|
}
|
|
}
|
|
appAttributionGetterCallbacks.Clear();
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateAdidGetter))]
|
|
private static void AdidGetterMonoPInvoke(string adid)
|
|
{
|
|
if (appAdidGetterCallbacks == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
foreach (Action<string> callback in appAdidGetterCallbacks)
|
|
{
|
|
if (callback != null)
|
|
{
|
|
callback.Invoke(adid);
|
|
}
|
|
}
|
|
appAdidGetterCallbacks.Clear();
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateIdfaGetter))]
|
|
private static void IdfaGetterMonoPInvoke(string idfa)
|
|
{
|
|
if (appIdfaGetterCallbacks == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
foreach (Action<string> callback in appIdfaGetterCallbacks)
|
|
{
|
|
if (callback != null)
|
|
{
|
|
callback.Invoke(idfa);
|
|
}
|
|
}
|
|
appIdfaGetterCallbacks.Clear();
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateIdfvGetter))]
|
|
private static void IdfvGetterMonoPInvoke(string idfv)
|
|
{
|
|
if (appIdfvGetterCallbacks == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
foreach (Action<string> callback in appIdfvGetterCallbacks)
|
|
{
|
|
if (callback != null)
|
|
{
|
|
callback.Invoke(idfv);
|
|
}
|
|
}
|
|
appIdfvGetterCallbacks.Clear();
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateLastDeeplinkGetter))]
|
|
private static void LastDeeplinkGetterMonoPInvoke(string lastDeeplink)
|
|
{
|
|
if (appLastDeeplinkGetterCallbacks == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
foreach (Action<string> callback in appLastDeeplinkGetterCallbacks)
|
|
{
|
|
if (callback != null)
|
|
{
|
|
callback.Invoke(lastDeeplink);
|
|
}
|
|
}
|
|
appLastDeeplinkGetterCallbacks.Clear();
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateSdkVersionGetter))]
|
|
private static void SdkVersionGetterMonoPInvoke(string sdkVersion)
|
|
{
|
|
if (appSdkVersionGetterCallbacks == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
foreach (Action<string> callback in appSdkVersionGetterCallbacks)
|
|
{
|
|
if (callback != null)
|
|
{
|
|
callback.Invoke(sdkPrefix + "@" + sdkVersion);
|
|
}
|
|
}
|
|
appSdkVersionGetterCallbacks.Clear();
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateAttCallback))]
|
|
private static void AttCallbackMonoPInvoke(int status)
|
|
{
|
|
if (appAttCallbacks == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
foreach (Action<int> callback in appAttCallbacks)
|
|
{
|
|
if (callback != null)
|
|
{
|
|
callback.Invoke(status);
|
|
}
|
|
}
|
|
appAttCallbacks.Clear();
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegatePurchaseVerificationCallback))]
|
|
private static void PurchaseVerificationCallbackMonoPInvoke(string verificationResult, int callbackId)
|
|
{
|
|
if (appPurchaseVerificationCallbacks == null || !appPurchaseVerificationCallbacks.ContainsKey(callbackId))
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
if (appPurchaseVerificationCallbacks != null && appPurchaseVerificationCallbacks.ContainsKey(callbackId))
|
|
{
|
|
Action<AdjustPurchaseVerificationResult> callback = appPurchaseVerificationCallbacks[callbackId];
|
|
appPurchaseVerificationCallbacks.Remove(callbackId);
|
|
|
|
if (callback != null)
|
|
{
|
|
callback.Invoke(new AdjustPurchaseVerificationResult(verificationResult));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateVerifyAndTrackCallback))]
|
|
private static void VerifyAndTrackCallbackMonoPInvoke(string verificationResult, int callbackId)
|
|
{
|
|
if (appVerifyAndTrackCallbacks == null || !appVerifyAndTrackCallbacks.ContainsKey(callbackId))
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
if (appVerifyAndTrackCallbacks != null && appVerifyAndTrackCallbacks.ContainsKey(callbackId))
|
|
{
|
|
Action<AdjustPurchaseVerificationResult> callback = appVerifyAndTrackCallbacks[callbackId];
|
|
appVerifyAndTrackCallbacks.Remove(callbackId);
|
|
|
|
if (callback != null)
|
|
{
|
|
callback.Invoke(new AdjustPurchaseVerificationResult(verificationResult));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateResolvedDeeplinkCallback))]
|
|
private static void ResolvedDeeplinkCallbackMonoPInvoke(string deeplink)
|
|
{
|
|
if (appResolvedDeeplinkCallback == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
if (appResolvedDeeplinkCallback != null)
|
|
{
|
|
appResolvedDeeplinkCallback.Invoke(deeplink);
|
|
appResolvedDeeplinkCallback = null;
|
|
}
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateSkanErrorCallback))]
|
|
private static void SkanErrorCallbackMonoPInvoke(string error)
|
|
{
|
|
if (appSkanErrorCallback == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
if (appSkanErrorCallback != null)
|
|
{
|
|
appSkanErrorCallback.Invoke(error);
|
|
appSkanErrorCallback = null;
|
|
}
|
|
});
|
|
}
|
|
|
|
// MonoPInvokeCallback methods as subscriptions
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateAttributionCallback))]
|
|
private static void AttributionCallbackMonoPInvoke(string attribution)
|
|
{
|
|
if (appAttributionCallback == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
appAttributionCallback(new AdjustAttribution(attribution));
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateSessionSuccessCallback))]
|
|
private static void SessionSuccessCallbackMonoPInvoke(string sessionSuccess)
|
|
{
|
|
if (appSessionSuccessCallback == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
appSessionSuccessCallback(new AdjustSessionSuccess(sessionSuccess));
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateSessionFailureCallback))]
|
|
private static void SessionFailureCallbackMonoPInvoke(string sessionFailure)
|
|
{
|
|
if (appSessionFailureCallback == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
appSessionFailureCallback(new AdjustSessionFailure(sessionFailure));
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateEventSuccessCallback))]
|
|
private static void EventSuccessCallbackMonoPInvoke(string eventSuccess)
|
|
{
|
|
if (appEventSuccessCallback == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
appEventSuccessCallback(new AdjustEventSuccess(eventSuccess));
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateEventFailureCallback))]
|
|
private static void EventFailureCallbackMonoPInvoke(string eventFailure)
|
|
{
|
|
if (appEventFailureCallback == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
appEventFailureCallback(new AdjustEventFailure(eventFailure));
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateDeferredDeeplinkCallback))]
|
|
private static void DeferredDeeplinkCallbackMonoPInvoke(string deeplink)
|
|
{
|
|
if (appDeferredDeeplinkCallback == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
appDeferredDeeplinkCallback(deeplink);
|
|
});
|
|
}
|
|
|
|
[AOT.MonoPInvokeCallback(typeof(AdjustDelegateSkanUpdatedCallback))]
|
|
private static void SkanUpdatedCallbackMonoPInvoke(string skanData)
|
|
{
|
|
if (appSkanUpdatedCallback == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AdjustThreadDispatcher.RunOnMainThread(() =>
|
|
{
|
|
if (appSkanUpdatedCallback != null)
|
|
{
|
|
appSkanUpdatedCallback.Invoke(AdjustUtils.GetSkanUpdateDataDictionary(skanData));
|
|
}
|
|
});
|
|
}
|
|
}
|
|
#endif
|
|
}
|