Skip to content

Commit 78f0feb

Browse files
authored
Merge pull request #283 from adjust/v550
Version 5.5.0
2 parents 9d1d9d4 + 107af85 commit 78f0feb

File tree

19 files changed

+610
-130
lines changed

19 files changed

+610
-130
lines changed

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
### Version 5.5.0 (6th December 2025)
2+
#### Added
3+
- Added `getAdidWithTimeout` method to the `Adjust` API to allow retrieving the ADID with a specified timeout. If the value is not obtained in time, null is returned.
4+
- Added `getAttributionWithTimeout` method to the `Adjust` API to allow retrieving the current attribution information with a specified timeout. If the value is not obtained in time, null is returned.
5+
- Added the `resolveLinkWithUrl` method to the `Adjust` API to resolve the underlying Adjust link from other links that wrap Adjust links.
6+
- Added ability to disable the reading of the app set ID. You can do this by calling the `disableAppSetIdReading` method on your `AdjustConfig` instance.
7+
8+
#### Changed
9+
- Updated the Adjust Signature library version to 3.62.0.
10+
11+
#### Native SDKs
12+
- [[email protected]][ios_sdk_v5.5.0]
13+
- [[email protected]][android_sdk_v5.5.0]
14+
15+
---
16+
117
### Version 5.4.4 (23rd October 2025)
218
#### Changed
319
- Updated the Adjust Signature library version to 3.61.0.
@@ -801,6 +817,7 @@ In case you were using beta version of the SDK v5, please switch to the official
801817
[ios_sdk_v5.4.3]: https://github.com/adjust/ios_sdk/tree/v5.4.3
802818
[ios_sdk_v5.4.4]: https://github.com/adjust/ios_sdk/tree/v5.4.4
803819
[ios_sdk_v5.4.6]: https://github.com/adjust/ios_sdk/tree/v5.4.6
820+
[ios_sdk_v5.5.0]: https://github.com/adjust/ios_sdk/tree/v5.5.0
804821

805822
[android_sdk_v4.10.4]: https://github.com/adjust/android_sdk/tree/v4.10.4
806823
[android_sdk_v4.11.0]: https://github.com/adjust/android_sdk/tree/v4.11.0
@@ -847,3 +864,4 @@ In case you were using beta version of the SDK v5, please switch to the official
847864
[android_sdk_v5.4.2]: https://github.com/adjust/android_sdk/tree/v5.4.2
848865
[android_sdk_v5.4.4]: https://github.com/adjust/android_sdk/tree/v5.4.4
849866
[android_sdk_v5.4.5]: https://github.com/adjust/android_sdk/tree/v5.4.5
867+
[android_sdk_v5.5.0]: https://github.com/adjust/android_sdk/tree/v5.5.0

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5.4.4
1+
5.5.0

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@ android {
2727

2828
dependencies {
2929
implementation 'com.facebook.react:react-native:+'
30-
implementation 'com.adjust.sdk:adjust-android:5.4.5'
30+
implementation 'com.adjust.sdk:adjust-android:5.5.0'
3131
}

android/src/main/java/com/adjust/sdk/Adjust.java

Lines changed: 149 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,14 @@ && checkKey(mapConfig, "isDataResidency")) {
283283
}
284284
}
285285

286+
// app set ID reading (Android only)
287+
if (checkKey(mapConfig, "isAppSetIdReadingEnabled")) {
288+
boolean isAppSetIdReadingEnabled = mapConfig.getBoolean("isAppSetIdReadingEnabled");
289+
if (!isAppSetIdReadingEnabled) {
290+
adjustConfig.disableAppSetIdReading();
291+
}
292+
}
293+
286294
// store info
287295
if (checkKey(mapConfig, "storeInfo")) {
288296
ReadableMap storeInfo = mapConfig.getMap("storeInfo");
@@ -603,9 +611,15 @@ public void processDeeplink(final ReadableMap mapDeeplink) {
603611
@ReactMethod
604612
public void processAndResolveDeeplink(final ReadableMap mapDeeplink, final Callback callback) {
605613
if (mapDeeplink == null) {
614+
if (callback != null) {
615+
callback.invoke((String) null);
616+
}
606617
return;
607618
}
608619
if (!checkKey(mapDeeplink, "deeplink")) {
620+
if (callback != null) {
621+
callback.invoke((String) null);
622+
}
609623
return;
610624
}
611625

@@ -622,11 +636,44 @@ public void processAndResolveDeeplink(final ReadableMap mapDeeplink, final Callb
622636
new OnDeeplinkResolvedListener() {
623637
@Override
624638
public void onDeeplinkResolved(String resolvedLink) {
625-
callback.invoke(resolvedLink);
639+
if (callback != null) {
640+
callback.invoke(resolvedLink);
641+
}
626642
}
627643
});
628644
}
629645

646+
@ReactMethod
647+
public void resolveLinkWithUrl(final String url, final ReadableArray resolveUrlSuffixArray, final Callback callback) {
648+
if (url == null) {
649+
if (callback != null) {
650+
callback.invoke((String) null);
651+
}
652+
return;
653+
}
654+
String[] suffixArray = null;
655+
if (resolveUrlSuffixArray != null && resolveUrlSuffixArray.size() > 0) {
656+
int n = resolveUrlSuffixArray.size();
657+
suffixArray = new String[n];
658+
for (int i = 0; i < n; i++) {
659+
suffixArray[i] = resolveUrlSuffixArray.getString(i);
660+
}
661+
}
662+
com.adjust.sdk.AdjustLinkResolution.resolveLink(
663+
url,
664+
suffixArray,
665+
new com.adjust.sdk.AdjustLinkResolution.AdjustLinkResolutionCallback() {
666+
@Override
667+
public void resolvedLinkCallback(Uri resolvedLink) {
668+
if (callback != null) {
669+
String resolvedUrl = resolvedLink != null ? resolvedLink.toString() : null;
670+
callback.invoke(resolvedUrl);
671+
}
672+
}
673+
}
674+
);
675+
}
676+
630677
@ReactMethod
631678
public void setPushToken(final String token) {
632679
com.adjust.sdk.Adjust.setPushToken(token, getReactApplicationContext());
@@ -714,7 +761,9 @@ public void isEnabled(final Callback callback) {
714761
new com.adjust.sdk.OnIsEnabledListener() {
715762
@Override
716763
public void onIsEnabledRead(boolean isEnabled) {
717-
callback.invoke(isEnabled);
764+
if (callback != null) {
765+
callback.invoke(isEnabled);
766+
}
718767
}
719768
});
720769
}
@@ -724,30 +773,104 @@ public void getAttribution(final Callback callback) {
724773
com.adjust.sdk.Adjust.getAttribution(new com.adjust.sdk.OnAttributionReadListener() {
725774
@Override
726775
public void onAttributionRead(AdjustAttribution attribution) {
727-
callback.invoke(AdjustUtil.attributionToMap(attribution));
776+
if (callback != null) {
777+
callback.invoke(AdjustUtil.attributionToMap(attribution));
778+
}
728779
}
729780
});
730781
}
731782

783+
@ReactMethod
784+
public void getAttributionWithTimeout(final ReadableMap timeoutMap, final Callback callback) {
785+
if (timeoutMap == null || !checkKey(timeoutMap, "timeoutInMilliseconds")) {
786+
if (callback != null) {
787+
callback.invoke((WritableMap) null);
788+
}
789+
return;
790+
}
791+
792+
long timeoutInMilliseconds;
793+
try {
794+
timeoutInMilliseconds = (long) timeoutMap.getDouble("timeoutInMilliseconds");
795+
} catch (Exception e) {
796+
if (callback != null) {
797+
callback.invoke((WritableMap) null);
798+
}
799+
return;
800+
}
801+
802+
com.adjust.sdk.Adjust.getAttributionWithTimeout(
803+
getReactApplicationContext(),
804+
timeoutInMilliseconds,
805+
new com.adjust.sdk.OnAttributionReadListener() {
806+
@Override
807+
public void onAttributionRead(AdjustAttribution attribution) {
808+
if (callback != null) {
809+
if (attribution == null) {
810+
callback.invoke((WritableMap) null);
811+
} else {
812+
callback.invoke(AdjustUtil.attributionToMap(attribution));
813+
}
814+
}
815+
}
816+
});
817+
}
818+
732819
@ReactMethod
733820
public void getAdid(final Callback callback) {
734821
com.adjust.sdk.Adjust.getAdid(new com.adjust.sdk.OnAdidReadListener() {
735822
@Override
736823
public void onAdidRead(String adid) {
737-
callback.invoke(adid);
824+
if (callback != null) {
825+
callback.invoke(adid != null ? adid : null);
826+
}
738827
}
739828
});
740829
}
741830

831+
@ReactMethod
832+
public void getAdidWithTimeout(final ReadableMap timeoutMap, final Callback callback) {
833+
if (timeoutMap == null || !checkKey(timeoutMap, "timeoutInMilliseconds")) {
834+
if (callback != null) {
835+
callback.invoke((String) null);
836+
}
837+
return;
838+
}
839+
840+
long timeoutInMilliseconds;
841+
try {
842+
timeoutInMilliseconds = (long) timeoutMap.getDouble("timeoutInMilliseconds");
843+
} catch (Exception e) {
844+
if (callback != null) {
845+
callback.invoke((String) null);
846+
}
847+
return;
848+
}
849+
850+
com.adjust.sdk.Adjust.getAdidWithTimeout(
851+
getReactApplicationContext(),
852+
timeoutInMilliseconds,
853+
new com.adjust.sdk.OnAdidReadListener() {
854+
@Override
855+
public void onAdidRead(String adid) {
856+
if (callback != null) {
857+
callback.invoke(adid != null ? adid : null);
858+
}
859+
}
860+
});
861+
}
862+
742863
@ReactMethod
743864
public void getLastDeeplink(final Callback callback) {
744865
com.adjust.sdk.Adjust.getLastDeeplink(
745866
getReactApplicationContext(),
746867
new OnLastDeeplinkReadListener() {
747868
@Override
748869
public void onLastDeeplinkRead(Uri uri) {
749-
String strUri = (uri != null) ? uri.toString() : "";
750-
callback.invoke(strUri);
870+
if (callback != null) {
871+
String strUri = (uri != null) ? uri.toString() : null;
872+
callback.invoke(strUri);
873+
}
751874
}
752875
});
753876
}
@@ -757,10 +880,12 @@ public void getSdkVersion(final String sdkPrefix, final Callback callback) {
757880
com.adjust.sdk.Adjust.getSdkVersion(new com.adjust.sdk.OnSdkVersionReadListener() {
758881
@Override
759882
public void onSdkVersionRead(String sdkVersion) {
760-
if (sdkVersion == null) {
761-
callback.invoke("");
762-
} else {
763-
callback.invoke(sdkPrefix + "@" + sdkVersion);
883+
if (callback != null) {
884+
if (sdkVersion == null) {
885+
callback.invoke((String) null);
886+
} else {
887+
callback.invoke(sdkPrefix + "@" + sdkVersion);
888+
}
764889
}
765890
}
766891
});
@@ -889,6 +1014,10 @@ public void trackPlayStoreSubscription(final ReadableMap mapEvent) {
8891014
@ReactMethod
8901015
public void verifyPlayStorePurchase(final ReadableMap mapEvent, final Callback callback) {
8911016
if (mapEvent == null) {
1017+
if (callback != null) {
1018+
WritableMap map = Arguments.createMap();
1019+
callback.invoke(map);
1020+
}
8921021
return;
8931022
}
8941023

@@ -934,6 +1063,10 @@ public void onVerificationFinished(AdjustPurchaseVerificationResult verification
9341063
@ReactMethod
9351064
public void verifyAndTrackPlayStorePurchase(final ReadableMap mapEvent, final Callback callback) {
9361065
if (mapEvent == null) {
1066+
if (callback != null) {
1067+
WritableMap map = Arguments.createMap();
1068+
callback.invoke(map);
1069+
}
9371070
return;
9381071
}
9391072

@@ -1068,7 +1201,9 @@ public void getGoogleAdId(final Callback callback) {
10681201
new com.adjust.sdk.OnGoogleAdIdReadListener() {
10691202
@Override
10701203
public void onGoogleAdIdRead(String googleAdId) {
1071-
callback.invoke(googleAdId);
1204+
if (callback != null) {
1205+
callback.invoke(googleAdId);
1206+
}
10721207
}
10731208
});
10741209
}
@@ -1080,7 +1215,9 @@ public void getAmazonAdId(final Callback callback) {
10801215
new com.adjust.sdk.OnAmazonAdIdReadListener() {
10811216
@Override
10821217
public void onAmazonAdIdRead(String amazonAdId) {
1083-
callback.invoke(amazonAdId);
1218+
if (callback != null) {
1219+
callback.invoke(amazonAdId);
1220+
}
10841221
}
10851222
});
10861223
}

example/android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ android {
110110
dependencies {
111111
// The version of react-native is set by the React Native Gradle Plugin
112112
implementation("com.facebook.react:react-android")
113-
implementation("com.adjust.sdk:adjust-android-google-lvl:5.4.4")
113+
implementation("com.adjust.sdk:adjust-android-google-lvl:5.5.0")
114114

115115
if (hermesEnabled.toBoolean()) {
116116
implementation("com.facebook.react:hermes-android")

ext/android/sdk

Submodule sdk updated 45 files

ext/ios/sdk

Submodule sdk updated 51 files

index.d.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ declare module 'react-native-adjust' {
9191
public disableIdfvReading(): void
9292
public disableSkanAttribution(): void
9393
public disableAppTrackingTransparencyUsage(): void
94+
public disableAppSetIdReading(): void
9495
public setEventDeduplicationIdsMaxSize(eventDeduplicationIdsMaxSize: number): void
9596
public setAttConsentWaitingInterval(attConsentWaitingInterval: number): void
9697
public setUrlStrategy(urlStrategyDomains: string[], useSubdomains: boolean, isDataResidency: boolean): void
@@ -227,21 +228,24 @@ declare module 'react-native-adjust' {
227228
getIdfa: (callback: (idfa: string | null) => void) => void
228229
getIdfv: (callback: (idfv: string | null) => void) => void
229230
getGoogleAdId: (callback: (adid: string | null) => void) => void
230-
getAdid: (callback: (adid: string) => void) => void
231+
getAdid: (callback: (adid: string | null) => void) => void
232+
getAdidWithTimeout: (timeoutInMilliseconds: number, callback: (adid: string | null) => void) => void
231233
getAttribution: (callback: (attribution: AdjustAttribution) => void) => void
234+
getAttributionWithTimeout: (timeoutInMilliseconds: number, callback: (attribution: AdjustAttribution | null) => void) => void
232235
getAmazonAdId: (callback: (adid: string | null) => void) => void
233-
getSdkVersion: (callback: (sdkVersion: string) => void) => void
236+
getSdkVersion: (callback: (sdkVersion: string | null) => void) => void
234237
requestAppTrackingAuthorization: (handler: (status: number) => void) => void
235238
updateSkanConversionValue: (conversionValue: number, coarseValue: string, lockWindow: boolean, callback: (error: string | null) => void) => void
236239
getAppTrackingAuthorizationStatus: (callback: (status: number) => void) => void
237240
trackThirdPartySharing: (adjustThirdPartySharing: AdjustThirdPartySharing) => void
238241
trackMeasurementConsent: (measurementConsent: boolean) => void
239-
getLastDeeplink: (callback: (lastDeeplink: string) => void) => void
242+
getLastDeeplink: (callback: (lastDeeplink: string | null) => void) => void
240243
verifyAppStorePurchase: (purchase: AdjustAppStorePurchase, callback: (verificationResult: AdjustPurchaseVerificationResult) => void) => void
241244
verifyAndTrackAppStorePurchase: (adjustEvent: AdjustEvent, callback: (verificationResult: AdjustPurchaseVerificationResult) => void) => void
242245
verifyPlayStorePurchase: (purchase: AdjustPlayStorePurchase, callback: (verificationResult: AdjustPurchaseVerificationResult) => void) => void
243246
verifyAndTrackPlayStorePurchase: (adjustEvent: AdjustEvent, callback: (verificationResult: AdjustPurchaseVerificationResult) => void) => void
244-
processAndResolveDeeplink: (adjustDeeplink: AdjustDeeplink, callback: (resolvedLink: string) => void) => void
247+
processAndResolveDeeplink: (adjustDeeplink: AdjustDeeplink, callback: (resolvedLink: string | null) => void) => void
248+
resolveLinkWithUrl: (url: string, resolveUrlSuffixArray: string[], callback: (resolvedLink: string | null) => void) => void
245249
endFirstSessionDelay: () => void
246250
enableCoppaComplianceInDelay: () => void
247251
disableCoppaComplianceInDelay: () => void

0 commit comments

Comments
 (0)