From 52d7dcbb453495dce298471d9fe312887be287cd Mon Sep 17 00:00:00 2001 From: Shashank Suhane Date: Mon, 20 Nov 2023 10:07:37 +0100 Subject: [PATCH 1/9] feat: add ability to resolve processed deep links --- .../java/com/adjust/sdk/ActivityHandler.java | 21 ++++++++++++++----- .../src/main/java/com/adjust/sdk/Adjust.java | 14 ++++++++++++- .../java/com/adjust/sdk/AdjustInstance.java | 19 ++++++++++------- .../sdk/AdjustResolvedDeeplinkResult.java | 13 ++++++++++++ .../java/com/adjust/sdk/IActivityHandler.java | 2 +- .../sdk/OnDeeplinkResolvedListener.java | 5 +++++ .../java/com/adjust/sdk/ResponseData.java | 1 + .../adjust/sdk/SharedPreferencesManager.java | 14 ++++++++++++- .../sdk/network/ActivityPackageSender.java | 2 ++ .../adjust/testapp/AdjustCommandExecutor.java | 16 ++++++++++++++ 10 files changed, 91 insertions(+), 16 deletions(-) create mode 100644 Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustResolvedDeeplinkResult.java create mode 100644 Adjust/sdk-core/src/main/java/com/adjust/sdk/OnDeeplinkResolvedListener.java diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java index aeaad7951..2f6817d35 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java @@ -16,6 +16,7 @@ import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Handler; +import android.text.TextUtils; import com.adjust.sdk.network.ActivityPackageSender; import com.adjust.sdk.network.IActivityPackageSender; @@ -81,6 +82,7 @@ public class ActivityHandler implements IActivityHandler { private InstallReferrer installReferrer; private InstallReferrerHuawei installReferrerHuawei; private InstallReferrerMeta installReferrerMeta; + private OnDeeplinkResolvedListener cachedDeeplinkResolutionCallback; @Override public void teardown() { @@ -430,11 +432,11 @@ private boolean isEnabledI() { } @Override - public void readOpenUrl(final Uri url, final long clickTime) { + public void readOpenUrl(final Uri url, final OnDeeplinkResolvedListener callback, final long clickTime) { executor.submit(new Runnable() { @Override public void run() { - readOpenUrlI(url, clickTime); + readOpenUrlI(url, callback, clickTime); } }); } @@ -1403,6 +1405,7 @@ private void processCachedDeeplinkI() { SharedPreferencesManager sharedPreferencesManager = SharedPreferencesManager.getDefaultInstance(getContext()); String cachedDeeplinkUrl = sharedPreferencesManager.getDeeplinkUrl(); + OnDeeplinkResolvedListener callback = sharedPreferencesManager.getCachedDeeplinkResolutionCallback(); long cachedDeeplinkClickTime = sharedPreferencesManager.getDeeplinkClickTime(); if (cachedDeeplinkUrl == null) { @@ -1412,7 +1415,7 @@ private void processCachedDeeplinkI() { return; } - readOpenUrl(Uri.parse(cachedDeeplinkUrl), cachedDeeplinkClickTime); + readOpenUrl(Uri.parse(cachedDeeplinkUrl), callback, cachedDeeplinkClickTime); sharedPreferencesManager.removeDeeplink(); } @@ -1520,6 +1523,12 @@ private void launchSdkClickResponseTasksI(SdkClickResponseData sdkClickResponseD if (attributionUpdated) { launchAttributionListenerI(handler); } + + if (!TextUtils.isEmpty(sdkClickResponseData.resolvedDeeplink)) { + if (cachedDeeplinkResolutionCallback != null) { + cachedDeeplinkResolutionCallback.onDeeplinkResolved(new AdjustResolvedDeeplinkResult(sdkClickResponseData.resolvedDeeplink)); + } + } } private void launchSessionResponseTasksI(SessionResponseData sessionResponseData) { @@ -1963,13 +1972,13 @@ private boolean isValidReferrerDetails(final ReferrerDetails referrerDetails) { return referrerDetails.installReferrer.length() != 0; } - private void readOpenUrlI(Uri url, long clickTime) { + private void readOpenUrlI(Uri url, OnDeeplinkResolvedListener callback, long clickTime) { if (!isEnabledI()) { return; } if (Util.isUrlFilteredOut(url)) { - logger.debug("Deep link (" + url.toString() + ") processing skipped"); + logger.debug("Deeplink (" + url.toString() + ") processing skipped"); return; } @@ -1985,6 +1994,8 @@ private void readOpenUrlI(Uri url, long clickTime) { return; } + cachedDeeplinkResolutionCallback = callback; + sdkClickHandler.sendSdkClick(sdkClickPackage); } diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java index b5c417f5c..0e1bc5c07 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java @@ -128,7 +128,19 @@ public static void appWillOpenUrl(Uri url) { */ public static void appWillOpenUrl(Uri url, Context context) { AdjustInstance adjustInstance = Adjust.getDefaultInstance(); - adjustInstance.appWillOpenUrl(url, extractApplicationContext(context)); + adjustInstance.appWillOpenUrl(url, null, extractApplicationContext(context)); + } + + /** + * Process the deep link that has opened an app and potentially get a resolved link. + * + * @param url Deep link URL to process + * @param callback Callback where either resolved or echoed deep link will be sent. + * @param context Application context + */ + public static void processDeeplink(Uri url, OnDeeplinkResolvedListener callback, Context context) { + AdjustInstance adjustInstance = Adjust.getDefaultInstance(); + adjustInstance.appWillOpenUrl(url, callback, extractApplicationContext(context)); } /** diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java index 31fda5602..cf15f14e0 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java @@ -167,16 +167,17 @@ public void appWillOpenUrl(final Uri url) { return; } long clickTime = System.currentTimeMillis(); - activityHandler.readOpenUrl(url, clickTime); + activityHandler.readOpenUrl(url, null, clickTime); } /** - * Called to process deep link. + * Process the deep link that has opened an app and potentially get a resolved link. * - * @param url Deep link URL to process + * @param url Deep link URL to process + * @param callback Callback where either resolved or echoed deep link will be sent. * @param context Application context */ - public void appWillOpenUrl(final Uri url, final Context context) { + public void appWillOpenUrl(final Uri url, final OnDeeplinkResolvedListener callback, final Context context) { // Check for deep link validity. If invalid, return. if (url == null || url.toString().length() == 0) { AdjustFactory.getLogger().warn( @@ -186,11 +187,11 @@ public void appWillOpenUrl(final Uri url, final Context context) { long clickTime = System.currentTimeMillis(); if (!checkActivityHandler("appWillOpenUrl", true)) { - saveDeeplink(url, clickTime, context); + saveDeeplink(url, callback, clickTime, context); return; } - activityHandler.readOpenUrl(url, clickTime); + activityHandler.readOpenUrl(url, callback, clickTime); } /** @@ -632,11 +633,13 @@ private void saveDisableThirdPartySharing(final Context context) { * Save deep link to shared preferences. * * @param deeplink Deeplink Uri object + * @param callback Callback to obtain link resolution result * @param clickTime Time when appWillOpenUrl(Uri, Context) method was called * @param context Application context */ - private void saveDeeplink(final Uri deeplink, final long clickTime, final Context context) { - SharedPreferencesManager.getDefaultInstance(context).saveDeeplink(deeplink, clickTime); + private void saveDeeplink(final Uri deeplink, final OnDeeplinkResolvedListener callback, + final long clickTime, final Context context) { + SharedPreferencesManager.getDefaultInstance(context).saveDeeplink(deeplink, callback, clickTime); } /** diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustResolvedDeeplinkResult.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustResolvedDeeplinkResult.java new file mode 100644 index 000000000..55f9a0241 --- /dev/null +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustResolvedDeeplinkResult.java @@ -0,0 +1,13 @@ +package com.adjust.sdk; + +public class AdjustResolvedDeeplinkResult { + private final String resolvedLink; + + public AdjustResolvedDeeplinkResult(String resolvedLink) { + this.resolvedLink = resolvedLink; + } + + public String getResolvedLink() { + return resolvedLink; + } +} diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java index 858869c0e..96d4fac70 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java @@ -23,7 +23,7 @@ public interface IActivityHandler { boolean isEnabled(); - void readOpenUrl(Uri url, long clickTime); + void readOpenUrl(Uri url, OnDeeplinkResolvedListener callback, long clickTime); boolean updateAttributionI(AdjustAttribution attribution); diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/OnDeeplinkResolvedListener.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/OnDeeplinkResolvedListener.java new file mode 100644 index 000000000..b6834f0ef --- /dev/null +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/OnDeeplinkResolvedListener.java @@ -0,0 +1,5 @@ +package com.adjust.sdk; + +public interface OnDeeplinkResolvedListener { + void onDeeplinkResolved(AdjustResolvedDeeplinkResult result); +} diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/ResponseData.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/ResponseData.java index 2a6857e1b..95a6ea5a9 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/ResponseData.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/ResponseData.java @@ -25,6 +25,7 @@ public class ResponseData { public ActivityPackage activityPackage; public Map sendingParameters; + public String resolvedDeeplink; protected ResponseData() { success = false; diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java index d3209ff03..23c7b86eb 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java @@ -85,6 +85,11 @@ public class SharedPreferencesManager { */ private static SharedPreferencesManager defaultInstance; + /** + * Deeplink resolution callback instance. + */ + private static OnDeeplinkResolvedListener cachedDeeplinkResolutionCallback; + /** * Default constructor. * @@ -384,19 +389,25 @@ public synchronized void removeDisableThirdPartySharing() { remove(PREFS_KEY_DISABLE_THIRD_PARTY_SHARING); } - public synchronized void saveDeeplink(final Uri deeplink, final long clickTime) { + public synchronized void saveDeeplink(final Uri deeplink, final OnDeeplinkResolvedListener deeplinkResolutionCallback, final long clickTime) { if (deeplink == null) { return; } saveString(PREFS_KEY_DEEPLINK_URL, deeplink.toString()); saveLong(PREFS_KEY_DEEPLINK_CLICK_TIME, clickTime); + + cachedDeeplinkResolutionCallback = deeplinkResolutionCallback; } public synchronized String getDeeplinkUrl() { return getString(PREFS_KEY_DEEPLINK_URL); } + public synchronized OnDeeplinkResolvedListener getCachedDeeplinkResolutionCallback() { + return cachedDeeplinkResolutionCallback; + } + public synchronized long getDeeplinkClickTime() { return getLong(PREFS_KEY_DEEPLINK_CLICK_TIME, -1); } @@ -404,6 +415,7 @@ public synchronized long getDeeplinkClickTime() { public synchronized void removeDeeplink() { remove(PREFS_KEY_DEEPLINK_URL); remove(PREFS_KEY_DEEPLINK_CLICK_TIME); + cachedDeeplinkResolutionCallback = null; } /** diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/ActivityPackageSender.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/ActivityPackageSender.java index a90eb9c9f..123bf6a13 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/ActivityPackageSender.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/ActivityPackageSender.java @@ -519,6 +519,8 @@ private void parseResponse(final ResponseData responseData, final String respons attributionJson, responseData.adid, Util.getSdkPrefixPlatform(clientSdk)); + + responseData.resolvedDeeplink = UtilNetworking.extractJsonString(jsonResponse,"resolved_click_url"); } private String buildAndExtractAuthorizationHeader(final Map parameters, diff --git a/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java b/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java index 445a6d18e..0e01852c7 100644 --- a/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java +++ b/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java @@ -14,6 +14,7 @@ import com.adjust.sdk.AdjustEvent; import com.adjust.sdk.AdjustEventFailure; import com.adjust.sdk.AdjustEventSuccess; +import com.adjust.sdk.AdjustResolvedDeeplinkResult; import com.adjust.sdk.AdjustPurchase; import com.adjust.sdk.AdjustPurchaseVerificationResult; import com.adjust.sdk.AdjustSessionFailure; @@ -26,6 +27,7 @@ import com.adjust.sdk.OnDeeplinkResponseListener; import com.adjust.sdk.OnEventTrackingFailedListener; import com.adjust.sdk.OnEventTrackingSucceededListener; +import com.adjust.sdk.OnDeeplinkResolvedListener; import com.adjust.sdk.OnPurchaseVerificationFinishedListener; import com.adjust.sdk.OnSessionTrackingFailedListener; import com.adjust.sdk.OnSessionTrackingSucceededListener; @@ -92,6 +94,7 @@ public void executeCommand(final Command sentCommand) { case "trackAdRevenueV2" : trackAdRevenueV2(); break; case "trackSubscription": trackSubscription(); break; case "verifyPurchase": verifyPurchase(); break; + case "processDeeplink" : processDeeplink(); break; //case "testBegin": testBegin(); break; // case "testEnd": testEnd(); break; } @@ -844,6 +847,19 @@ public void onVerificationFinished(AdjustPurchaseVerificationResult result) { } }); } + + private void processDeeplink() { + String deeplink = command.getFirstParameterValue("deeplink"); + Uri deeplinkUri = Uri.parse(deeplink); + final String localBasePath = basePath; + Adjust.processDeeplink(deeplinkUri, new OnDeeplinkResolvedListener() { + @Override + public void onDeeplinkResolved(AdjustResolvedDeeplinkResult result) { + MainActivity.testLibrary.addInfoToSend("resolved_link", result.getResolvedLink()); + MainActivity.testLibrary.sendInfoToServer(localBasePath); + } + }, context); + } /* private void testBegin() { if (command.containsParameter("teardown")) { From b152091039a0c32640cd7ca197c9566bb08bb84c Mon Sep 17 00:00:00 2001 From: nonelse Date: Mon, 20 Nov 2023 23:34:30 +0100 Subject: [PATCH 2/9] Refac: Remove resolved link result --- .../main/java/com/adjust/sdk/ActivityHandler.java | 2 +- .../adjust/sdk/AdjustResolvedDeeplinkResult.java | 13 ------------- .../com/adjust/sdk/OnDeeplinkResolvedListener.java | 2 +- .../com/adjust/testapp/AdjustCommandExecutor.java | 5 ++--- 4 files changed, 4 insertions(+), 18 deletions(-) delete mode 100644 Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustResolvedDeeplinkResult.java diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java index 2f6817d35..509ed3569 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java @@ -1526,7 +1526,7 @@ private void launchSdkClickResponseTasksI(SdkClickResponseData sdkClickResponseD if (!TextUtils.isEmpty(sdkClickResponseData.resolvedDeeplink)) { if (cachedDeeplinkResolutionCallback != null) { - cachedDeeplinkResolutionCallback.onDeeplinkResolved(new AdjustResolvedDeeplinkResult(sdkClickResponseData.resolvedDeeplink)); + cachedDeeplinkResolutionCallback.onDeeplinkResolved(sdkClickResponseData.resolvedDeeplink); } } } diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustResolvedDeeplinkResult.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustResolvedDeeplinkResult.java deleted file mode 100644 index 55f9a0241..000000000 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustResolvedDeeplinkResult.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.adjust.sdk; - -public class AdjustResolvedDeeplinkResult { - private final String resolvedLink; - - public AdjustResolvedDeeplinkResult(String resolvedLink) { - this.resolvedLink = resolvedLink; - } - - public String getResolvedLink() { - return resolvedLink; - } -} diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/OnDeeplinkResolvedListener.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/OnDeeplinkResolvedListener.java index b6834f0ef..373ef671d 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/OnDeeplinkResolvedListener.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/OnDeeplinkResolvedListener.java @@ -1,5 +1,5 @@ package com.adjust.sdk; public interface OnDeeplinkResolvedListener { - void onDeeplinkResolved(AdjustResolvedDeeplinkResult result); + void onDeeplinkResolved(String resolvedLink); } diff --git a/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java b/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java index 0e01852c7..b5a223bf1 100644 --- a/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java +++ b/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java @@ -14,7 +14,6 @@ import com.adjust.sdk.AdjustEvent; import com.adjust.sdk.AdjustEventFailure; import com.adjust.sdk.AdjustEventSuccess; -import com.adjust.sdk.AdjustResolvedDeeplinkResult; import com.adjust.sdk.AdjustPurchase; import com.adjust.sdk.AdjustPurchaseVerificationResult; import com.adjust.sdk.AdjustSessionFailure; @@ -854,8 +853,8 @@ private void processDeeplink() { final String localBasePath = basePath; Adjust.processDeeplink(deeplinkUri, new OnDeeplinkResolvedListener() { @Override - public void onDeeplinkResolved(AdjustResolvedDeeplinkResult result) { - MainActivity.testLibrary.addInfoToSend("resolved_link", result.getResolvedLink()); + public void onDeeplinkResolved(String resolvedLink) { + MainActivity.testLibrary.addInfoToSend("resolved_link", resolvedLink); MainActivity.testLibrary.sendInfoToServer(localBasePath); } }, context); From 0c13c492abd83215f4f59b3e620a0d96179ec728 Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 21 Nov 2023 11:16:00 +0100 Subject: [PATCH 3/9] refac: change the processDeeplink params order --- Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java | 2 +- .../main/java/com/adjust/testapp/AdjustCommandExecutor.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java index 0e1bc5c07..d4c7d6129 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java @@ -138,7 +138,7 @@ public static void appWillOpenUrl(Uri url, Context context) { * @param callback Callback where either resolved or echoed deep link will be sent. * @param context Application context */ - public static void processDeeplink(Uri url, OnDeeplinkResolvedListener callback, Context context) { + public static void processDeeplink(Uri url, Context context, OnDeeplinkResolvedListener callback) { AdjustInstance adjustInstance = Adjust.getDefaultInstance(); adjustInstance.appWillOpenUrl(url, callback, extractApplicationContext(context)); } diff --git a/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java b/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java index b5a223bf1..307aca300 100644 --- a/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java +++ b/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java @@ -851,13 +851,13 @@ private void processDeeplink() { String deeplink = command.getFirstParameterValue("deeplink"); Uri deeplinkUri = Uri.parse(deeplink); final String localBasePath = basePath; - Adjust.processDeeplink(deeplinkUri, new OnDeeplinkResolvedListener() { + Adjust.processDeeplink(deeplinkUri, context, new OnDeeplinkResolvedListener() { @Override public void onDeeplinkResolved(String resolvedLink) { MainActivity.testLibrary.addInfoToSend("resolved_link", resolvedLink); MainActivity.testLibrary.sendInfoToServer(localBasePath); } - }, context); + }); } /* private void testBegin() { From f861c4b1335ed57b1727ce63d4d675e240fbec83 Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 21 Nov 2023 12:07:21 +0100 Subject: [PATCH 4/9] refac: change deep link resolution callback caching logic --- .../java/com/adjust/sdk/ActivityHandler.java | 36 ++++++++++---- .../src/main/java/com/adjust/sdk/Adjust.java | 4 +- .../java/com/adjust/sdk/AdjustConfig.java | 1 + .../java/com/adjust/sdk/AdjustInstance.java | 48 ++++++++++++++----- .../java/com/adjust/sdk/IActivityHandler.java | 4 +- .../adjust/sdk/SharedPreferencesManager.java | 14 +----- 6 files changed, 72 insertions(+), 35 deletions(-) diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java index 509ed3569..ce2e2a0d9 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java @@ -432,11 +432,21 @@ private boolean isEnabledI() { } @Override - public void readOpenUrl(final Uri url, final OnDeeplinkResolvedListener callback, final long clickTime) { + public void readOpenUrl(final Uri url, final long clickTime) { executor.submit(new Runnable() { @Override public void run() { - readOpenUrlI(url, callback, clickTime); + readOpenUrlI(url, clickTime); + } + }); + } + + public void readOpenUrl(final Uri url, final long clickTime, final OnDeeplinkResolvedListener callback) { + this.cachedDeeplinkResolutionCallback = callback; + executor.submit(new Runnable() { + @Override + public void run() { + readOpenUrlI(url, clickTime); } }); } @@ -862,6 +872,7 @@ public void run(ActivityHandler activityHandler) { logger.info("Default tracker: '%s'", adjustConfig.defaultTracker); } + // push token if (adjustConfig.pushToken != null) { logger.info("Push token: '%s'", adjustConfig.pushToken); if (internalState.hasFirstSdkStartOcurred()) { @@ -880,6 +891,11 @@ public void run(ActivityHandler activityHandler) { } } + // cached deep link resolution callback + if (this.cachedDeeplinkResolutionCallback == null) { + this.cachedDeeplinkResolutionCallback = adjustConfig.cachedDeeplinkResolutionCallback; + } + // GDPR if (internalState.hasFirstSdkStartOcurred()) { SharedPreferencesManager sharedPreferencesManager = SharedPreferencesManager.getDefaultInstance(getContext()); @@ -1405,7 +1421,6 @@ private void processCachedDeeplinkI() { SharedPreferencesManager sharedPreferencesManager = SharedPreferencesManager.getDefaultInstance(getContext()); String cachedDeeplinkUrl = sharedPreferencesManager.getDeeplinkUrl(); - OnDeeplinkResolvedListener callback = sharedPreferencesManager.getCachedDeeplinkResolutionCallback(); long cachedDeeplinkClickTime = sharedPreferencesManager.getDeeplinkClickTime(); if (cachedDeeplinkUrl == null) { @@ -1415,7 +1430,7 @@ private void processCachedDeeplinkI() { return; } - readOpenUrl(Uri.parse(cachedDeeplinkUrl), callback, cachedDeeplinkClickTime); + readOpenUrl(Uri.parse(cachedDeeplinkUrl), cachedDeeplinkClickTime); sharedPreferencesManager.removeDeeplink(); } @@ -1526,7 +1541,14 @@ private void launchSdkClickResponseTasksI(SdkClickResponseData sdkClickResponseD if (!TextUtils.isEmpty(sdkClickResponseData.resolvedDeeplink)) { if (cachedDeeplinkResolutionCallback != null) { - cachedDeeplinkResolutionCallback.onDeeplinkResolved(sdkClickResponseData.resolvedDeeplink); + Runnable runnable = new Runnable() { + @Override + public void run() { + cachedDeeplinkResolutionCallback.onDeeplinkResolved(sdkClickResponseData.resolvedDeeplink); + cachedDeeplinkResolutionCallback = null; + } + }; + handler.post(runnable); } } } @@ -1972,7 +1994,7 @@ private boolean isValidReferrerDetails(final ReferrerDetails referrerDetails) { return referrerDetails.installReferrer.length() != 0; } - private void readOpenUrlI(Uri url, OnDeeplinkResolvedListener callback, long clickTime) { + private void readOpenUrlI(Uri url, long clickTime) { if (!isEnabledI()) { return; } @@ -1994,8 +2016,6 @@ private void readOpenUrlI(Uri url, OnDeeplinkResolvedListener callback, long cli return; } - cachedDeeplinkResolutionCallback = callback; - sdkClickHandler.sendSdkClick(sdkClickPackage); } diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java index d4c7d6129..c92c6137c 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java @@ -128,7 +128,7 @@ public static void appWillOpenUrl(Uri url) { */ public static void appWillOpenUrl(Uri url, Context context) { AdjustInstance adjustInstance = Adjust.getDefaultInstance(); - adjustInstance.appWillOpenUrl(url, null, extractApplicationContext(context)); + adjustInstance.appWillOpenUrl(url, extractApplicationContext(context)); } /** @@ -140,7 +140,7 @@ public static void appWillOpenUrl(Uri url, Context context) { */ public static void processDeeplink(Uri url, Context context, OnDeeplinkResolvedListener callback) { AdjustInstance adjustInstance = Adjust.getDefaultInstance(); - adjustInstance.appWillOpenUrl(url, callback, extractApplicationContext(context)); + adjustInstance.processDeeplink(url, extractApplicationContext(context), callback); } /** diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustConfig.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustConfig.java index 48aaf78e5..c7ff6d844 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustConfig.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustConfig.java @@ -47,6 +47,7 @@ public class AdjustConfig { boolean finalAttributionEnabled; String fbAppId; boolean readDeviceInfoOnceEnabled; + OnDeeplinkResolvedListener cachedDeeplinkResolutionCallback; public static final String ENVIRONMENT_SANDBOX = "sandbox"; public static final String ENVIRONMENT_PRODUCTION = "production"; diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java index cf15f14e0..354636a1f 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java @@ -49,6 +49,8 @@ public PreLaunchActions() { private PreLaunchActions preLaunchActions = new PreLaunchActions(); + private OnDeeplinkResolvedListener cachedDeeplinkResolutionCallback; + /** * Base path for Adjust packages. */ @@ -96,6 +98,7 @@ public void onCreate(final AdjustConfig adjustConfig) { adjustConfig.gdprPath = this.gdprPath; adjustConfig.subscriptionPath = this.subscriptionPath; adjustConfig.purchaseVerificationPath = this.purchaseVerificationPath; + adjustConfig.cachedDeeplinkResolutionCallback = cachedDeeplinkResolutionCallback; activityHandler = AdjustFactory.getActivityHandler(adjustConfig); setSendingReferrersAsNotSent(adjustConfig.context); @@ -167,17 +170,16 @@ public void appWillOpenUrl(final Uri url) { return; } long clickTime = System.currentTimeMillis(); - activityHandler.readOpenUrl(url, null, clickTime); + activityHandler.readOpenUrl(url, clickTime); } /** - * Process the deep link that has opened an app and potentially get a resolved link. + * Called to process deep link. * - * @param url Deep link URL to process - * @param callback Callback where either resolved or echoed deep link will be sent. + * @param url Deep link URL to process * @param context Application context */ - public void appWillOpenUrl(final Uri url, final OnDeeplinkResolvedListener callback, final Context context) { + public void appWillOpenUrl(final Uri url, final Context context) { // Check for deep link validity. If invalid, return. if (url == null || url.toString().length() == 0) { AdjustFactory.getLogger().warn( @@ -187,11 +189,37 @@ public void appWillOpenUrl(final Uri url, final OnDeeplinkResolvedListener callb long clickTime = System.currentTimeMillis(); if (!checkActivityHandler("appWillOpenUrl", true)) { - saveDeeplink(url, callback, clickTime, context); + saveDeeplink(url, clickTime, context); + return; + } + + activityHandler.readOpenUrl(url, clickTime); + } + + /** + * Process the deep link that has opened an app and potentially get a resolved link. + * + * @param url Deep link URL to process + * @param callback Callback where either resolved or echoed deep link will be sent. + * @param context Application context + */ + public void processDeeplink(Uri url, Context context, OnDeeplinkResolvedListener callback) { + // if resolution result is not wanted, fallback to default method + if (callback == null) { + appWillOpenUrl(url, context); + return; + } + + // if deep link processing is triggered prior to SDK being initialized + long clickTime = System.currentTimeMillis(); + if (!checkActivityHandler("processDeeplink", true)) { + saveDeeplink(url, clickTime, context); + this.cachedDeeplinkResolutionCallback = callback; return; } - activityHandler.readOpenUrl(url, callback, clickTime); + // if deep link processing was triggered with SDK being initialized + activityHandler.readOpenUrl(url, clickTime, callback); } /** @@ -633,13 +661,11 @@ private void saveDisableThirdPartySharing(final Context context) { * Save deep link to shared preferences. * * @param deeplink Deeplink Uri object - * @param callback Callback to obtain link resolution result * @param clickTime Time when appWillOpenUrl(Uri, Context) method was called * @param context Application context */ - private void saveDeeplink(final Uri deeplink, final OnDeeplinkResolvedListener callback, - final long clickTime, final Context context) { - SharedPreferencesManager.getDefaultInstance(context).saveDeeplink(deeplink, callback, clickTime); + private void saveDeeplink(final Uri deeplink, final long clickTime, final Context context) { + SharedPreferencesManager.getDefaultInstance(context).saveDeeplink(deeplink, clickTime); } /** diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java index 96d4fac70..5ecfc610a 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java @@ -23,7 +23,9 @@ public interface IActivityHandler { boolean isEnabled(); - void readOpenUrl(Uri url, OnDeeplinkResolvedListener callback, long clickTime); + void readOpenUrl(Uri url, long clickTime); + + void readOpenUrl(Uri url, long clickTime, OnDeeplinkResolvedListener callback); boolean updateAttributionI(AdjustAttribution attribution); diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java index 23c7b86eb..d3209ff03 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java @@ -85,11 +85,6 @@ public class SharedPreferencesManager { */ private static SharedPreferencesManager defaultInstance; - /** - * Deeplink resolution callback instance. - */ - private static OnDeeplinkResolvedListener cachedDeeplinkResolutionCallback; - /** * Default constructor. * @@ -389,25 +384,19 @@ public synchronized void removeDisableThirdPartySharing() { remove(PREFS_KEY_DISABLE_THIRD_PARTY_SHARING); } - public synchronized void saveDeeplink(final Uri deeplink, final OnDeeplinkResolvedListener deeplinkResolutionCallback, final long clickTime) { + public synchronized void saveDeeplink(final Uri deeplink, final long clickTime) { if (deeplink == null) { return; } saveString(PREFS_KEY_DEEPLINK_URL, deeplink.toString()); saveLong(PREFS_KEY_DEEPLINK_CLICK_TIME, clickTime); - - cachedDeeplinkResolutionCallback = deeplinkResolutionCallback; } public synchronized String getDeeplinkUrl() { return getString(PREFS_KEY_DEEPLINK_URL); } - public synchronized OnDeeplinkResolvedListener getCachedDeeplinkResolutionCallback() { - return cachedDeeplinkResolutionCallback; - } - public synchronized long getDeeplinkClickTime() { return getLong(PREFS_KEY_DEEPLINK_CLICK_TIME, -1); } @@ -415,7 +404,6 @@ public synchronized long getDeeplinkClickTime() { public synchronized void removeDeeplink() { remove(PREFS_KEY_DEEPLINK_URL); remove(PREFS_KEY_DEEPLINK_CLICK_TIME); - cachedDeeplinkResolutionCallback = null; } /** From d9c2855148ca7d7f5a84107d75273d245e8cca07 Mon Sep 17 00:00:00 2001 From: ntsk Date: Fri, 18 Feb 2022 18:08:03 +0900 Subject: [PATCH 5/9] feat: Allow attribution to be converted to Map --- .../com/adjust/sdk/AdjustAttribution.java | 19 +++++++++++++++++++ .../adjust/testapp/AdjustCommandExecutor.java | 15 +-------------- .../java/com/adjust/test/TestLibrary.java | 4 ++++ 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustAttribution.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustAttribution.java index 9e0d2c021..d787704c7 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustAttribution.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustAttribution.java @@ -7,6 +7,8 @@ import java.io.ObjectOutputStream; import java.io.ObjectStreamField; import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; /** * Created by pfms on 07/11/14. @@ -102,6 +104,23 @@ public boolean equals(Object other) { return true; } + public Map toMap() { + Map fields = new HashMap<>(); + if (trackerToken != null) fields.put("trackerToken", trackerToken); + if (trackerName != null) fields.put("trackerName", trackerName); + if (network != null) fields.put("network", network); + if (campaign != null) fields.put("campaign", campaign); + if (adgroup != null) fields.put("adgroup", adgroup); + if (creative != null) fields.put("creative", creative); + if (clickLabel != null) fields.put("clickLabel", clickLabel); + if (adid != null) fields.put("adid", adid); + if (costType != null) fields.put("costType", costType); + if (costAmount != null) fields.put("costAmount", costAmount.toString()); + if (costCurrency != null) fields.put("costCurrency", costCurrency); + + return fields; + } + @Override public int hashCode() { int hashCode = 17; diff --git a/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java b/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java index 307aca300..39f1d7280 100644 --- a/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java +++ b/Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java @@ -372,20 +372,7 @@ public boolean launchReceivedDeeplink(Uri deeplink) { public void onAttributionChanged(AdjustAttribution attribution) { Log.d("TestApp", "attribution = " + attribution.toString()); - MainActivity.testLibrary.addInfoToSend("trackerToken", attribution.trackerToken); - MainActivity.testLibrary.addInfoToSend("trackerName", attribution.trackerName); - MainActivity.testLibrary.addInfoToSend("network", attribution.network); - MainActivity.testLibrary.addInfoToSend("campaign", attribution.campaign); - MainActivity.testLibrary.addInfoToSend("adgroup", attribution.adgroup); - MainActivity.testLibrary.addInfoToSend("creative", attribution.creative); - MainActivity.testLibrary.addInfoToSend("clickLabel", attribution.clickLabel); - MainActivity.testLibrary.addInfoToSend("adid", attribution.adid); - MainActivity.testLibrary.addInfoToSend("costType", attribution.costType); - if (attribution.costAmount != null) { - MainActivity.testLibrary.addInfoToSend("costAmount", attribution.costAmount.toString()); - } - MainActivity.testLibrary.addInfoToSend("costCurrency", attribution.costCurrency); - MainActivity.testLibrary.addInfoToSend("fbInstallReferrer", attribution.fbInstallReferrer); + MainActivity.testLibrary.setInfoToSend(attribution.toMap()); MainActivity.testLibrary.sendInfoToServer(localBasePath); } }); diff --git a/Adjust/test-library/src/main/java/com/adjust/test/TestLibrary.java b/Adjust/test-library/src/main/java/com/adjust/test/TestLibrary.java index 4ad54251f..5a85c0c81 100644 --- a/Adjust/test-library/src/main/java/com/adjust/test/TestLibrary.java +++ b/Adjust/test-library/src/main/java/com/adjust/test/TestLibrary.java @@ -154,6 +154,10 @@ public void addInfoToSend(String key, String value) { infoToServer.put(key, value); } + public void setInfoToSend(Map info) { + infoToServer = info; + } + public void sendInfoToServer(final String basePath) { executor.submit(new Runnable() { @Override From 32cd6dc53510b41afe489dc2b5c57fc061a43b27 Mon Sep 17 00:00:00 2001 From: Shashank Suhane Date: Wed, 20 Dec 2023 13:35:47 +0100 Subject: [PATCH 6/9] feat: add `fbInstallReferrer` in Attribution map --- .../sdk-core/src/main/java/com/adjust/sdk/AdjustAttribution.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustAttribution.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustAttribution.java index d787704c7..8846dfc96 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustAttribution.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustAttribution.java @@ -117,6 +117,7 @@ public Map toMap() { if (costType != null) fields.put("costType", costType); if (costAmount != null) fields.put("costAmount", costAmount.toString()); if (costCurrency != null) fields.put("costCurrency", costCurrency); + if (fbInstallReferrer != null) fields.put("fbInstallReferrer", fbInstallReferrer); return fields; } From d76811769bac3f949b024d4bb7249153588b5048 Mon Sep 17 00:00:00 2001 From: Shashank Suhane Date: Thu, 21 Dec 2023 10:07:15 +0100 Subject: [PATCH 7/9] feat: update version number to 4.38.0 --- Adjust/build.gradle | 2 +- Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java | 2 +- Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java | 2 +- Adjust/sdk-plugin-criteo/build.gradle | 2 +- Adjust/sdk-plugin-imei/build.gradle | 2 +- Adjust/sdk-plugin-oaid/build.gradle | 2 +- Adjust/sdk-plugin-samsung-referrer/build.gradle | 2 +- Adjust/sdk-plugin-sociomantic/build.gradle | 2 +- Adjust/sdk-plugin-trademob/build.gradle | 2 +- Adjust/sdk-plugin-vivo-referrer/build.gradle | 2 +- Adjust/sdk-plugin-webbridge/build.gradle | 2 +- Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js | 2 +- Adjust/sdk-plugin-xiaomi-referrer/build.gradle | 2 +- .../androidTest/java/com/adjust/sdk/TestActivityPackage.java | 2 +- VERSION | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Adjust/build.gradle b/Adjust/build.gradle index a48a3e637..6cf33e2fd 100644 --- a/Adjust/build.gradle +++ b/Adjust/build.gradle @@ -9,7 +9,7 @@ ext { coreMinSdkVersion = 9 coreCompileSdkVersion = 34 coreTargetSdkVersion = 34 - coreVersionName = '4.37.1' + coreVersionName = '4.38.0' defaultVersionCode = 1 webbridgeMinSdkVersion = 17 samsungReferrerMinSdkVersion = 18 diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java index c92c6137c..0872f2267 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java @@ -34,7 +34,7 @@ private Adjust() { */ public static synchronized AdjustInstance getDefaultInstance() { @SuppressWarnings("unused") - String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.37.1"; + String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.38.0"; if (defaultInstance == null) { defaultInstance = new AdjustInstance(); diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java index 26b217628..78ac59bbe 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java @@ -30,7 +30,7 @@ public interface Constants { String SCHEME = "https"; String AUTHORITY = "app.adjust.com"; - String CLIENT_SDK = "android4.37.1"; + String CLIENT_SDK = "android4.38.0"; String LOGTAG = "Adjust"; String REFTAG = "reftag"; String INSTALL_REFERRER = "install_referrer"; diff --git a/Adjust/sdk-plugin-criteo/build.gradle b/Adjust/sdk-plugin-criteo/build.gradle index e4698ef2a..16d44845a 100644 --- a/Adjust/sdk-plugin-criteo/build.gradle +++ b/Adjust/sdk-plugin-criteo/build.gradle @@ -30,7 +30,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.37.1' + // implementation 'com.adjust.sdk:adjust-android:4.38.0' } // read local properties diff --git a/Adjust/sdk-plugin-imei/build.gradle b/Adjust/sdk-plugin-imei/build.gradle index 556bb5913..4a1d4d76a 100644 --- a/Adjust/sdk-plugin-imei/build.gradle +++ b/Adjust/sdk-plugin-imei/build.gradle @@ -30,7 +30,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.37.1' + // implementation 'com.adjust.sdk:adjust-android:4.38.0' } // read local properties diff --git a/Adjust/sdk-plugin-oaid/build.gradle b/Adjust/sdk-plugin-oaid/build.gradle index 4438a0acd..b2d0a35d2 100644 --- a/Adjust/sdk-plugin-oaid/build.gradle +++ b/Adjust/sdk-plugin-oaid/build.gradle @@ -33,7 +33,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.37.1' + // implementation 'com.adjust.sdk:adjust-android:4.38.0' implementation 'com.huawei.hms:ads-identifier:3.4.56.300' } diff --git a/Adjust/sdk-plugin-samsung-referrer/build.gradle b/Adjust/sdk-plugin-samsung-referrer/build.gradle index cf68d1acb..4ed49e5b3 100644 --- a/Adjust/sdk-plugin-samsung-referrer/build.gradle +++ b/Adjust/sdk-plugin-samsung-referrer/build.gradle @@ -27,7 +27,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.37.1' + // implementation 'com.adjust.sdk:adjust-android:4.38.0' // Add Samsung referrer lib via Maven. implementation 'store.galaxy.samsung.installreferrer:samsung_galaxystore_install_referrer:3.0.1' diff --git a/Adjust/sdk-plugin-sociomantic/build.gradle b/Adjust/sdk-plugin-sociomantic/build.gradle index 9f1d4d7a4..a2420ae16 100644 --- a/Adjust/sdk-plugin-sociomantic/build.gradle +++ b/Adjust/sdk-plugin-sociomantic/build.gradle @@ -28,7 +28,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.37.1' + // implementation 'com.adjust.sdk:adjust-android:4.38.0' } // read local properties diff --git a/Adjust/sdk-plugin-trademob/build.gradle b/Adjust/sdk-plugin-trademob/build.gradle index 68fee08ad..8ed2c6e4a 100644 --- a/Adjust/sdk-plugin-trademob/build.gradle +++ b/Adjust/sdk-plugin-trademob/build.gradle @@ -28,7 +28,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.37.1' + // implementation 'com.adjust.sdk:adjust-android:4.38.0' } // read local properties diff --git a/Adjust/sdk-plugin-vivo-referrer/build.gradle b/Adjust/sdk-plugin-vivo-referrer/build.gradle index b18739bba..95f1e5e66 100644 --- a/Adjust/sdk-plugin-vivo-referrer/build.gradle +++ b/Adjust/sdk-plugin-vivo-referrer/build.gradle @@ -30,7 +30,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.37.1' + // implementation 'com.adjust.sdk:adjust-android:4.38.0' } // read local properties diff --git a/Adjust/sdk-plugin-webbridge/build.gradle b/Adjust/sdk-plugin-webbridge/build.gradle index 1b9a12b8d..62bff58b9 100644 --- a/Adjust/sdk-plugin-webbridge/build.gradle +++ b/Adjust/sdk-plugin-webbridge/build.gradle @@ -30,7 +30,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.37.1' + // implementation 'com.adjust.sdk:adjust-android:4.38.0' } // read local properties diff --git a/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js b/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js index 326358089..de9aabed8 100644 --- a/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js +++ b/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js @@ -211,7 +211,7 @@ var Adjust = { if (this.adjustConfig) { return this.adjustConfig.getSdkPrefix(); } else { - return 'web-bridge4.37.1'; + return 'web-bridge4.38.0'; } }, diff --git a/Adjust/sdk-plugin-xiaomi-referrer/build.gradle b/Adjust/sdk-plugin-xiaomi-referrer/build.gradle index c85312324..1a7ff4006 100644 --- a/Adjust/sdk-plugin-xiaomi-referrer/build.gradle +++ b/Adjust/sdk-plugin-xiaomi-referrer/build.gradle @@ -31,7 +31,7 @@ dependencies { // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.37.1' + // implementation 'com.adjust.sdk:adjust-android:4.38.0' // Add xiaomi referrer lib via Maven. implementation 'com.miui.referrer:homereferrer:1.0.0.6' diff --git a/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java b/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java index 6bf174450..a3781a2d3 100644 --- a/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java +++ b/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java @@ -53,7 +53,7 @@ public TestActivityPackage(ActivityPackage activityPackage) { // default values appToken = "123456789012"; environment = "sandbox"; - clientSdk = "android4.37.1"; + clientSdk = "android4.38.0"; suffix = ""; attribution = new AdjustAttribution(); playServices = true; diff --git a/VERSION b/VERSION index bc9fffbec..fff125e79 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.37.1 +4.38.0 From 5149999c7e5830c9a68b3425f15c0e185d4718a9 Mon Sep 17 00:00:00 2001 From: Shashank Suhane Date: Thu, 21 Dec 2023 10:23:18 +0100 Subject: [PATCH 8/9] docs: update CHANGELOG --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cc0e43ac..c81f9abe8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +### Version 4.38.0 (21st December 2023) +#### Added +- Added `toMap()` method in `AdjustAttribution` class to get all its field in a `Map` (thanks to @ntsk). +- Added ability to process shortened deep links and provide the unshortened link back as a response. You can achieve this by invoking `processDeeplink(Uri url, Context context, OnDeeplinkResolvedListener callback)` method of the `Adjust` instance. + +--- + ### Version 4.37.1 (11th December 2023) #### Fixed - Added null check for the `OnDeviceIdsRead` callback object passed to `Adjust.getGoogleAdId` method to avoid `NullPointerException`. From cbe9ff71a542ece079efa6b861d0839ad53f88df Mon Sep 17 00:00:00 2001 From: Shashank Suhane <46443728+shashanksu@users.noreply.github.com> Date: Thu, 21 Dec 2023 12:05:40 +0100 Subject: [PATCH 9/9] docs: update CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Uglješa Erceg --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c81f9abe8..419112f17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ### Version 4.38.0 (21st December 2023) #### Added -- Added `toMap()` method in `AdjustAttribution` class to get all its field in a `Map` (thanks to @ntsk). +- Added `toMap()` method to `AdjustAttribution` class to get all its fields in a `Map` (thanks to @ntsk). - Added ability to process shortened deep links and provide the unshortened link back as a response. You can achieve this by invoking `processDeeplink(Uri url, Context context, OnDeeplinkResolvedListener callback)` method of the `Adjust` instance. ---