capacitor-app-tracking-transparency

May 11, 2026 ยท View on GitHub

Capgo - Instant updates for Capacitor

โžก๏ธ Get Instant updates for your App with Capgo

Missing a feature? We'll build the plugin for you ๐Ÿ’ช

Capacitor plugin for iOS App Tracking Transparency framework. Request user authorization to access app-related data for tracking.

Why Capacitor App Tracking Transparency?

A simple, free, and lightweight plugin for iOS App Tracking Transparency:

  • iOS 14+ compliance - Handle Apple's App Tracking Transparency requirements
  • Permission status - Check current authorization status without prompting
  • Request permission - Display the native iOS permission dialog
  • Cross-platform - Returns authorized on Android/Web for transparent usage
  • Modern package management - Supports both Swift Package Manager (SPM) and CocoaPods (SPM-ready for Capacitor 8)
  • Zero dependencies - Minimal footprint, no bloat

Perfect for apps using IDFA, advertising SDKs, analytics tracking, or any feature that tracks users across apps and websites.

Documentation

The most complete doc is available here: https://capgo.app/docs/plugins/app-tracking-transparency/

Compatibility

Plugin versionCapacitor compatibilityMaintained
v8.*.*v8.*.*โœ…
v7.*.*v7.*.*On demand
v6.*.*v6.*.*โŒ
v5.*.*v5.*.*โŒ

Note: The major version of this plugin follows the major version of Capacitor. Use the version that matches your Capacitor installation (e.g., plugin v8 for Capacitor 8). Only the latest major version is actively maintained.

Install

npm install @capgo/capacitor-app-tracking-transparency
npx cap sync

iOS

Add the NSUserTrackingUsageDescription key to your Info.plist file:

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

The string should explain why you need tracking permission. This message will be displayed to users when requesting permission.

Localizing the Permission Message

To provide localized versions of the tracking permission message, create InfoPlist.strings files for each language:

  1. Create a InfoPlist.strings file in your Xcode project
  2. Add the NSUserTrackingUsageDescription key with a localized value:
"NSUserTrackingUsageDescription" = "This identifier will be used to deliver personalized ads to you.";

Android

App Tracking Transparency is an iOS-only framework. This plugin returns authorized status on Android to allow transparent cross-platform usage without conditional code.

Web

Returns authorized status on Web for development purposes and transparent cross-platform usage.

API

Capacitor App Tracking Transparency Plugin.

A plugin to request and check user authorization for app tracking on iOS devices. Uses Apple's App Tracking Transparency framework.

getStatus()

getStatus() => Promise<AppTrackingStatusResponse>

Gets the current tracking authorization status without prompting the user.

Returns: Promise<AppTrackingStatusResponse>

Since: 1.0.0


requestPermission()

requestPermission() => Promise<AppTrackingStatusResponse>

Requests user authorization to access app-related data for tracking. Displays the native iOS tracking permission dialog.

Note: This method will only show the dialog once. Subsequent calls will return the stored authorization status without showing the dialog.

Returns: Promise<AppTrackingStatusResponse>

Since: 1.0.0


getPluginVersion()

getPluginVersion() => Promise<{ version: string; }>

Get the native Capacitor plugin version.

Returns: Promise<{ version: string; }>

Since: 1.0.0


Interfaces

AppTrackingStatusResponse

Response object containing the tracking authorization status.

PropTypeDescriptionSince
statusAppTrackingStatusThe current tracking authorization status.1.0.0

Type Aliases

AppTrackingStatus

Possible values for the tracking authorization status.

  • authorized: User has authorized access to app-related data for tracking
  • denied: User has denied access to app-related data for tracking
  • notDetermined: User has not yet received the authorization request
  • restricted: Authorization is restricted (e.g., parental controls, MDM)

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