adjust-icon

SDK v5 migration guide

Before you begin

Here’s what you need to do before updating to SDK v5:

  1. SDK v5 supports SDK signature verification natively. If you currently use the SDK signature library, you need to remove the signature library from your app first.

  2. The minimum supported API versions for SDK v5 have been updated. If your app targets a lower version, you need to update it first.

    • iOS: 12.0
    • Android: 21

Install the SDK

To start using SDK v5, you need to add it as a dependency in your project. To do this, add the following dependency to your pubspec.yaml file:

pubspec.yaml
dependencies:
adjust_sdk: ^5.0.0

Update the initialization method

In SDK v4, the initialization method is Adjust.start. This has been changed to Adjust.initSdk in SDK v5.

Adjust.start(adjustConfig); // v4
Adjust.initSdk(adjustConfig); // v5

Changed APIs

Changed in v5

The following APIs have been changed in SDK v5.

Disable and enable the SDK

In SDK v4, you can enable and disable the SDK by calling Adjust.setEnabled with a bool value.

Adjust.setEnabled(false); // disable SDK
Adjust.setEnabled(true); // enable SDK

In SDK v5, this feature is split into separate commands for clarity.

  • Call Adjust.disable to disable the SDK.
  • Call Adjust.enable to enable the SDK.
Adjust.disable();
Adjust.enable();

Send information in background

In SDK v4, you can set the sendInBackground property on your adjustConfig instance to true to enable the SDK to send information to Adjust while your app is running in the background.

adjustConfig.sendInBackground = true;

In SDK v5, you need to set the isSendingInBackgroundEnabled property on your adjustConfig instance to true to enable the SDK to send information to Adjust while your app is running in the background.

adjustConfig.isSendingInBackgroundEnabled = true;

Preinstalled app measurement

In SDK v4, you can set the preinstallTrackingEnabled property on your adjustConfig instance to true to enable measuring preinstalled apps.

adjustConfig.preinstallTrackingEnabled = true;

In SDK v5, you need to set the isPreinstallTrackingEnabled property on your adjustConfig instance to true to enable measuring preinstalled apps.

adjustConfig.isPreinstallTrackingEnabled = true;

Disable AdServices information reading

In SDK v4, you can set the allowAdServicesInfoReading property on your adjustConfig instance to false to prevent the Adjust SDK from reading AdServices information.

adjustConfig.allowAdServicesInfoReading = false;

In SDK v5, you need to set the isAdServicesEnabled property on your adjustConfig instance to false to prevent the Adjust SDK from reading AdServices information.

adjustConfig.isAdServicesEnabled = false;

Disable IDFA reading

In SDK v4, you can set the allowIdfaReading property on your adjustConfig instance to false to prevent the Adjust SDK from reading the device’s IDFA.

adjustConfig.allowIdfaReading = false;

In SDK v5, you need to set the isIdfaReadingEnabled property on your adjustConfig instance to false to prevent the Adjust SDK from reading the device’s IDFA.

adjustConfig.isIdfaReadingEnabled = false;

Enable cost data in attribution

In SDK v4, you can set the needsCost property on your adjustConfig instance to true to enable cost data in the device’s attribution information.

adjustConfig.needsCost = true;

In SDK v5, you need to set the isCostDataInAttributionEnabled property on your adjustConfig instance to true to enable cost data in the device’s attribution information.

adjustConfig.isCostDataInAttributionEnabled = true;

Enable LinkMe

In SDK v4, you can set the linkMeEnabled property on your adjustConfig instance to true to enable Adjust LinkMe.

adjustConfig.linkMeEnabled = true;

In SDK v5, you need to set the isLinkMeEnabled property on your adjustConfig instance to true to enable Adjust LinkMe.

adjustConfig.isLinkMeEnabled = true;

Only read device IDs once

In SDK v4, you can set the readDeviceInfoOnceEnabled property on your adjustConfig instance to true to instruct the SDK to only read device IDs once.

adjustConfig.readDeviceInfoOnceEnabled = true;

In SDK v5, you need to set the isDeviceIdsReadingOnceEnabled property on your adjustConfig instance to true to instruct the SDK to only read device IDs once.

adjustConfig.isDeviceIdsReadingOnceEnabled = true;

Offline mode

In SDK v4, you can enable and disable offline mode the SDK by calling Adjust.setOfflineMode with a bool argument.

Adjust.setOfflineMode(true);
Adjust.setOfflineMode(false);

In SDK v5, this feature is split into separate commands for clarity.

  • Call Adjust.switchToOfflineMode to set the SDK to offline mode.
  • Call Adjust.switchBackToOnlineMode to set the SDK back to online mode.
Adjust.switchToOfflineMode(); // Put the SDK in offline mode
Adjust.switchBackToOnlineMode(); // Put the SDK back in online mode

Session callback parameters

In SDK v4, you can add session parameters by passing a key-value pair to the Adjust.addSessionCallbackParameter method and remove individual parameters using the Adjust.removeSessionCallbackParameter method.

Adjust.addSessionCallbackParameter('key', 'value');
Adjust.removeSessionCallbackParameter('key');
Adjust.resetSessionCallbackParameters();

In SDK v5, session parameters are renamed to global parameters.

Adjust.addGlobalCallbackParameter('key', 'value');
Adjust.removeGlobalCallbackParameter('key');
Adjust.removeGlobalCallbackParameters();

Session partner parameters

In SDK v4, you can add session partner parameters by passing a key-value pair to the Adjust.addSessionPartnerParameter method and remove individual parameters using the Adjust.removeSessionPartnerParameter method.

Adjust.addSessionPartnerParameter('key', 'value');
Adjust.removeSessionPartnerParameter('key');
Adjust.resetSessionPartnerParameters();

In SDK v5, session partner parameters are renamed to global partner parameters.

Adjust.addGlobalPartnerParameter('key', 'value');
Adjust.removeGlobalPartnerParameter('key');
Adjust.removeGlobalPartnerParameters();

App Store Subscriptions

In SDK v4, you can set a new subscription by configuring an AdjustAppStoreSubscription object. This object is initialized with four arguments: price, currency, transactionId, and receipt.

AdjustAppStoreSubscription subscription = new AdjustAppStoreSubscription(
price,
currency,
transactionId,
receipt);

In SDK v5, you don’t need to pass the receipt argument as it’s no longer needed for purchase verification.

AdjustAppStoreSubscription subscription = new AdjustAppStoreSubscription(
price,
currency,
transactionId);

App Store Purchases

In SDK v4, you can set a new purchase by configuring an AdjustAppStorePurchase object. This object is initialized with three arguments: receipt, product ID and transaction ID.

AdjustAppStorePurchase purchase = new AdjustAppStorePurchase(receipt, productId, transactionId);

In SDK v5, you don’t need to pass the receipt argument as it’s no longer needed for purchase verification.

AdjustAppStorePurchase purchase = new AdjustAppStorePurchase(productId, transactionId);

Play Store Subscriptions

In SDK v4, you can record the date on which the user purchased a subscription by passing a timestamp to the setPurchaseTime method.

adjustPlayStoreSubscription.setPurchaseTime('purchase-time');

In SDK v5, you need to assign a timestamp to the purchaseTime property on the adjustPlayStoreSubscription instance to record the date on which the user purchased a subscription.

adjustPlayStoreSubscription.purchaseTime = 'purchase-time';

In SDK v4, you can pass your deep link information to the Adjust.appWillOpenUrl method.

Adjust.appWillOpenUrl('url');

In SDK v5, this has been renamed to Adjust.processDeeplink for clarity. A new AdjustDeeplink class has been added for constructing deep links. To process a deep link, instantiate an AdjustDeeplink object with your deep link URL and pass it to the Adjust.processDeeplink method.

Adjust.processDeeplink(new AdjustDeeplink('url'));

In SDK v4, you can set the launchDeferredDeeplink property on your adjustConfig instance to true to enable the SDK to open deep links.

adjustConfig.launchDeferredDeeplink = true;

In SDK v5, you need to set the isDeferredDeeplinkOpeningEnabled property on your adjustConfig instance to true to enable the SDK to open deep links.

adjustConfig.isDeferredDeeplinkOpeningEnabled = true;

In SDK v4, you can resolve a shortened deep link by passing the url to the processDeeplink method.

Adjust.processDeeplink('url').then((resolvedLink) {
// resolvedLink is the unshortened link
};

In SDK v5, you need to send an AdjustDeeplink object initialized with the deep link url. This returns the original unshortened deep link.

Adjust.processAndResolveDeeplink(new AdjustDeeplink('url')).then((resolvedLink) {
// resolvedLink is the unshortened link
};

COPPA compliance

In SDK v4, you can set the coppaCompliantEnabled property on your adjustConfig instance to true to enable COPPA compliance.

adjustConfig.coppaCompliantEnabled = true;

In SDK v5, you need to set the isCoppaComplianceEnabled property on your adjustConfig instance to a true to enable COPPA compliance.

adjustConfig.isCoppaComplianceEnabled = true;

Play Store Kids Apps

In SDK v4, you can mark an app as a Play Store Kids app setting the playStoreKidsAppEnabled property on your adjustConfig instance to true. This property is read during SDK initialization, which means that the value can’t be updated once the SDK is initialized.

adjustConfig.playStoreKidsAppEnabled = true;

In SDK v5, you need to set the isPlayStoreKidsComplianceEnabled property of your adjustConfig instance to true to enable compliance.

adjustConfig.isPlayStoreKidsComplianceEnabled = true;

Set data residency and URL strategy

In SDK v4, URL strategy and data residency domains are defined as constants in the adjustConfig class.

adjustConfig.setUrlStrategy(AdjustConfig.DataResidencyEU);

In SDK v5, you need to pass your chosen domain or domains as an array. You need to also set the following:

  • useSubdomains (bool): Whether the domain should be treated as an Adjust domain. If true, the SDK will prefix the domains with Adjust-specific subdomains. If false, the SDK will use the provided domain as-is, without adding any prefixes.
  • isDataResidency (bool): Whether the domain should be used for data residency.
adjustConfig.setUrlStrategy(['eu.adjust.com'], true, true);

Check the table below to see how to configure your URL strategy in SDK v5.

v4v5 - main and fallback domainv5 - use sub domainsv5 - is Data Residency
adjustConfig.DataResidencyEU'eu.adjust.com'truetrue
adjustConfig.DataResidencyTR'tr.adjust.com'truetrue
adjustConfig.DataResidencyUS'us.adjust.com'truetrue
adjustConfig.UrlStrategyChina'adjust.world', 'adjust.com'truefalse
adjustConfig.UrlStrategyCn'adjust.cn', 'adjust.com'truefalse
adjustConfig.UrlStrategyCnOnly'adjust.cn'truefalse
adjustConfig.UrlStrategyIndia'adjust.net.in', 'adjust.com'truefalse

Examples

India URL strategy
adjustConfig.setUrlStrategy(['adjust.net.in', 'adjust.com'], true, false);
China URL strategy
adjustConfig.setUrlStrategy(['adjust.world', 'adjust.com'], true, false);
China only URL strategy
adjustConfig.setUrlStrategy(['adjust.cn'], true, false);
EU URL strategy
adjustConfig.setUrlStrategy(['eu.adjust.com'], true, true);
Turkey URL strategy
adjustConfig.setUrlStrategy(['tr.adjust.com'], true, true);
US URL strategy
adjustConfig.setUrlStrategy(['us.adjust.com'], true, true);

Record ad revenue

In SDK v4, you can record ad revenue by calling the trackAdRevenue method, passing source and payload as arguments.

Adjust.trackAdRevenue('source', 'payload');

With an updated method in the SDK v4, you can create a new AdjustAdRevenue object with the source and record ad revenue by passing this object to the trackAdRevenueNew method.

AdjustAdRevenue adRevenue = new AdjustAdRevenue('source');
adRevenue.setRevenue(6, 'CAD');
Adjust.trackAdRevenueNew(adRevenue);

In SDK v5, you need to create a new AdjustAdRevenue object with the source and record ad revenue by passing this object to the trackAdRevenue method.

AdjustAdRevenue adRevenue = new AdjustAdRevenue('source');
adRevenue.setRevenue(6, 'CAD');
Adjust.trackAdRevenue(adRevenue);

Send ad revenue from a specific source

In SDK v4, ad revenue sources are defined as constants in the adjustConfig class. In SDK v5, ad revenue sources need to be passed as a string.

AdjustAdRevenue adRevenue = new AdjustAdRevenue(AdjustConfig.AdRevenueSourceAppLovinMAX);
AdjustAdRevenue adRevenue = new AdjustAdRevenue('applovin_max_sdk');
v4v5
adjustConfig.AdRevenueAppLovinMAX'applovin_max_sdk'
adjustConfig.AdRevenueSourceAdMob'admob_sdk'
adjustConfig.AdRevenueSourceIronSource'ironsource_sdk'
adjustConfig.AdRevenueSourceAdMost'admost_sdk'
adjustConfig.AdRevenueSourceUnity'unity_sdk'
adjustConfig.AdRevenueSourceHeliumChartboost'helium_chartboost_sdk'
adjustConfig.AdRevenueSourceADX'adx_sdk'
adjustConfig.AdRevenueSourcePublisher'publisher_sdk'
adjustConfig.AdRevenueSourceTradplus'tradplus_sdk'
adjustConfig.AdRevenueSourceTopOn'topon_sdk'
adjustConfig.AdRevenueSourceMopubNo longer supported

Disable SKAdNetwork communication

In SDK v4, you can prevent the SDK from communicating with SKAdNetwork by calling the adjustConfig.deactivateSKAdNetworkHandling method.

adjustConfig.deactivateSKAdNetworkHandling();

In SDK v5, you need to set the isSkanAttributionEnabled property on your adjustConfig instance to false to disable SKAdNetwork communication.

adjustConfig.isSkanAttributionEnabled = false;

Listen for conversion value updates

In SDK v4, you can use the skad4conversionValueUpdatedCallback property on your adjustConfig to listen for conversion value updates. Before SKAN4, you could use the conversionValueUpdatedCallback property.

// pre-SKAN4 callback
adjustConfig.conversionValueUpdatedCallback = (num? conversionValue) {
};
// SKAN4 callback
adjustConfig.skad4ConversionValueUpdatedCallback = (num? conversionValue, String? coarseValue, bool? lockWindow) {
};

In SDK v5, you need to assig a callback function to the skanUpdatedCallback property of your adjustConfig object.

config.skanUpdatedCallback = (Map<String, String> skanUpdateData) {
print('[Adjust]: Received SKAN update information!');
if (skanUpdateData["conversion_value"] != null) {
print('[Adjust]: Conversion value: ' + skanUpdateData["conversion_value"]!);
}
if (skanUpdateData["coarse_value"] != null) {
print('[Adjust]: Coarse value: ' + skanUpdateData["coarse_value"]!);
}
if (skanUpdateData["lock_window"] != null) {
print('[Adjust]: Lock window: ' + skanUpdateData["lock_window"]!);
}
if (skanUpdateData["error"] != null) {
print('[Adjust]: Error: ' + skanUpdateData["error"]!);
}
};

Update conversion values

In SDK v4, you can use one of these methods to send updated conversion values to Adjust:

Adjust.updateConversionValue(6);
Adjust.updateConversionValueWithErrorCallback(6).then((error) {
// error is present in case it happened
});
Adjust.updateConversionValueWithErrorCallbackSkad4(6, 'coarse-value', true).then((error) {
// error is present in case it happened
});

To update conversion values in SDK v5, use the updateSkanConversionValue method with the following arguments:

  • conversionValue (int): The updated conversion value
  • coarseValue (string): The updated coarse conversion value
  • lockWindow (bool): Whether to send the postback before the conversion window ends
Adjust.updateSkanConversionValue(6, 'coarse-value', true).then((error) {
// error is present in case it happened
});

App Tracking Transparency authorization wrapper

In SDK v4, you can handle changes to a user’s ATT authorization status using the Adjust.requestTrackingAuthorizationWithCompletionHandler method.

Adjust.requestTrackingAuthorizationWithCompletionHandler().then((status) {
print('[Adjust]: Authorization status update!');
switch (status) {
case 0:
print(
'[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusNotDetermined');
break;
case 1:
print(
'[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusRestricted');
break;
case 2:
print(
'[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusDenied');
break;
case 3:
print(
'[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusAuthorized');
break;
}
});

This has been renamed to Adjust.requestAppTrackingAuthorization in SDK v5 for clarity.

Adjust.requestAppTrackingAuthorization().then((status) {
print('[Adjust]: Authorization status update!');
switch (status) {
case 0:
print(
'[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusNotDetermined');
break;
case 1:
print(
'[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusRestricted');
break;
case 2:
print(
'[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusDenied');
break;
case 3:
print(
'[Adjust]: Authorization status update: ATTrackingManagerAuthorizationStatusAuthorized');
break;
}
});

Removed APIs

Removed in v5

The following APIs have been removed in SDK v5.

Event buffering

SDK v4 supports event buffering. This feature stores requests event, ad revenue, push tokens, and other information on a local buffer to send at a later date.

adjustConfig.eventBufferingEnabled = true;

This setting has been removed in SDK v5.

Custom user agent string

SDK v4 supports setting a custom User Agent by assigning a user string agent to theuserAgent property on your adjustConfig instance.

adjustConfig.userAgent = 'custom-user-agent';

This setting has been removed in SDK v5.

Set whether a device is known

In SDK v4, you can set the isDeviceKnown property on your adjustConfig instance to manually inform the SDK whether a device is known.

adjustConfig.isDeviceKnown = true;

This setting has been removed in SDK v5.

Delay SDK start

SDK v4 supports delaying the start of the SDK by setting the delayStart property on your adjustConfig instance a delay. You can set up this delay for up to 10 seconds.

adjustConfig.delayStart = 10;

This setting has been removed in SDK v5 including the Adjust.checkForNewAttStatus method. Calling this method would make SDK stop the delay and continue with its work.

Final Android attribution

In SDK v4, you can set the finalAndroidAttributionEnabled property on your adjustConfig instance to true to deliver final Android attribution.

adjustConfig.finalAndroidAttributionEnabled = true;

This setting has been removed in SDK v5 since now only the final attribution will be delivered through the attribution callback on the Android platform.

AdjustEvent changes

In SDK v4, you can send a receipt to the adjustEvent.receipt property on your adjustEvent for subscriptions and purchases.

adjustEvent.receipt = 'receipt';

This class property has been removed in SDK v5 since it’s no longer needed for purchase verification.

Disable third party sharing globally

In SDK v4, you can call the Adjust.disableThirdPartySharing method to globally disable sharing information with third parties globally.

Adjust.disableThirdPartySharing();

This feature has been removed from SDK v5. In SDK v5, use the Adjust.trackThirdPartySharing method to enable or disable third party sharing.

AdjustThirdPartySharing thirdPartySharing = new AdjustThirdPartySharing(false);
Adjust.trackThirdPartySharing(thirdPartySharing);

Set an App Secret

SDK v4 supports setting an App Secret by calling the setAppSecret method on your AdjustConfig instance to sign the SDK traffic with.

adjustConfig.setAppSecret(secretId, info1, info2, info3, info4);

This setting has been removed in SDK v5.