Skip to content
Consent Management
Guides
Apple App Tracking Transparency

Configure Apple App Tracking Transparency (ATT)

15minFidesMobile Consent
This feature requires the Janus SDK (iOS or Flutter) and Fides Cloud or Fides Enterprise.

Apple's App Tracking Transparency (opens in a new tab) (ATT) framework requires iOS apps to request explicit user permission before tracking users across apps and websites. Fides integrates with ATT natively through the Janus SDK: when the user denies the system prompt, non-exempt notices are automatically pre-populated to opt-out and their toggles are locked in the privacy experience.

This guide walks through configuring ATT in your Fides setup and enabling it in the Janus SDK.

How it works

When enableATT is set in the Janus SDK configuration:

  1. The SDK requests the system ATT permission dialog before showing the privacy experience.
  2. If the user denies or restricts tracking, all non-exempt privacy notices are automatically set to opt-out and locked — users cannot change them.
  3. If the user allows tracking, the privacy experience behaves normally.

Notices marked as ATT-exempt remain interactive regardless of the ATT response. This is useful for essential or informational notices (e.g. a "Strictly Necessary" notice) that should always be surfaced to the user.

Step 1: Configure ATT-exempt notices

By default, all notices are subject to ATT locking when the user denies permission. To mark a notice as ATT-exempt — so it remains interactive even when ATT is denied:

  1. Navigate to Consent > Privacy notices and select the notice you want to mark as ATT-exempt.
  2. In the Privacy notice details card, toggle Exempt from App Tracking Transparency (ATT) to on.
  3. Click Save.

Exempt notices will remain interactive in the Janus SDK privacy experience even when the user denies ATT. All other notices will be locked to opt-out.

ℹ️
The ATT exempt toggle is disabled for notice-only notices because the ATT locking behavior does not apply to them.

Step 2: Add NSUserTrackingUsageDescription (iOS)

The system ATT dialog requires a usage description string in your app's Info.plist. Apple will reject apps that call ATT without it.

Add the following key to your app's Info.plist:

<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>

Update the string to accurately reflect how your app uses tracking — Apple reviews this for accuracy.

⚠️
This key must be in the host app's Info.plist, not the SDK. The Janus SDK cannot add it for you. Omitting it will cause a crash at runtime when ATT is requested.

Step 3: Enable ATT in the Janus SDK

Set enableATT (iOS) or enableAtt (Flutter) to true in your JanusConfiguration. The flag defaults to false — existing behavior is unchanged unless you explicitly opt in.

iOS:

let config = JanusConfiguration(
    apiHost: "https://privacy-plus.yourhost.com",
    propertyId: "FDS-A0B1C2",
    enableATT: true
)

Flutter:

final config = JanusConfiguration(
  apiHost: 'https://privacy-plus.yourhost.com',
  propertyId: 'FDS-A0B1C2',
  enableAtt: true,
);
ℹ️
enableATT requires iOS 14+. On iOS 13 and below the flag is accepted but has no effect. On Android, enableAtt is always a no-op — Android has no ATT equivalent.

Runtime behavior

ATT responseNon-exempt noticesATT-exempt notices
AuthorizedNormal (user can toggle)Normal (user can toggle)
DeniedPre-set to opt-out, toggle lockedNormal (user can toggle)
RestrictedPre-set to opt-out, toggle lockedNormal (user can toggle)
Not determinedNormal — ATT not yet requestedNormal

Related