2023-12-26 03:52:53 +00:00
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
namespace com.adjust.sdk
|
|
|
|
|
{
|
|
|
|
|
#if UNITY_ANDROID
|
|
|
|
|
public class AdjustAndroid
|
|
|
|
|
{
|
2024-04-16 05:30:31 +00:00
|
|
|
private const string sdkPrefix = "unity4.38.0";
|
2023-12-26 03:52:53 +00:00
|
|
|
private static bool launchDeferredDeeplink = true;
|
|
|
|
|
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 DeferredDeeplinkListener onDeferredDeeplinkListener;
|
|
|
|
|
private static AttributionChangeListener onAttributionChangedListener;
|
|
|
|
|
private static EventTrackingFailedListener onEventTrackingFailedListener;
|
|
|
|
|
private static EventTrackingSucceededListener onEventTrackingSucceededListener;
|
|
|
|
|
private static SessionTrackingFailedListener onSessionTrackingFailedListener;
|
|
|
|
|
private static SessionTrackingSucceededListener onSessionTrackingSucceededListener;
|
|
|
|
|
private static VerificationInfoListener onVerificationInfoListener;
|
2024-04-16 05:30:31 +00:00
|
|
|
private static DeeplinkResolutionListener onDeeplinkResolvedListener;
|
2023-12-26 03:52:53 +00:00
|
|
|
|
|
|
|
|
public static void Start(AdjustConfig adjustConfig)
|
|
|
|
|
{
|
|
|
|
|
// Thank you, Unity 2019.2.0, for breaking this.
|
|
|
|
|
// AndroidJavaObject ajoEnvironment = adjustConfig.environment == AdjustEnvironment.Sandbox ?
|
|
|
|
|
// new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic<AndroidJavaObject>("ENVIRONMENT_SANDBOX") :
|
|
|
|
|
// new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic<AndroidJavaObject>("ENVIRONMENT_PRODUCTION");
|
|
|
|
|
|
|
|
|
|
// Get environment variable.
|
|
|
|
|
string ajoEnvironment = adjustConfig.environment == AdjustEnvironment.Production ? "production" : "sandbox";
|
|
|
|
|
|
|
|
|
|
// Create adjust config object.
|
|
|
|
|
AndroidJavaObject ajoAdjustConfig;
|
|
|
|
|
|
|
|
|
|
// Check if suppress log leve is supported.
|
|
|
|
|
if (adjustConfig.allowSuppressLogLevel != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig = new AndroidJavaObject("com.adjust.sdk.AdjustConfig", ajoCurrentActivity, adjustConfig.appToken, ajoEnvironment, adjustConfig.allowSuppressLogLevel);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig = new AndroidJavaObject("com.adjust.sdk.AdjustConfig", ajoCurrentActivity, adjustConfig.appToken, ajoEnvironment);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if deferred deeplink should be launched by SDK.
|
|
|
|
|
launchDeferredDeeplink = adjustConfig.launchDeferredDeeplink;
|
|
|
|
|
|
|
|
|
|
// Check log level.
|
|
|
|
|
if (adjustConfig.logLevel != null)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoLogLevel;
|
|
|
|
|
if (adjustConfig.logLevel.Value.ToUppercaseString().Equals("SUPPRESS"))
|
|
|
|
|
{
|
|
|
|
|
ajoLogLevel = new AndroidJavaClass("com.adjust.sdk.LogLevel").GetStatic<AndroidJavaObject>("SUPRESS");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ajoLogLevel = new AndroidJavaClass("com.adjust.sdk.LogLevel").GetStatic<AndroidJavaObject>(adjustConfig.logLevel.Value.ToUppercaseString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ajoLogLevel != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setLogLevel", ajoLogLevel);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Set unity SDK prefix.
|
|
|
|
|
ajoAdjustConfig.Call("setSdkPrefix", sdkPrefix);
|
|
|
|
|
|
|
|
|
|
// Check if user has configured the delayed start option.
|
|
|
|
|
if (adjustConfig.delayStart != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setDelayStart", adjustConfig.delayStart);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check event buffering setting.
|
|
|
|
|
if (adjustConfig.eventBufferingEnabled != null)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoIsEnabled = new AndroidJavaObject("java.lang.Boolean", adjustConfig.eventBufferingEnabled.Value);
|
|
|
|
|
ajoAdjustConfig.Call("setEventBufferingEnabled", ajoIsEnabled);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check COPPA setting.
|
|
|
|
|
if (adjustConfig.coppaCompliantEnabled != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setCoppaCompliantEnabled", adjustConfig.coppaCompliantEnabled.Value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check final Android attribution setting.
|
|
|
|
|
if (adjustConfig.finalAndroidAttributionEnabled != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setFinalAttributionEnabled", adjustConfig.finalAndroidAttributionEnabled.Value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check read Android IDs only once.
|
|
|
|
|
if (adjustConfig.readDeviceInfoOnceEnabled != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setReadDeviceInfoOnceEnabled", adjustConfig.readDeviceInfoOnceEnabled.Value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check Play Store Kids Apps setting.
|
|
|
|
|
if (adjustConfig.playStoreKidsAppEnabled != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setPlayStoreKidsAppEnabled", adjustConfig.playStoreKidsAppEnabled.Value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user enabled tracking in the background.
|
|
|
|
|
if (adjustConfig.sendInBackground != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setSendInBackground", adjustConfig.sendInBackground.Value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user wants to get cost data in attribution callback.
|
|
|
|
|
if (adjustConfig.needsCost != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setNeedsCost", adjustConfig.needsCost.Value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user wants to run preinstall campaigns.
|
|
|
|
|
if (adjustConfig.preinstallTrackingEnabled != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setPreinstallTrackingEnabled", adjustConfig.preinstallTrackingEnabled.Value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set custom preinstall file path.
|
|
|
|
|
if (adjustConfig.preinstallFilePath != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setPreinstallFilePath", adjustConfig.preinstallFilePath);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if FB app ID has been set.
|
|
|
|
|
if (adjustConfig.fbAppId != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setFbAppId", adjustConfig.fbAppId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set user agent value.
|
|
|
|
|
if (adjustConfig.userAgent != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setUserAgent", adjustConfig.userAgent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set default process name.
|
|
|
|
|
if (!String.IsNullOrEmpty(adjustConfig.processName))
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setProcessName", adjustConfig.processName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set default tracker token.
|
|
|
|
|
if (adjustConfig.defaultTracker != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setDefaultTracker", adjustConfig.defaultTracker);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set external device identifier.
|
|
|
|
|
if (adjustConfig.externalDeviceId != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setExternalDeviceId", adjustConfig.externalDeviceId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set custom URL strategy.
|
|
|
|
|
if (adjustConfig.urlStrategy != null)
|
|
|
|
|
{
|
|
|
|
|
if (adjustConfig.urlStrategy == AdjustConfig.AdjustUrlStrategyChina)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoUrlStrategyChina = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic<AndroidJavaObject>("URL_STRATEGY_CHINA");
|
|
|
|
|
ajoAdjustConfig.Call("setUrlStrategy", ajoUrlStrategyChina);
|
|
|
|
|
}
|
|
|
|
|
else if (adjustConfig.urlStrategy == AdjustConfig.AdjustUrlStrategyIndia)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoUrlStrategyIndia = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic<AndroidJavaObject>("URL_STRATEGY_INDIA");
|
|
|
|
|
ajoAdjustConfig.Call("setUrlStrategy", ajoUrlStrategyIndia);
|
|
|
|
|
}
|
|
|
|
|
else if (adjustConfig.urlStrategy == AdjustConfig.AdjustUrlStrategyCn)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoUrlStrategyCn = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic<AndroidJavaObject>("URL_STRATEGY_CN");
|
|
|
|
|
ajoAdjustConfig.Call("setUrlStrategy", ajoUrlStrategyCn);
|
|
|
|
|
}
|
|
|
|
|
else if (adjustConfig.urlStrategy == AdjustConfig.AdjustUrlStrategyCnOnly)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoUrlStrategyCnOnly = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic<AndroidJavaObject>("URL_STRATEGY_CN_ONLY");
|
|
|
|
|
ajoAdjustConfig.Call("setUrlStrategy", ajoUrlStrategyCnOnly);
|
|
|
|
|
}
|
|
|
|
|
else if (adjustConfig.urlStrategy == AdjustConfig.AdjustDataResidencyEU)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoDataResidencyEU = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic<AndroidJavaObject>("DATA_RESIDENCY_EU");
|
|
|
|
|
ajoAdjustConfig.Call("setUrlStrategy", ajoDataResidencyEU);
|
|
|
|
|
}
|
|
|
|
|
else if (adjustConfig.urlStrategy == AdjustConfig.AdjustDataResidencyTR)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoDataResidencyTR = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic<AndroidJavaObject>("DATA_RESIDENCY_TR");
|
|
|
|
|
ajoAdjustConfig.Call("setUrlStrategy", ajoDataResidencyTR);
|
|
|
|
|
}
|
|
|
|
|
else if (adjustConfig.urlStrategy == AdjustConfig.AdjustDataResidencyUS)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoDataResidencyUS = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic<AndroidJavaObject>("DATA_RESIDENCY_US");
|
|
|
|
|
ajoAdjustConfig.Call("setUrlStrategy", ajoDataResidencyUS);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set app secret.
|
|
|
|
|
if (IsAppSecretSet(adjustConfig))
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setAppSecret",
|
|
|
|
|
adjustConfig.secretId.Value,
|
|
|
|
|
adjustConfig.info1.Value,
|
|
|
|
|
adjustConfig.info2.Value,
|
|
|
|
|
adjustConfig.info3.Value,
|
|
|
|
|
adjustConfig.info4.Value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set device as known.
|
|
|
|
|
if (adjustConfig.isDeviceKnown.HasValue)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustConfig.Call("setDeviceKnown", adjustConfig.isDeviceKnown.Value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has enabled reading of IMEI and MEID.
|
|
|
|
|
// Obsolete method.
|
|
|
|
|
if (adjustConfig.readImei.HasValue)
|
|
|
|
|
{
|
|
|
|
|
// ajoAdjustConfig.Call("setReadMobileEquipmentIdentity", adjustConfig.readImei.Value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check attribution changed delagate setting.
|
|
|
|
|
if (adjustConfig.attributionChangedDelegate != null)
|
|
|
|
|
{
|
|
|
|
|
onAttributionChangedListener = new AttributionChangeListener(adjustConfig.attributionChangedDelegate);
|
|
|
|
|
ajoAdjustConfig.Call("setOnAttributionChangedListener", onAttributionChangedListener);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check event success delegate setting.
|
|
|
|
|
if (adjustConfig.eventSuccessDelegate != null)
|
|
|
|
|
{
|
|
|
|
|
onEventTrackingSucceededListener = new EventTrackingSucceededListener(adjustConfig.eventSuccessDelegate);
|
|
|
|
|
ajoAdjustConfig.Call("setOnEventTrackingSucceededListener", onEventTrackingSucceededListener);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check event failure delagate setting.
|
|
|
|
|
if (adjustConfig.eventFailureDelegate != null)
|
|
|
|
|
{
|
|
|
|
|
onEventTrackingFailedListener = new EventTrackingFailedListener(adjustConfig.eventFailureDelegate);
|
|
|
|
|
ajoAdjustConfig.Call("setOnEventTrackingFailedListener", onEventTrackingFailedListener);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check session success delegate setting.
|
|
|
|
|
if (adjustConfig.sessionSuccessDelegate != null)
|
|
|
|
|
{
|
|
|
|
|
onSessionTrackingSucceededListener = new SessionTrackingSucceededListener(adjustConfig.sessionSuccessDelegate);
|
|
|
|
|
ajoAdjustConfig.Call("setOnSessionTrackingSucceededListener", onSessionTrackingSucceededListener);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check session failure delegate setting.
|
|
|
|
|
if (adjustConfig.sessionFailureDelegate != null)
|
|
|
|
|
{
|
|
|
|
|
onSessionTrackingFailedListener = new SessionTrackingFailedListener(adjustConfig.sessionFailureDelegate);
|
|
|
|
|
ajoAdjustConfig.Call("setOnSessionTrackingFailedListener", onSessionTrackingFailedListener);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check deferred deeplink delegate setting.
|
|
|
|
|
if (adjustConfig.deferredDeeplinkDelegate != null)
|
|
|
|
|
{
|
|
|
|
|
onDeferredDeeplinkListener = new DeferredDeeplinkListener(adjustConfig.deferredDeeplinkDelegate);
|
|
|
|
|
ajoAdjustConfig.Call("setOnDeeplinkResponseListener", onDeferredDeeplinkListener);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Initialise and start the SDK.
|
|
|
|
|
ajcAdjust.CallStatic("onCreate", ajoAdjustConfig);
|
|
|
|
|
ajcAdjust.CallStatic("onResume");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void TrackEvent(AdjustEvent adjustEvent)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoAdjustEvent = new AndroidJavaObject("com.adjust.sdk.AdjustEvent", adjustEvent.eventToken);
|
|
|
|
|
|
|
|
|
|
// Check if user has set revenue for the event.
|
|
|
|
|
if (adjustEvent.revenue != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustEvent.Call("setRevenue", (double)adjustEvent.revenue, adjustEvent.currency);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has added any callback parameters to the event.
|
|
|
|
|
if (adjustEvent.callbackList != null)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < adjustEvent.callbackList.Count; i += 2)
|
|
|
|
|
{
|
|
|
|
|
string key = adjustEvent.callbackList[i];
|
|
|
|
|
string value = adjustEvent.callbackList[i + 1];
|
|
|
|
|
ajoAdjustEvent.Call("addCallbackParameter", key, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has added any partner parameters to the event.
|
|
|
|
|
if (adjustEvent.partnerList != null)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < adjustEvent.partnerList.Count; i += 2)
|
|
|
|
|
{
|
|
|
|
|
string key = adjustEvent.partnerList[i];
|
|
|
|
|
string value = adjustEvent.partnerList[i + 1];
|
|
|
|
|
ajoAdjustEvent.Call("addPartnerParameter", key, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has added transaction ID to the event.
|
|
|
|
|
if (adjustEvent.transactionId != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustEvent.Call("setOrderId", adjustEvent.transactionId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has added callback ID to the event.
|
|
|
|
|
if (adjustEvent.callbackId != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustEvent.Call("setCallbackId", adjustEvent.callbackId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has added product ID to the event.
|
|
|
|
|
if (adjustEvent.productId != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustEvent.Call("setProductId", adjustEvent.productId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has added purchase token to the event.
|
|
|
|
|
if (adjustEvent.purchaseToken != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustEvent.Call("setPurchaseToken", adjustEvent.purchaseToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Track the event.
|
|
|
|
|
ajcAdjust.CallStatic("trackEvent", ajoAdjustEvent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static bool IsEnabled()
|
|
|
|
|
{
|
|
|
|
|
return ajcAdjust.CallStatic<bool>("isEnabled");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetEnabled(bool enabled)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust.CallStatic("setEnabled", enabled);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetOfflineMode(bool enabled)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust.CallStatic("setOfflineMode", enabled);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SendFirstPackages()
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust.CallStatic("sendFirstPackages");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetDeviceToken(string deviceToken)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust.CallStatic("setPushToken", deviceToken, ajoCurrentActivity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string GetAdid()
|
|
|
|
|
{
|
|
|
|
|
return ajcAdjust.CallStatic<string>("getAdid");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void GdprForgetMe()
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust.CallStatic("gdprForgetMe", ajoCurrentActivity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void DisableThirdPartySharing()
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust.CallStatic("disableThirdPartySharing", ajoCurrentActivity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static AdjustAttribution GetAttribution()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoAttribution = ajcAdjust.CallStatic<AndroidJavaObject>("getAttribution");
|
|
|
|
|
if (null == ajoAttribution)
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AdjustAttribution adjustAttribution = new AdjustAttribution();
|
|
|
|
|
adjustAttribution.trackerName = ajoAttribution.Get<string>(AdjustUtils.KeyTrackerName) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyTrackerName);
|
|
|
|
|
adjustAttribution.trackerToken = ajoAttribution.Get<string>(AdjustUtils.KeyTrackerToken) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyTrackerToken);
|
|
|
|
|
adjustAttribution.network = ajoAttribution.Get<string>(AdjustUtils.KeyNetwork) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyNetwork);
|
|
|
|
|
adjustAttribution.campaign = ajoAttribution.Get<string>(AdjustUtils.KeyCampaign) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyCampaign);
|
|
|
|
|
adjustAttribution.adgroup = ajoAttribution.Get<string>(AdjustUtils.KeyAdgroup) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyAdgroup);
|
|
|
|
|
adjustAttribution.creative = ajoAttribution.Get<string>(AdjustUtils.KeyCreative) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyCreative);
|
|
|
|
|
adjustAttribution.clickLabel = ajoAttribution.Get<string>(AdjustUtils.KeyClickLabel) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyClickLabel);
|
|
|
|
|
adjustAttribution.adid = ajoAttribution.Get<string>(AdjustUtils.KeyAdid) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyAdid);
|
|
|
|
|
adjustAttribution.costType = ajoAttribution.Get<string>(AdjustUtils.KeyCostType) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyCostType);
|
|
|
|
|
AndroidJavaObject ajoCostAmount = ajoAttribution.Get<AndroidJavaObject>(AdjustUtils.KeyCostAmount) == null ?
|
|
|
|
|
null : ajoAttribution.Get<AndroidJavaObject>(AdjustUtils.KeyCostAmount);
|
|
|
|
|
if (ajoCostAmount == null)
|
|
|
|
|
{
|
|
|
|
|
adjustAttribution.costAmount = null;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
double costAmount = ajoCostAmount.Call<double>("doubleValue");
|
|
|
|
|
adjustAttribution.costAmount = costAmount;
|
|
|
|
|
}
|
|
|
|
|
adjustAttribution.costCurrency = ajoAttribution.Get<string>(AdjustUtils.KeyCostCurrency) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyCostCurrency);
|
|
|
|
|
adjustAttribution.fbInstallReferrer = ajoAttribution.Get<string>(AdjustUtils.KeyFbInstallReferrer) == "" ?
|
|
|
|
|
null : ajoAttribution.Get<string>(AdjustUtils.KeyFbInstallReferrer);
|
|
|
|
|
return adjustAttribution;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception) {}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void AddSessionPartnerParameter(string key, string value)
|
|
|
|
|
{
|
|
|
|
|
if (ajcAdjust == null)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust");
|
|
|
|
|
}
|
|
|
|
|
ajcAdjust.CallStatic("addSessionPartnerParameter", key, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void AddSessionCallbackParameter(string key, string value)
|
|
|
|
|
{
|
|
|
|
|
if (ajcAdjust == null)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust");
|
|
|
|
|
}
|
|
|
|
|
ajcAdjust.CallStatic("addSessionCallbackParameter", key, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void RemoveSessionPartnerParameter(string key)
|
|
|
|
|
{
|
|
|
|
|
if (ajcAdjust == null)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust");
|
|
|
|
|
}
|
|
|
|
|
ajcAdjust.CallStatic("removeSessionPartnerParameter", key);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void RemoveSessionCallbackParameter(string key)
|
|
|
|
|
{
|
|
|
|
|
if (ajcAdjust == null)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust");
|
|
|
|
|
}
|
|
|
|
|
ajcAdjust.CallStatic("removeSessionCallbackParameter", key);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void ResetSessionPartnerParameters()
|
|
|
|
|
{
|
|
|
|
|
if (ajcAdjust == null)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust");
|
|
|
|
|
}
|
|
|
|
|
ajcAdjust.CallStatic("resetSessionPartnerParameters");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void ResetSessionCallbackParameters()
|
|
|
|
|
{
|
|
|
|
|
if (ajcAdjust == null)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust");
|
|
|
|
|
}
|
|
|
|
|
ajcAdjust.CallStatic("resetSessionCallbackParameters");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void AppWillOpenUrl(string url)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaClass ajcUri = new AndroidJavaClass("android.net.Uri");
|
|
|
|
|
AndroidJavaObject ajoUri = ajcUri.CallStatic<AndroidJavaObject>("parse", url);
|
|
|
|
|
ajcAdjust.CallStatic("appWillOpenUrl", ajoUri, ajoCurrentActivity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void TrackAdRevenue(string source, string payload)
|
|
|
|
|
{
|
|
|
|
|
if (ajcAdjust == null)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust");
|
|
|
|
|
}
|
|
|
|
|
AndroidJavaObject jsonPayload = new AndroidJavaObject("org.json.JSONObject", payload);
|
|
|
|
|
ajcAdjust.CallStatic("trackAdRevenue", source, jsonPayload);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void TrackAdRevenue(AdjustAdRevenue adRevenue)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoAdjustAdRevenue = new AndroidJavaObject("com.adjust.sdk.AdjustAdRevenue", adRevenue.source);
|
|
|
|
|
|
|
|
|
|
// Check if user has set revenue.
|
|
|
|
|
if (adRevenue.revenue != null)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoRevenue = new AndroidJavaObject("java.lang.Double", adRevenue.revenue);
|
|
|
|
|
ajoAdjustAdRevenue.Call("setRevenue", ajoRevenue, adRevenue.currency);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set ad impressions count.
|
|
|
|
|
if (adRevenue.adImpressionsCount != null)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoAdImpressionsCount = new AndroidJavaObject("java.lang.Integer", adRevenue.adImpressionsCount);
|
|
|
|
|
ajoAdjustAdRevenue.Call("setAdImpressionsCount", ajoAdImpressionsCount);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set ad revenue network.
|
|
|
|
|
if (adRevenue.adRevenueNetwork != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustAdRevenue.Call("setAdRevenueNetwork", adRevenue.adRevenueNetwork);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set ad revenue unit.
|
|
|
|
|
if (adRevenue.adRevenueUnit != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustAdRevenue.Call("setAdRevenueUnit", adRevenue.adRevenueUnit);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has set ad revenue placement.
|
|
|
|
|
if (adRevenue.adRevenuePlacement != null)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustAdRevenue.Call("setAdRevenuePlacement", adRevenue.adRevenuePlacement);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has added any callback parameters.
|
|
|
|
|
if (adRevenue.callbackList != null)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < adRevenue.callbackList.Count; i += 2)
|
|
|
|
|
{
|
|
|
|
|
string key = adRevenue.callbackList[i];
|
|
|
|
|
string value = adRevenue.callbackList[i + 1];
|
|
|
|
|
ajoAdjustAdRevenue.Call("addCallbackParameter", key, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has added any partner parameters.
|
|
|
|
|
if (adRevenue.partnerList != null)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < adRevenue.partnerList.Count; i += 2)
|
|
|
|
|
{
|
|
|
|
|
string key = adRevenue.partnerList[i];
|
|
|
|
|
string value = adRevenue.partnerList[i + 1];
|
|
|
|
|
ajoAdjustAdRevenue.Call("addPartnerParameter", key, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Track ad revenue.
|
|
|
|
|
ajcAdjust.CallStatic("trackAdRevenue", ajoAdjustAdRevenue);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void TrackPlayStoreSubscription(AdjustPlayStoreSubscription subscription)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoSubscription = new AndroidJavaObject("com.adjust.sdk.AdjustPlayStoreSubscription",
|
|
|
|
|
Convert.ToInt64(subscription.price),
|
|
|
|
|
subscription.currency,
|
|
|
|
|
subscription.sku,
|
|
|
|
|
subscription.orderId,
|
|
|
|
|
subscription.signature,
|
|
|
|
|
subscription.purchaseToken);
|
|
|
|
|
|
|
|
|
|
// Check if user has set purchase time for subscription.
|
|
|
|
|
if (subscription.purchaseTime != null)
|
|
|
|
|
{
|
|
|
|
|
ajoSubscription.Call("setPurchaseTime", Convert.ToInt64(subscription.purchaseTime));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has added any callback parameters to the subscription.
|
|
|
|
|
if (subscription.callbackList != null)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < subscription.callbackList.Count; i += 2)
|
|
|
|
|
{
|
|
|
|
|
string key = subscription.callbackList[i];
|
|
|
|
|
string value = subscription.callbackList[i + 1];
|
|
|
|
|
ajoSubscription.Call("addCallbackParameter", key, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if user has added any partner parameters to the subscription.
|
|
|
|
|
if (subscription.partnerList != null)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < subscription.partnerList.Count; i += 2)
|
|
|
|
|
{
|
|
|
|
|
string key = subscription.partnerList[i];
|
|
|
|
|
string value = subscription.partnerList[i + 1];
|
|
|
|
|
ajoSubscription.Call("addPartnerParameter", key, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Track the subscription.
|
|
|
|
|
ajcAdjust.CallStatic("trackPlayStoreSubscription", ajoSubscription);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void TrackThirdPartySharing(AdjustThirdPartySharing thirdPartySharing)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoIsEnabled;
|
|
|
|
|
AndroidJavaObject ajoAdjustThirdPartySharing;
|
|
|
|
|
if (thirdPartySharing.isEnabled != null)
|
|
|
|
|
{
|
|
|
|
|
ajoIsEnabled = new AndroidJavaObject("java.lang.Boolean", thirdPartySharing.isEnabled.Value);
|
|
|
|
|
ajoAdjustThirdPartySharing = new AndroidJavaObject("com.adjust.sdk.AdjustThirdPartySharing", ajoIsEnabled);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
string[] parameters = null;
|
|
|
|
|
ajoAdjustThirdPartySharing = new AndroidJavaObject("com.adjust.sdk.AdjustThirdPartySharing", parameters);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (thirdPartySharing.granularOptions != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (KeyValuePair<string, List<string>> entry in thirdPartySharing.granularOptions)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < entry.Value.Count;)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustThirdPartySharing.Call("addGranularOption", entry.Key, entry.Value[i++], entry.Value[i++]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (thirdPartySharing.partnerSharingSettings != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (KeyValuePair<string, List<string>> entry in thirdPartySharing.partnerSharingSettings)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < entry.Value.Count;)
|
|
|
|
|
{
|
|
|
|
|
ajoAdjustThirdPartySharing.Call("addPartnerSharingSetting", entry.Key, entry.Value[i++], bool.Parse(entry.Value[i++]));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ajcAdjust.CallStatic("trackThirdPartySharing", ajoAdjustThirdPartySharing);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void TrackMeasurementConsent(bool measurementConsent)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust.CallStatic("trackMeasurementConsent", measurementConsent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Android specific methods.
|
|
|
|
|
public static void OnPause()
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust.CallStatic("onPause");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void OnResume()
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust.CallStatic("onResume");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void SetReferrer(string referrer)
|
|
|
|
|
{
|
|
|
|
|
ajcAdjust.CallStatic("setReferrer", referrer, ajoCurrentActivity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void GetGoogleAdId(Action<string> onDeviceIdsRead)
|
|
|
|
|
{
|
|
|
|
|
DeviceIdsReadListener onDeviceIdsReadProxy = new DeviceIdsReadListener(onDeviceIdsRead);
|
|
|
|
|
ajcAdjust.CallStatic("getGoogleAdId", ajoCurrentActivity, onDeviceIdsReadProxy);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string GetAmazonAdId()
|
|
|
|
|
{
|
|
|
|
|
return ajcAdjust.CallStatic<string>("getAmazonAdId", ajoCurrentActivity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string GetSdkVersion()
|
|
|
|
|
{
|
|
|
|
|
string nativeSdkVersion = ajcAdjust.CallStatic<string>("getSdkVersion");
|
|
|
|
|
return sdkPrefix + "@" + nativeSdkVersion;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void VerifyPlayStorePurchase(AdjustPlayStorePurchase purchase, Action<AdjustPurchaseVerificationInfo> verificationInfoCallback)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoPurchase = new AndroidJavaObject("com.adjust.sdk.AdjustPurchase",
|
|
|
|
|
purchase.productId,
|
|
|
|
|
purchase.purchaseToken);
|
|
|
|
|
onVerificationInfoListener = new VerificationInfoListener(verificationInfoCallback);
|
|
|
|
|
|
|
|
|
|
ajcAdjust.CallStatic("verifyPurchase", ajoPurchase, onVerificationInfoListener);
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-16 05:30:31 +00:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-26 03:52:53 +00:00
|
|
|
// Used for testing only.
|
|
|
|
|
public static void SetTestOptions(Dictionary<string, string> testOptions)
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoTestOptions = AdjustUtils.TestOptionsMap2AndroidJavaObject(testOptions, ajoCurrentActivity);
|
|
|
|
|
ajcAdjust.CallStatic("setTestOptions", ajoTestOptions);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Private & helper classes.
|
|
|
|
|
private class AttributionChangeListener : AndroidJavaProxy
|
|
|
|
|
{
|
|
|
|
|
private Action<AdjustAttribution> callback;
|
|
|
|
|
|
|
|
|
|
public AttributionChangeListener(Action<AdjustAttribution> pCallback) : base("com.adjust.sdk.OnAttributionChangedListener")
|
|
|
|
|
{
|
|
|
|
|
this.callback = pCallback;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Method must be lowercase to match Android method signature.
|
|
|
|
|
public void onAttributionChanged(AndroidJavaObject attribution)
|
|
|
|
|
{
|
|
|
|
|
if (callback == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AdjustAttribution adjustAttribution = new AdjustAttribution();
|
|
|
|
|
adjustAttribution.trackerName = attribution.Get<string>(AdjustUtils.KeyTrackerName) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyTrackerName);
|
|
|
|
|
adjustAttribution.trackerToken = attribution.Get<string>(AdjustUtils.KeyTrackerToken) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyTrackerToken);
|
|
|
|
|
adjustAttribution.network = attribution.Get<string>(AdjustUtils.KeyNetwork) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyNetwork);
|
|
|
|
|
adjustAttribution.campaign = attribution.Get<string>(AdjustUtils.KeyCampaign) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyCampaign);
|
|
|
|
|
adjustAttribution.adgroup = attribution.Get<string>(AdjustUtils.KeyAdgroup) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyAdgroup);
|
|
|
|
|
adjustAttribution.creative = attribution.Get<string>(AdjustUtils.KeyCreative) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyCreative);
|
|
|
|
|
adjustAttribution.clickLabel = attribution.Get<string>(AdjustUtils.KeyClickLabel) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyClickLabel);
|
|
|
|
|
adjustAttribution.adid = attribution.Get<string>(AdjustUtils.KeyAdid) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyAdid);
|
|
|
|
|
adjustAttribution.costType = attribution.Get<string>(AdjustUtils.KeyCostType) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyCostType);
|
|
|
|
|
AndroidJavaObject ajoCostAmount = attribution.Get<AndroidJavaObject>(AdjustUtils.KeyCostAmount) == null ?
|
|
|
|
|
null : attribution.Get<AndroidJavaObject>(AdjustUtils.KeyCostAmount);
|
|
|
|
|
if (ajoCostAmount == null)
|
|
|
|
|
{
|
|
|
|
|
adjustAttribution.costAmount = null;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
double costAmount = ajoCostAmount.Call<double>("doubleValue");
|
|
|
|
|
adjustAttribution.costAmount = costAmount;
|
|
|
|
|
}
|
|
|
|
|
adjustAttribution.costCurrency = attribution.Get<string>(AdjustUtils.KeyCostCurrency) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyCostCurrency);
|
|
|
|
|
adjustAttribution.fbInstallReferrer = attribution.Get<string>(AdjustUtils.KeyFbInstallReferrer) == "" ?
|
|
|
|
|
null : attribution.Get<string>(AdjustUtils.KeyFbInstallReferrer);
|
|
|
|
|
callback(adjustAttribution);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private class DeferredDeeplinkListener : AndroidJavaProxy
|
|
|
|
|
{
|
|
|
|
|
private Action<string> callback;
|
|
|
|
|
|
|
|
|
|
public DeferredDeeplinkListener(Action<string> pCallback) : base("com.adjust.sdk.OnDeeplinkResponseListener")
|
|
|
|
|
{
|
|
|
|
|
this.callback = pCallback;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Method must be lowercase to match Android method signature.
|
|
|
|
|
public bool launchReceivedDeeplink(AndroidJavaObject deeplink)
|
|
|
|
|
{
|
|
|
|
|
if (callback == null)
|
|
|
|
|
{
|
|
|
|
|
return launchDeferredDeeplink;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string deeplinkURL = deeplink.Call<string>("toString");
|
|
|
|
|
callback(deeplinkURL);
|
|
|
|
|
return launchDeferredDeeplink;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private class EventTrackingSucceededListener : AndroidJavaProxy
|
|
|
|
|
{
|
|
|
|
|
private Action<AdjustEventSuccess> callback;
|
|
|
|
|
|
|
|
|
|
public EventTrackingSucceededListener(Action<AdjustEventSuccess> pCallback) : base("com.adjust.sdk.OnEventTrackingSucceededListener")
|
|
|
|
|
{
|
|
|
|
|
this.callback = pCallback;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Method must be lowercase to match Android method signature.
|
|
|
|
|
public void onFinishedEventTrackingSucceeded(AndroidJavaObject eventSuccessData)
|
|
|
|
|
{
|
|
|
|
|
if (callback == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (eventSuccessData == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AdjustEventSuccess adjustEventSuccess = new AdjustEventSuccess();
|
|
|
|
|
adjustEventSuccess.Adid = eventSuccessData.Get<string>(AdjustUtils.KeyAdid) == "" ?
|
|
|
|
|
null : eventSuccessData.Get<string>(AdjustUtils.KeyAdid);
|
|
|
|
|
adjustEventSuccess.Message = eventSuccessData.Get<string>(AdjustUtils.KeyMessage) == "" ?
|
|
|
|
|
null : eventSuccessData.Get<string>(AdjustUtils.KeyMessage);
|
|
|
|
|
adjustEventSuccess.Timestamp = eventSuccessData.Get<string>(AdjustUtils.KeyTimestamp) == "" ?
|
|
|
|
|
null : eventSuccessData.Get<string>(AdjustUtils.KeyTimestamp);
|
|
|
|
|
adjustEventSuccess.EventToken = eventSuccessData.Get<string>(AdjustUtils.KeyEventToken) == "" ?
|
|
|
|
|
null : eventSuccessData.Get<string>(AdjustUtils.KeyEventToken);
|
|
|
|
|
adjustEventSuccess.CallbackId = eventSuccessData.Get<string>(AdjustUtils.KeyCallbackId) == "" ?
|
|
|
|
|
null : eventSuccessData.Get<string>(AdjustUtils.KeyCallbackId);
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoJsonResponse = eventSuccessData.Get<AndroidJavaObject>(AdjustUtils.KeyJsonResponse);
|
|
|
|
|
string jsonResponseString = ajoJsonResponse.Call<string>("toString");
|
|
|
|
|
adjustEventSuccess.BuildJsonResponseFromString(jsonResponseString);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
// JSON response reading failed.
|
|
|
|
|
// Native Android SDK should send empty JSON object if none available as of v4.12.5.
|
|
|
|
|
// Native Android SDK added special logic to send Unity friendly values as of v4.15.0.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
callback(adjustEventSuccess);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private class EventTrackingFailedListener : AndroidJavaProxy
|
|
|
|
|
{
|
|
|
|
|
private Action<AdjustEventFailure> callback;
|
|
|
|
|
|
|
|
|
|
public EventTrackingFailedListener(Action<AdjustEventFailure> pCallback) : base("com.adjust.sdk.OnEventTrackingFailedListener")
|
|
|
|
|
{
|
|
|
|
|
this.callback = pCallback;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Method must be lowercase to match Android method signature.
|
|
|
|
|
public void onFinishedEventTrackingFailed(AndroidJavaObject eventFailureData)
|
|
|
|
|
{
|
|
|
|
|
if (callback == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (eventFailureData == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AdjustEventFailure adjustEventFailure = new AdjustEventFailure();
|
|
|
|
|
adjustEventFailure.Adid = eventFailureData.Get<string>(AdjustUtils.KeyAdid) == "" ?
|
|
|
|
|
null : eventFailureData.Get<string>(AdjustUtils.KeyAdid);
|
|
|
|
|
adjustEventFailure.Message = eventFailureData.Get<string>(AdjustUtils.KeyMessage) == "" ?
|
|
|
|
|
null : eventFailureData.Get<string>(AdjustUtils.KeyMessage);
|
|
|
|
|
adjustEventFailure.WillRetry = eventFailureData.Get<bool>(AdjustUtils.KeyWillRetry);
|
|
|
|
|
adjustEventFailure.Timestamp = eventFailureData.Get<string>(AdjustUtils.KeyTimestamp) == "" ?
|
|
|
|
|
null : eventFailureData.Get<string>(AdjustUtils.KeyTimestamp);
|
|
|
|
|
adjustEventFailure.EventToken = eventFailureData.Get<string>(AdjustUtils.KeyEventToken) == "" ?
|
|
|
|
|
null : eventFailureData.Get<string>(AdjustUtils.KeyEventToken);
|
|
|
|
|
adjustEventFailure.CallbackId = eventFailureData.Get<string>(AdjustUtils.KeyCallbackId) == "" ?
|
|
|
|
|
null : eventFailureData.Get<string>(AdjustUtils.KeyCallbackId);
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoJsonResponse = eventFailureData.Get<AndroidJavaObject>(AdjustUtils.KeyJsonResponse);
|
|
|
|
|
string jsonResponseString = ajoJsonResponse.Call<string>("toString");
|
|
|
|
|
adjustEventFailure.BuildJsonResponseFromString(jsonResponseString);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
// JSON response reading failed.
|
|
|
|
|
// Native Android SDK should send empty JSON object if none available as of v4.12.5.
|
|
|
|
|
// Native Android SDK added special logic to send Unity friendly values as of v4.15.0.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
callback(adjustEventFailure);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private class SessionTrackingSucceededListener : AndroidJavaProxy
|
|
|
|
|
{
|
|
|
|
|
private Action<AdjustSessionSuccess> callback;
|
|
|
|
|
|
|
|
|
|
public SessionTrackingSucceededListener(Action<AdjustSessionSuccess> pCallback) : base("com.adjust.sdk.OnSessionTrackingSucceededListener")
|
|
|
|
|
{
|
|
|
|
|
this.callback = pCallback;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Method must be lowercase to match Android method signature.
|
|
|
|
|
public void onFinishedSessionTrackingSucceeded(AndroidJavaObject sessionSuccessData)
|
|
|
|
|
{
|
|
|
|
|
if (callback == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (sessionSuccessData == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AdjustSessionSuccess adjustSessionSuccess = new AdjustSessionSuccess();
|
|
|
|
|
adjustSessionSuccess.Adid = sessionSuccessData.Get<string>(AdjustUtils.KeyAdid) == "" ?
|
|
|
|
|
null : sessionSuccessData.Get<string>(AdjustUtils.KeyAdid);
|
|
|
|
|
adjustSessionSuccess.Message = sessionSuccessData.Get<string>(AdjustUtils.KeyMessage) == "" ?
|
|
|
|
|
null : sessionSuccessData.Get<string>(AdjustUtils.KeyMessage);
|
|
|
|
|
adjustSessionSuccess.Timestamp = sessionSuccessData.Get<string>(AdjustUtils.KeyTimestamp) == "" ?
|
|
|
|
|
null : sessionSuccessData.Get<string>(AdjustUtils.KeyTimestamp);
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoJsonResponse = sessionSuccessData.Get<AndroidJavaObject>(AdjustUtils.KeyJsonResponse);
|
|
|
|
|
string jsonResponseString = ajoJsonResponse.Call<string>("toString");
|
|
|
|
|
adjustSessionSuccess.BuildJsonResponseFromString(jsonResponseString);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
// JSON response reading failed.
|
|
|
|
|
// Native Android SDK should send empty JSON object if none available as of v4.12.5.
|
|
|
|
|
// Native Android SDK added special logic to send Unity friendly values as of v4.15.0.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
callback(adjustSessionSuccess);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private class SessionTrackingFailedListener : AndroidJavaProxy
|
|
|
|
|
{
|
|
|
|
|
private Action<AdjustSessionFailure> callback;
|
|
|
|
|
|
|
|
|
|
public SessionTrackingFailedListener(Action<AdjustSessionFailure> pCallback) : base("com.adjust.sdk.OnSessionTrackingFailedListener")
|
|
|
|
|
{
|
|
|
|
|
this.callback = pCallback;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Method must be lowercase to match Android method signature.
|
|
|
|
|
public void onFinishedSessionTrackingFailed(AndroidJavaObject sessionFailureData)
|
|
|
|
|
{
|
|
|
|
|
if (callback == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (sessionFailureData == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AdjustSessionFailure adjustSessionFailure = new AdjustSessionFailure();
|
|
|
|
|
adjustSessionFailure.Adid = sessionFailureData.Get<string>(AdjustUtils.KeyAdid) == "" ?
|
|
|
|
|
null : sessionFailureData.Get<string>(AdjustUtils.KeyAdid);
|
|
|
|
|
adjustSessionFailure.Message = sessionFailureData.Get<string>(AdjustUtils.KeyMessage) == "" ?
|
|
|
|
|
null : sessionFailureData.Get<string>(AdjustUtils.KeyMessage);
|
|
|
|
|
adjustSessionFailure.WillRetry = sessionFailureData.Get<bool>(AdjustUtils.KeyWillRetry);
|
|
|
|
|
adjustSessionFailure.Timestamp = sessionFailureData.Get<string>(AdjustUtils.KeyTimestamp) == "" ?
|
|
|
|
|
null : sessionFailureData.Get<string>(AdjustUtils.KeyTimestamp);
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
AndroidJavaObject ajoJsonResponse = sessionFailureData.Get<AndroidJavaObject>(AdjustUtils.KeyJsonResponse);
|
|
|
|
|
string jsonResponseString = ajoJsonResponse.Call<string>("toString");
|
|
|
|
|
adjustSessionFailure.BuildJsonResponseFromString(jsonResponseString);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
// JSON response reading failed.
|
|
|
|
|
// Native Android SDK should send empty JSON object if none available as of v4.12.5.
|
|
|
|
|
// Native Android SDK added special logic to send Unity friendly values as of v4.15.0.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
callback(adjustSessionFailure);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private class DeviceIdsReadListener : AndroidJavaProxy
|
|
|
|
|
{
|
|
|
|
|
private Action<string> onPlayAdIdReadCallback;
|
|
|
|
|
|
|
|
|
|
public DeviceIdsReadListener(Action<string> pCallback) : base("com.adjust.sdk.OnDeviceIdsRead")
|
|
|
|
|
{
|
|
|
|
|
this.onPlayAdIdReadCallback = pCallback;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Method must be lowercase to match Android method signature.
|
|
|
|
|
public void onGoogleAdIdRead(string playAdId)
|
|
|
|
|
{
|
|
|
|
|
if (onPlayAdIdReadCallback == null)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.onPlayAdIdReadCallback(playAdId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Handling of null object.
|
|
|
|
|
public void onGoogleAdIdRead(AndroidJavaObject ajoAdId)
|
|
|
|
|
{
|
|
|
|
|
if (ajoAdId == null)
|
|
|
|
|
{
|
|
|
|
|
string adId = null;
|
|
|
|
|
this.onGoogleAdIdRead(adId);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.onGoogleAdIdRead(ajoAdId.Call<string>("toString"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private class VerificationInfoListener : AndroidJavaProxy
|
|
|
|
|
{
|
|
|
|
|
private Action<AdjustPurchaseVerificationInfo> callback;
|
|
|
|
|
|
|
|
|
|
public VerificationInfoListener(Action<AdjustPurchaseVerificationInfo> pCallback) : base("com.adjust.sdk.OnPurchaseVerificationFinishedListener")
|
|
|
|
|
{
|
|
|
|
|
this.callback = pCallback;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void onVerificationFinished(AndroidJavaObject verificationInfo)
|
|
|
|
|
{
|
|
|
|
|
AdjustPurchaseVerificationInfo purchaseVerificationInfo = new AdjustPurchaseVerificationInfo();
|
|
|
|
|
// verification status
|
|
|
|
|
purchaseVerificationInfo.verificationStatus = verificationInfo.Get<string>(AdjustUtils.KeyVerificationStatus);
|
|
|
|
|
// status code
|
|
|
|
|
purchaseVerificationInfo.code = verificationInfo.Get<int>(AdjustUtils.KeyCode);
|
|
|
|
|
// message
|
|
|
|
|
purchaseVerificationInfo.message = verificationInfo.Get<string>(AdjustUtils.KeyMessage);
|
|
|
|
|
|
|
|
|
|
if (callback != null)
|
|
|
|
|
{
|
|
|
|
|
callback(purchaseVerificationInfo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-16 05:30:31 +00:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-26 03:52:53 +00:00
|
|
|
// Private & helper methods.
|
|
|
|
|
private static bool IsAppSecretSet(AdjustConfig adjustConfig)
|
|
|
|
|
{
|
|
|
|
|
return adjustConfig.secretId.HasValue
|
|
|
|
|
&& adjustConfig.info1.HasValue
|
|
|
|
|
&& adjustConfig.info2.HasValue
|
|
|
|
|
&& adjustConfig.info3.HasValue
|
|
|
|
|
&& adjustConfig.info4.HasValue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
}
|