The Adjust SDK contains features that you can use to handle user privacy in your app.
Send right to be forgotten request
The EU’s General Data Protection Regulation (GDPR) and similar privacy laws worldwide (CCPA, LGPD, etc.) grant data subjects comprehensive rights when it comes to the processing of their personal data. These rights include, among others, the right to erasure (see Art. 17 GDPR)(1). As a data processor, Adjust is obliged to support you (the data controller) in the processing of such requests from your (app) users.
You can send the user’s erasure request to Adjust by calling the Adjust2dx::gdprForgetMe() method. Once Adjust has been notified:
- Adjust will permanently delete all of the user’s historical personal data from its internal systems and database.
- Adjust will no longer receive data from this user/device via the Adjust SDK.(2)
Adjust2dx::gdprForgetMe();Set up apps for children
If your app targets the “Kids” category, you MUST prevent your app from collecting device identifiers. To do this:
-
(Android only): Remove the
com.google.android.gms.permission.AD_IDpermission by adding the following to yourAndroidManifest.xmlfile:<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/> -
(iOS only): Ensure that you unlink the
AdSupport.frameworkandAppTrackingTransparency.frameworkframeworks from your project.
Configure COPPA compliance
If your app falls under a category that needs to be compliant with the Children’s Online Privacy Protection Act (COPPA), you MUST call the enableCoppaCompliance method on your AdjustConfig2dx instance. Calling this method does the following:
- Disables third-party sharing before the user launches their first
session. - Prevents the SDK from reading device and advertising IDs (for example:
gps_adidandandroid_id).
AdjustConfig2dx adjustConfig = AdjustConfig2dx(appToken, environment);adjustConfig.enableCoppaCompliance();Adjust2dx::initSdk(adjustConfig);Configure Play Store Kids Apps compliance (Android only)
If your app targets users under the age of 13, and the install region isn’t the USA, you need to mark it as a Kids App. This prevents the SDK from reading device and advertising IDs (for example: gps_adid and android_id).
To mark your app as a Kids App, call the enablePlayStoreKidsCompliance method on your AdjustConfig2dx instance.
AdjustConfig2dx adjustConfig = AdjustConfig2dx(appToken, environment);adjustConfig.enablePlayStoreKidsCompliance();Adjust2dx::initSdk(adjustConfig);Configure third party sharing options
You can use the Adjust SDK to record when a user changes their third-party sharing settings by instantiating an AdjustThirdPartySharing2dx object and passing it to Adjust2dx::trackThirdPartySharing.
Instantiate a third party sharing object
To instantiate a third party sharing object, create a new AdjustThirdPartySharing2dx instance and pass the following parameters:
isEnabled(bool)-
Whether third party sharing is enabled.
- Pass
trueto enable third party sharing. - Pass
falseto disable third party sharing.
- Pass
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);Once you’ve instantiated your AdjustThirdPartySharing2dx object, send the information to Adjust by calling the Adjust2dx::trackThirdPartySharing method with your AdjustThirdPartySharing2dx instance as an argument.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);Configure per-partner sharing settings
If you want to share metrics only with specific partners, or you want to configure which metrics to share with specific partners, you MUST do the following:
- Instantiate your
AdjustThirdPartySharing2dxobject with atrueargument. - Customize what data you share on a per-partner basis by calling the
addPartnerSharingSettingmethod on yourAdjustThirdPartySharing2dxinstance with the following arguments:
partnerName(std::string)-
The ID of the partner. Download the full list of available partners.
key(std::string)-
The metric you want to update.
value(bool)-
Whether to share the metric with the specified spartner.
- Pass
falseto stop sharing the metric. - Pass
trueto resume sharing the metric.
- Pass
To share only specific metrics with a partner, you MUST:
- Set
allmetrics tofalse. - Set each metric you want to share to
true.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addPartnerSharingSetting("PartnerA", "all", false);adjustThirdPartySharing.addPartnerSharingSetting("PartnerA", "install", true);Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);By default, Adjust shares all metrics with any partners you’ve configured in your app settings. You can use the Adjust SDK to update your third party sharing settings on a per-partner basis. To do this, call the addPartnerSharingSetting method with the following arguments:
| Argument | Data type | Description |
|---|---|---|
partnerName | String | The name or ID of the partner. Download the full list of available partners |
key | String | The metric to share with the partner |
value | Boolean | The user’s decision |
You can use the partnerName to specify which partner you want to disable or re-enable sharing of specific metrics. Here,
- If you want to enable/disable sharing metrics with all the partners that includes SAN, module and dynamic, you can pass
allkeyword as apartnerName. - If you want to enable/disable sharing metrics only with SAN partners, you can pass the name of the SAN partner as a
partnerName. - If you want to enable/disable sharing metrics with all the partners except SAN partners, you must pass the partner ID as a
partnerName. - If you want to enable/disable sharing metrics to dynamic partners, you can pass
dynamic_callbackas apartnerName.
The following metrics can be controlled using this method:
ad_revenueallupdateatt_updateeventinstallreattributionreattribution_reinstall
reinstallrejected_installrejected_reattributionsdk_clicksdk_infosessionsubscriptionuninstall
Metrics group
When you set a false value against a metric for a partner, Adjust stops sharing the metric along with all the child metrics under the group with the partner. These nested groups are:
- session
- install
- rejected_install
- reinstall
- reattribution
- rejected_reattribution
- reattribution_reinstall
- install
Here,
- If you disable sharing of
session, all its child metrics will also be disabled. - If you disable sharing of
sessionbut enablereattribution, all its child metrics exceptreattributionwill be disabled. - If you disable sharing of
sessionbut enableinstall, all the child metrics ofsessionexceptinstallwill be disabled. Child metrics ofinstallwill remain enabled. - If you enable sharing of
sessionbut disableinstall, all its child metrics ofsessionexceptinstallwill be enabled. Child metrics ofinstallwill remain disabled.
Examples
If you want to stop sharing all metrics with a specific partner, pass the all key with a false value.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addPartnerSharingSetting("PartnerA", "all", false);Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);To re-enable sharing with a specific partner, pass the all key with a true value.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addPartnerSharingSetting("PartnerA", "all", true);Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);If you want to share data only with PartnerA, you need to pass:
allkey forallpartners with afalsevalue to disable sharing all information for all the partners.allkey forPartnerAwith atruevalue to enable sharing all the information forPartnerAexplicitly.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addPartnerSharingSetting("all", "all", false);adjustThirdPartySharing.addPartnerSharingSetting("PartnerA", "all", true);Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);If you want to share only session data with all the partners, you need to pass:
allkey forallpartners with afalsevalue to disable sharing all information for all the partners.sessionkey forallpartners with atruevalue to enable sharingsessiondata and all its related “child” metrics forallthe partners.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addPartnerSharingSetting("all", "all", false);adjustThirdPartySharing.addPartnerSharingSetting("all", "session", true);Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);If you want to share only session data with PartnerA, you need to pass:
allkey forallpartners with afalsevalue to disable sharing all information for all the partners.sessionkey forPartnerApartners with atruevalue to enable sharingsessiondata and all its related “child” metrics forPartnerAthe partners.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addPartnerSharingSetting("all", "all", false);adjustThirdPartySharing.addPartnerSharingSetting("PartnerA", "session", true);Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);If you want to disable dynamic_callbacks, pass the all key with a false value.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addPartnerSharingSetting("dynamic_callbacks", "all", false);Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);To only share event data with a specific partner:
- Pass
allwith afalsevalue to stop sharing all metrics. - Pass
eventwith atruevalue to start sharing events.
AdjustThirdPartySharing2dx adjustThirdPartySharing = new AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addPartnerSharingSetting("PartnerA", "all", false);adjustThirdPartySharing.addPartnerSharingSetting("PartnerA", "event", true);Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);Add per-partner granular information
You can attach granular information when a user updates their third party sharing preferences. Use this information to communicate more detail about a user’s decision. To do this, call the addGranularOption method on your AdjustThirdPartySharing2dx instance with the following parameters:
partnerName(std::string)-
The ID of the partner. Download the full list of available partners
key(std::string)-
The key of the granular information.
value(std::string)-
The value of the granular information.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addGranularOption("PartnerA", "foo", "bar");Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);Manage Facebook Limited Data Use
Facebook provides a feature called Limited Data Use (LDU) to comply with the California Consumer Privacy Act (CCPA). This feature enables you to notify Facebook when a California-based user is opted out of the sale of data. You can also use it if you want to opt all users out by default.
You can update the Facebook LDU status using the following keys:
data_processing_options_country-
The country in which the user is located.
0: Request that Facebook use geolocation.1: United States of America.
data_processing_options_state-
Notifies Facebook in which state the user is located.
0: Request that Facebook use geolocation.1000: California.1001: Colorado.1002: Connecticut.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addGranularOption("facebook", "data_processing_options_country", "1");adjustThirdPartySharing.addGranularOption("facebook", "data_processing_options_state", "1000");Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);Provide consent data to Google (Digital Markets Act compliance)
To comply with the EU’s Digital Markets Act (DMA), Google Ads and the Google Marketing Platform require explicit consent to receive Adjust’s attribution requests to their APIs. You MUST communicate the user’s consent choices if:
- You have users in the European Economic Area (EEA). This includes EU member states, Switzerland, Norway, Iceland and Slovenia.
- You use Google Ads or Google Marketing Platform.
To communicate this consent, add the following granular options to your third party sharing instance for the partner google_dma:
eea(1or0)-
Informs Adjust whether users installing the app are within the European Economic Area (
1) or not (0). ad_personalization(1or0)-
Informs Adjust whether users consented with being served personalized ads via Google Ads and/or Google Marketing Platform (
1) or not (0). -
This parameter also informs the
npaparameter reserved for Google Marketing Platform. ad_user_data(1or0)-
Informs Adjust whether users consented with their advertiser ID being leveraged for attribution purposes
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addGranularOption("google_dma", "eea", "1");adjustThirdPartySharing.addGranularOption("google_dma", "ad_personalization", "1");adjustThirdPartySharing.addGranularOption("google_dma", "ad_user_data", "0");Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);If your user isn’t in the EEA, you MUST set both ad_personalization and ad_user_data to 1. If these values aren’t set, Google won’t claim attribution and will return an error.
AdjustThirdPartySharing2dx adjustThirdPartySharing = AdjustThirdPartySharing2dx(true);adjustThirdPartySharing.addGranularOption("google_dma", "eea", "0");adjustThirdPartySharing.addGranularOption("google_dma", "ad_personalization", "1");adjustThirdPartySharing.addGranularOption("google_dma", "ad_user_data", "1");Adjust2dx::trackThirdPartySharing(adjustThirdPartySharing);Set URL strategy
The URL strategy feature allows you to set either:
- The country in which Adjust stores your data (data residency).
- The endpoint to which the Adjust SDK sends traffic (URL strategy).
This is useful if you’re operating in a country with strict privacy requirements. When you set your URL strategy, Adjust stores data in the selected data residency region or sends traffic to the chosen domain.
To set your country of data residency, call the setUrlStrategy method on your AdjustConfig2dx instance with the following parameter:
urlStrategyDomains(std::vector<std::string>)-
The endpoints to which you want to send SDK traffic.
shouldUseSubdomains(bool)-
Whether the source should prefix a subdomain.
isDataResidency(bool)-
Whether the domain should be used for data residency.
See the table below for a list of strategies.
| URL strategy | Main and fallback domain | Use sub domains | Is Data Residency |
|---|---|---|---|
| EU data residency | "eu.adjust.com" | true | true |
| Turkish data residency | "tr.adjust.com" | true | true |
| US data residency | "us.adjust.com" | true | true |
| China global URL strategy | "adjust.world", "adjust.com" | true | false |
| China URL strategy | "adjust.cn", "adjust.com" | true | false |
| China only URL strategy | "adjust.cn" | true | false |
| India URL strategy | "adjust.net.in", "adjust.com" | true | false |
AdjustConfig2dx adjustConfig = AdjustConfig2dx(appToken, environment);adjustConfig.setUrlStrategy({"eu.adjust.com"}, true, true);Adjust2dx::initSdk(adjustConfig);Toggle consent measurement per user
If you’ve enabled Data Privacy settings in Adjust, you need to set up the Adjust SDK to work with them. This includes settings such as consent expiry period and user data retention period.
To toggle this feature, call the trackMeasurementConsent method with the following argument:
measurementConsent(bool)-
Whether consent measurement is enabled (
true) or not (false).
When enabled, the SDK communicates the data privacy settings to Adjust’s servers. Adjust’s servers then applies your data privacy rules to the user. The Adjust SDK continues to work as expected.
Adjust2dx::trackMeasurementConsent(true);