adjust-icon

Set up App Tracking Transparency

If you want to record the device’s ID for Advertisers (IDFA), you must display a prompt to get your user’s authorization. To do this, you need to include Apple’s App Tracking Transparency (ATT) framework in your app. The Adjust SDK stores the user’s authorization status and sends it to Adjust’s servers with each request.

Authorization statuses

StatusCodeDescription
ATTrackingManagerAuthorizationStatusNotDetermined0The user hasn’t responded to the access prompt yet
ATTrackingManagerAuthorizationStatusRestricted1Access to app-related data is blocked at the device level
ATTrackingManagerAuthorizationStatusDenied2The user has denied access to app-related data for device measurement
ATTrackingManagerAuthorizationStatusAuthorized3The user has approved access to app-related data for device measurement

ATT authorization wrapper

Method signature
static Future<num> requestAppTrackingAuthorization() async

The Adjust SDK contains a wrapper around Apple’s requestTrackingAuthorizationWithCompletionHandler method. You can use this wrapper if you don’t want to customize the ATT prompt.

The callback method triggers when your user responds to the consent dialog. This method sends the user’s consent status code to Adjust’s servers. You can define responses to each status code within the callback function.

You must specify text content for the ATT request dialog. To do this, add your text to the NSUserTrackingUsageDescription key in your Info.plist file.

if (Platform.isIOS) {
Adjust.requestAppTrackingAuthorization().then((status) {
switch (status) {
case 0:
// ATTrackingManagerAuthorizationStatusNotDetermined case
break;
case 1:
// ATTrackingManagerAuthorizationStatusRestricted case
break;
case 2:
// ATTrackingManagerAuthorizationStatusDenied case
break;
case 3:
// ATTrackingManagerAuthorizationStatusAuthorized case
break;
}
});
}

Example

This example shows how to log a human-readable description of the user’s authorization status when they interact with a prompt.

main.dart
import 'package:adjust_sdk/adjust.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
initPlatformState() async {
AdjustConfig config =
new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);
config.logLevel = AdjustLogLevel.verbose;
Adjust.initSdk(config);
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;
}
});
}

Get current authorization status

Method signature
static Future<int> getAppTrackingAuthorizationStatus() async

You can retrieve a user’s current authorization status at any time. Call the getAppTrackingAuthorizationStatus method to return the authorization status code as an integer.

Adjust.getAppTrackingAuthorizationStatus().then((status) {
// status gives you information about ATT consent value
});

Example

This example shows how to collect the user’s authorization status and convert it to a String. This information is assigned to a variable called authorizationStatus and passed as a session partner parameter with the key "status".

String authorizationStatus = Convert.ToString(Adjust.getAppTrackingAuthorizationStatus());
Adjust.addSessionPartnerParameter("status", authorizationStatus);

Check for authorization status changes

Method signature
static void checkForNewAttStatus()

If you use a custom ATT prompt, you need to inform the Adjust SDK of changes to the user’s authorization status. Call the checkForNewAttStatus method to send the authorization status to Adjust’s servers.

Adjust.checkForNewAttStatus();

Custom prompt timing

Property declaration
num? attConsentWaitingInterval;

If your app includes an onboarding process or a tutorial, you may want to delay sending your user’s ATT consent status until after the user has completed this process. To do this, you can set the attConsentWaitingInterval property to delay the sending of data for up to 360 seconds to give the user time to complete the initial onboarding. After the timeout ends or the user sets their consent status, the SDK sends all information it has recorded during the delay to Adjust’s servers along with the user’s consent status.

AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);
//...
adjustConfig.attConsentWaitingInterval = 30;
//...
Adjust.initSdk(adjustConfig);