Expo

Get Started
API Reference

TrackingTransparency

A library for requesting permission to track the user or their device. Examples of data used for tracking include email address, device ID, advertising ID, etc... This permission is only necessary on iOS 14 and higher; on iOS 13 and below this permission is always granted. If the "Allow Apps to Request to Track" device-level setting is off, this permission will be denied. Be sure to add NSUserTrackingUsageDescription to your Info.plist to explain how the user will be tracked, otherwise your app will be rejected by Apple.
For more information on Apple's new App Tracking Transparency framework, please refer to their documentation.

Platform Compatibility

Android DeviceAndroid EmulatoriOS DeviceiOS SimulatorWeb

Installation

expo install expo-tracking-transparency

If you're installing this in a bare React Native app, you should also follow these additional installation instructions.

import React, { useEffect } from 'react';
import { Text, StyleSheet, View } from 'react-native';
import { requestTrackingPermissionsAsync } from 'expo-tracking-transparency';

export default function App() {
  useEffect(() => {
    (async () => {
      const { status } = await requestTrackingPermissionsAsync();
      if (status === 'granted') {
        console.log('Yay! I have user permission to track data');
      }
    })();
  }, []);

  return (
    <View style={styles.container}>
      <Text>Tracking Transparency Module Example</Text>
    </View>
  );
}

%%placeholder-start%%const styles = StyleSheet.create({ ... }); %%placeholder-end%%const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
});

import {
  requestTrackingPermissionsAsync,
  getTrackingPermissionsAsync,
} from 'expo-tracking-transparency';

Checks whether or not the user has authorized the app to access app-related data that can be used for tracking the user or the device. See requestPermissionsAsync for more details.

On Android, web, and iOS 13 and below, this method always returns that the permission was granted.

Example

const { granted } = await getTrackingPermissionsAsync();

if (granted) {
  // Your app is authorized to track the user or their device
}

  • Promise<PermissionResponse>

Returns whether the TrackingTransparency API is available on the current device.

  • boolean

Currently this is true on iOS 14 and above only. On devices where the Tracking Transparency API is unavailable, the get and request permissions methods will always resolve to granted.


Requests the user to authorize or deny access to app-related data that can be used for tracking the user or the device. Examples of data used for tracking include email address, device ID, advertising ID, etc. On iOS 14.5 and above, if the user denies this permission, any attempt to collect the IDFA will return a string of 0s.

The system remembers the user’s choice and doesn’t prompt again unless a user uninstalls and then reinstalls the app on the device.

On Android, web, and iOS 13 and below, this method always returns that the permission was granted.

Example

const { granted } = await requestTrackingPermissionsAsync();

if (granted) {
  // Your app is authorized to track the user or their device
}

Acceptable values are: 'never', number.

NameTypeDescription
canAskAgainboolean-
expiresPermissionExpiration-
grantedboolean-
statusPermissionStatus-

  • PermissionStatus.DENIED : "denied"
  • PermissionStatus.GRANTED : "granted"
  • PermissionStatus.UNDETERMINED : "undetermined"