---
description: Capacitor plugin for the iOS App Tracking Transparency framework. Read the tracking authorization status, request permission, and access the IDFA.
title: Capacitor App Tracking Transparency Plugin - Capawesome
image: https://capawesome.io/docs/assets/images/social/sdks/capacitor/app-tracking-transparency.png
---

<!doctype html> 

[Skip to content ](#capacitor-app-tracking-transparency-plugin) 

[🔐 Introducing the **Capacitor Vault** plugin — store secrets behind biometrics or a device passcode. ](/blog/announcing-the-capacitor-vault-plugin/) 

* [ SDKs ](/docs/sdks/)
* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Type Aliases ](#type-aliases)
* [ App Review Guidance ](#app-review-guidance)
* [ Changelog ](#changelog)
* [ License ](#license)
* [ App Update ](/docs/sdks/capacitor/app-update/)
* [ Apple Sign-In ](/docs/sdks/capacitor/apple-sign-in/)
* [ Asset Manager ](/docs/sdks/capacitor/asset-manager/)
* [ Audio Player ](/docs/sdks/capacitor/audio-player/)
* [ Audio Recorder ](/docs/sdks/capacitor/audio-recorder/)
* [ Audio Session ](/docs/sdks/capacitor/audio-session/)
* [ Background Task ](/docs/sdks/capacitor/background-task/)
* [ Badge ](/docs/sdks/capacitor/badge/)
* [ Barometer ](/docs/sdks/capacitor/barometer/)
* [ Battery ](/docs/sdks/capacitor/battery/)
* [ Biometrics ](/docs/sdks/capacitor/biometrics/)
* [ Bluetooth Low Energy ](/docs/sdks/capacitor/bluetooth-low-energy/)
* [ Cloudinary ](/docs/sdks/capacitor/cloudinary/)
* [ Compass ](/docs/sdks/capacitor/compass/)
* [ Contacts ](/docs/sdks/capacitor/contacts/)
* [ Datetime Picker ](/docs/sdks/capacitor/datetime-picker/)
* [ Facebook Sign-In ](/docs/sdks/capacitor/facebook-sign-in/)
* [ File Compressor ](/docs/sdks/capacitor/file-compressor/)
* [ File Opener ](/docs/sdks/capacitor/file-opener/)
* [ File Picker ](/docs/sdks/capacitor/file-picker/)
* [ Firebase ](/docs/sdks/capacitor/firebase/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Overwrite Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Type Aliases ](#type-aliases)
* [ App Review Guidance ](#app-review-guidance)
* [ Changelog ](#changelog)
* [ License ](#license)

# Capacitor App Tracking Transparency Plugin[¶](#capacitor-app-tracking-transparency-plugin "Permanent link")

Capacitor plugin for the [App Tracking Transparency](https://developer.apple.com/documentation/apptrackingtransparency) framework.

[ ![Deliver Live Updates to your Capacitor app with Capawesome Cloud](../../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](https://cloud.capawesome.io/) 

## Features[¶](#features "Permanent link")

We are proud to offer one of the most complete and feature-rich Capacitor plugins for App Tracking Transparency. Here are some of the key features:

* 🔒 **Authorization status**: Read the current tracking authorization status.
* 🙋 **Permission request**: Present the system tracking authorization prompt.
* 🆔 **Advertising identifier**: Read the advertising identifier (IDFA) when authorized.
* 📦 **CocoaPods & SPM**: Supports CocoaPods and Swift Package Manager for iOS.
* 🔁 **Up-to-date**: Always supports the latest Capacitor version.

Missing a feature? Just [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues) and we'll take a look!

## Newsletter[¶](#newsletter "Permanent link")

Stay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).

## Compatibility[¶](#compatibility "Permanent link")

| Plugin Version | Capacitor Version | Status         |
| -------------- | ----------------- | -------------- |
| 0.x.x          | \>=8.x.x          | Active support |

## Installation[¶](#installation "Permanent link")

You can use our **AI-Assisted Setup** to install the plugin. Add the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:

`[](#%5F%5Fcodelineno-0-1)npx skills add capawesome-team/skills --skill capacitor-plugins
`

Then use the following prompt:

`` [](#%5F%5Fcodelineno-1-1) Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-app-tracking-transparency` plugin in my project.
 ``

If you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:

`[](#%5F%5Fcodelineno-2-1)npm install @capawesome/capacitor-app-tracking-transparency
[](#%5F%5Fcodelineno-2-2)npx cap sync
`

This plugin is only available on **iOS**. On Android and Web, all methods reject as unimplemented.

### iOS[¶](#ios "Permanent link")

#### Privacy Descriptions[¶](#privacy-descriptions "Permanent link")

The `NSUserTrackingUsageDescription` key must be added to the `Info.plist` file of your app. Otherwise, the `requestPermission(...)` method will reject with an error.

`[](#%5F%5Fcodelineno-3-1)<key>NSUserTrackingUsageDescription</key>
[](#%5F%5Fcodelineno-3-2)<string>Your data will be used to deliver personalized ads to you.</string>
`

The purpose string must clearly explain why your app is requesting permission to track the user. See the [Apple documentation](https://developer.apple.com/documentation/bundleresources/information-property-list/nsusertrackingusagedescription) for more information.

## Configuration[¶](#configuration "Permanent link")

No configuration required for this plugin.

## Usage[¶](#usage "Permanent link")

`[](#%5F%5Fcodelineno-4-1)import { AppTrackingTransparency } from '@capawesome/capacitor-app-tracking-transparency';
[](#%5F%5Fcodelineno-4-2)
[](#%5F%5Fcodelineno-4-3)const getStatus = async () => {
[](#%5F%5Fcodelineno-4-4)  const { status } = await AppTrackingTransparency.getStatus();
[](#%5F%5Fcodelineno-4-5)  return status;
[](#%5F%5Fcodelineno-4-6)};
[](#%5F%5Fcodelineno-4-7)
[](#%5F%5Fcodelineno-4-8)const requestPermission = async () => {
[](#%5F%5Fcodelineno-4-9)  const { status } = await AppTrackingTransparency.requestPermission();
[](#%5F%5Fcodelineno-4-10)  return status;
[](#%5F%5Fcodelineno-4-11)};
[](#%5F%5Fcodelineno-4-12)
[](#%5F%5Fcodelineno-4-13)const getAdvertisingIdentifier = async () => {
[](#%5F%5Fcodelineno-4-14)  const { advertisingIdentifier } =
[](#%5F%5Fcodelineno-4-15)    await AppTrackingTransparency.getAdvertisingIdentifier();
[](#%5F%5Fcodelineno-4-16)  return advertisingIdentifier;
[](#%5F%5Fcodelineno-4-17)};
`

## API[¶](#api "Permanent link")

* [getAdvertisingIdentifier()](#getadvertisingidentifier)
* [getStatus()](#getstatus)
* [requestPermission()](#requestpermission)
* [Interfaces](#interfaces)
* [Type Aliases](#type-aliases)

### getAdvertisingIdentifier()[¶](#getadvertisingidentifier "Permanent link")

`[](#%5F%5Fcodelineno-5-1)getAdvertisingIdentifier() => Promise<GetAdvertisingIdentifierResult>
`

Get the advertising identifier (IDFA) of the device.

The advertising identifier is only available if the tracking authorization status is `authorized`. Otherwise, `null` is returned.

**Note**: The iOS Simulator always returns `null`, even if the tracking authorization status is `authorized`. Use a real device to test this method.

Only available on iOS.

**Returns:** `Promise<[GetAdvertisingIdentifierResult](#getadvertisingidentifierresult)>`

**Since:** 0.1.0

---

### getStatus()[¶](#getstatus "Permanent link")

`[](#%5F%5Fcodelineno-6-1)getStatus() => Promise<GetStatusResult>
`

Get the current tracking authorization status.

Only available on iOS.

**Returns:** `Promise<[GetStatusResult](#getstatusresult)>`

**Since:** 0.1.0

---

### requestPermission()[¶](#requestpermission "Permanent link")

`[](#%5F%5Fcodelineno-7-1)requestPermission() => Promise<RequestPermissionResult>
`

Request permission to track the user.

This will present the system tracking authorization prompt if the status has not been determined yet. The prompt is only shown once per install.

The `NSUserTrackingUsageDescription` key must be added to the `Info.plist`file of your app.

Only available on iOS.

**Returns:** `Promise<[RequestPermissionResult](#requestpermissionresult)>`

**Since:** 0.1.0

---

### Interfaces[¶](#interfaces "Permanent link")

#### GetAdvertisingIdentifierResult[¶](#getadvertisingidentifierresult "Permanent link")

| Prop                      | Type           | Description                                                                                                                                                                                                       | Since |
| ------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **advertisingIdentifier** | string \| null | The advertising identifier (IDFA) of the device. Returns null if the tracking authorization status is not authorized or if no advertising identifier is available, which is always the case on the iOS Simulator. | 0.1.0 |

#### GetStatusResult[¶](#getstatusresult "Permanent link")

| Prop       | Type                              | Description                                | Since |
| ---------- | --------------------------------- | ------------------------------------------ | ----- |
| **status** | [TrackingStatus](#trackingstatus) | The current tracking authorization status. | 0.1.0 |

#### RequestPermissionResult[¶](#requestpermissionresult "Permanent link")

| Prop       | Type                              | Description                                          | Since |
| ---------- | --------------------------------- | ---------------------------------------------------- | ----- |
| **status** | [TrackingStatus](#trackingstatus) | The tracking authorization status after the request. | 0.1.0 |

### Type Aliases[¶](#type-aliases "Permanent link")

#### TrackingStatus[¶](#trackingstatus "Permanent link")

The tracking authorization status.

* `authorized`: The user authorized access to app-related data for tracking.
* `denied`: The user denied access to app-related data for tracking.
* `notDetermined`: The user has not yet received a tracking authorization request.
* `restricted`: Tracking authorization is restricted and cannot be changed by the user.

`'authorized' | 'denied' | 'notDetermined' | 'restricted'`

## App Review Guidance[¶](#app-review-guidance "Permanent link")

Apple requires that any app that tracks users requests permission via the App Tracking Transparency framework. Keep the following guidelines in mind to avoid App Review rejections:

* **Prompt timing**: Call `requestPermission(...)` only when the user is in a context where tracking makes sense. The system prompt is only shown once per install while the status is `notDetermined`. Calling the method again afterwards resolves with the existing status without showing the prompt.
* **Purpose string**: The `NSUserTrackingUsageDescription` purpose string must accurately describe how the collected data is used. Vague or misleading descriptions are a common reason for rejection.
* **Advertising identifier**: The advertising identifier (IDFA) is only available while the status is `authorized`. In all other cases, `getAdvertisingIdentifier(...)` returns `null`.
* **Simulator**: The iOS Simulator never provides an advertising identifier, so `getAdvertisingIdentifier(...)` always returns `null` there, even if the status is `authorized`. Use a real device to test the advertising identifier.

## Changelog[¶](#changelog "Permanent link")

See [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/app-tracking-transparency/CHANGELOG.md).

## License[¶](#license "Permanent link")

See [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/app-tracking-transparency/LICENSE).

July 7, 2026 

Back to top

```json
{"@context": "https://schema.org", "@graph": [{"@type": "TechArticle", "@id": "https://capawesome.io/docs/sdks/capacitor/app-tracking-transparency/#article", "headline": "Capacitor App Tracking Transparency Plugin", "name": "Capacitor App Tracking Transparency Plugin", "description": "Capacitor plugin for the iOS App Tracking Transparency framework. Read the tracking authorization status, request permission, and access the IDFA.", "inLanguage": "en", "url": "https://capawesome.io/docs/sdks/capacitor/app-tracking-transparency/", "mainEntityOfPage": "https://capawesome.io/docs/sdks/capacitor/app-tracking-transparency/", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "about": {"@id": "https://capawesome.io/docs/sdks/capacitor/app-tracking-transparency/#software"}}, {"@type": "SoftwareSourceCode", "@id": "https://capawesome.io/docs/sdks/capacitor/app-tracking-transparency/#software", "name": "Capacitor App Tracking Transparency Plugin", "description": "Capacitor plugin for the iOS App Tracking Transparency framework. Read the tracking authorization status, request permission, and access the IDFA.", "url": "https://capawesome.io/docs/sdks/capacitor/app-tracking-transparency/", "programmingLanguage": "TypeScript", "runtimePlatform": "Capacitor", "codeRepository": "https://github.com/capawesome-team", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}}]}
```
