Expo TrackingTransparency

一个用于跟踪应用用户和管理跟踪权限的库。

Android
iOS
tvOS
Included in Expo Go
Bundled version:
~6.0.8

一个用于跟踪应用用户和管理跟踪权限的库。提供对广告标识符的访问,并管理跟踪所需的权限。用于跟踪的数据示例包括电子邮件地址、设备ID、广告ID等。如果设备级设置“允许应用请求跟踪”关闭,该权限将被拒绝。请确保在你的 Info.plist 中添加 NSUserTrackingUsageDescription 来说明用户将如何被跟踪。否则,你的应用将被苹果拒绝。

🌐 A library for tracking app users and managing tracking permissions. Provides access to advertising identifiers and manages the required permissions for tracking. Examples of data used for tracking include email address, device ID, advertising ID, and more. 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 App Tracking Transparency framework, see their documentation.

安装

🌐 Installation

Terminal
npx expo install expo-tracking-transparency

If you are installing this in an existing React Native app, make sure to install expo in your project.

应用配置中的配置

🌐 Configuration in app config

如果你在项目中使用配置插件(连续原生生成 (CNG)),可以使用其内置的 配置插件 来配置 expo-tracking-transparency。该插件允许你配置无法在运行时设置并且需要构建新的应用二进制文件才能生效的各种属性。如果你的应用使用 CNG,则需要手动配置该库。

🌐 You can configure expo-tracking-transparency using its built-in config plugin if you use config plugins in your project (Continuous Native Generation (CNG)). The plugin allows you to configure various properties that cannot be set at runtime and require building a new app binary to take effect. If your app does not use CNG, then you'll need to manually configure the library.

Example app.json with config plugin

app.json
{ "expo": { "plugins": [ [ "expo-tracking-transparency", { "userTrackingPermission": "This identifier will be used to deliver personalized ads to you." } ] ] } }

Configurable properties

NameDefaultDescription
userTrackingPermission"允许此应用收集可用于跟踪你或你设备的应用相关数据。"
Only for:
iOS

Info.plist 中设置 iOS NSUserTrackingUsageDescription 权限提示信息。

Are you using this library in an existing React Native app?

如果你没有使用连续原生生成(CNG)(而是手动使用原生 AndroidiOS 项目),那么你需要在原生项目中配置以下权限:

🌐 If you're not using Continuous Native Generation (CNG) (you're using native android and ios projects manually), then you need to configure following permissions in your native projects:

  • 对于 Android,请在项目的 android/app/src/main/AndroidManifest.xml 中添加 com.google.android.gms.permission.AD_ID 权限。

    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
  • 对于 iOS,在你的项目 ios/[app]/Info.plist 中添加 NSUserTrackingUsageDescription 键:

    <key>NSUserTrackingUsageDescription</key> <string>Your custom usage description string here.</string>

用法

🌐 Usage

Basic tracking transparency usage
import { 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> ); } const styles = StyleSheet.create({ container: { flex: 1, alignItems: 'center', justifyContent: 'center', }, });

应用接口

🌐 API

import * as ExpoTrackingTransparency from 'expo-tracking-transparency';

Hooks

useTrackingPermissions(options)

Android
iOS
tvOS
ParameterType
options(optional)PermissionHookOptions<object>

Check or request 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.

Returns:
[null | PermissionResponse, RequestPermissionMethod<PermissionResponse>, GetPermissionMethod<PermissionResponse>]

Example

const [status, requestPermission] = useTrackingPermissions();

Methods

getAdvertisingId()

Android
iOS
tvOS

Gets the advertising ID, a UUID string intended only for advertising. Use this string for frequency capping, attribution, conversion events, estimating the number of unique users, advertising fraud detection, and debugging.

As a best practice, don't store the advertising ID. Instead, call this function each time your app needs to use the advertising ID. Users can change whether they allow app tracking and can reset their advertising ID at any time in their system settings. Check your app's authorization using getTrackingPermissionsAsync() to determine the user's intent.

On Android, this function returns the "Android Advertising ID" (AAID). On Android devices that support multiple users, including guest users, it's possible for your app to obtain different advertising IDs on the same device. These different IDs correspond to different users who could be signed in on that device. See Google's documentation for more information: Get a user-resettable advertising ID.

On iOS, this function returns the "Identifier for Advertisers" (IDFA), a string that's unique to each device. On devices running iOS 14.5 and newer, your app must request tracking authorization using requestTrackingPermissionsAsync() before it can get the advertising identifier.

Returns:
string | null

Returns either a UUID string or null. It returns null in the following cases:

  • On Android, when isLimitAdTrackingEnabled() is true
  • In the iOS simulator, regardless of any settings
  • On devices running iOS 14.5 and later if you haven't received permission using requestTrackingPermissionsAsync()
  • On iOS, if you've requested permission and the user declines
  • On iOS, when a profile or configuration restricts access to the advertising identifier, such as when the user has turned off the system-wide "Allow Apps to Request to Track" setting

Example

TrackingTransparency.getAdvertisingId(); // "E9228286-4C4E-4789-9D95-15827DCB291B"

getTrackingPermissionsAsync()

Android
iOS
tvOS

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 requestTrackingPermissionsAsync for more details.

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

Returns:
Promise<PermissionResponse>

Example

const { granted } = await getTrackingPermissionsAsync(); if (granted) { // Your app is authorized to track the user or their device }

isAvailable()

Android
iOS
tvOS

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

Returns:
boolean

On devices where the Tracking Transparency API is unavailable, the get and request permissions methods will always resolve to granted.

requestTrackingPermissionsAsync()

Android
iOS
tvOS

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.

Returns:
Promise<PermissionResponse>

Example

const { granted } = await requestTrackingPermissionsAsync(); if (granted) { // Your app is authorized to track the user or their device }

Types

PermissionExpiration

Android
iOS
tvOS

Literal Type: union

Permission expiration time. Currently, all permissions are granted permanently.

Acceptable values are: 'never' | number

PermissionHookOptions

Android
iOS
tvOS

Literal Type: union

Acceptable values are: PermissionHookBehavior | Options

PermissionResponse

Android
iOS
tvOS

An object obtained by permissions get and request functions.

PropertyTypeDescription
canAskAgainboolean

Indicates if user can be asked again for specific permission. If not, one should be directed to the Settings app in order to enable/disable the permission.

expiresPermissionExpiration

Determines time when the permission expires.

grantedboolean

A convenience boolean that indicates if the permission is granted.

statusPermissionStatus

Determines the status of the permission.

Enums

PermissionStatus

Android
iOS
tvOS

DENIED

PermissionStatus.DENIED = "denied"

User has denied the permission.

GRANTED

PermissionStatus.GRANTED = "granted"

User has granted the permission.

UNDETERMINED

PermissionStatus.UNDETERMINED = "undetermined"

User hasn't granted or denied the permission yet.

权限

🌐 Permissions

安卓

🌐 Android

以下权限会通过库的 AndroidManifest.xml 自动添加。

🌐 The following permissions are added automatically through the library's AndroidManifest.xml.

Android 权限描述
com.google.android.gms.permission.AD_ID允许访问广告 ID 用于跟踪和分析。对于使用 Google Play 服务广告 ID 的、面向 Android 13(API 级别 33)或更高版本的应用,这是必需的。

iOS

该库使用以下用法描述键:

🌐 The following usage description keys are used by this library:

Info.plist KeyDescription

NSUserTrackingUsageDescription

A message that informs the user why an app is requesting permission to use data for tracking the user or the device.