# Ionic Att

> Request iOS App Tracking Transparency (ATT) permission so AdMob can serve personalized ads on iOS 14+ without App Review rejecting the build. Trigger when adding ATT, IDFA permission, or "iOS personalized ads" to an Ionic Capacitor app.

- Skill: `erkamyaman/ionic-att` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add erkamyaman/ionic-att`
- Raw SKILL.md: https://api.skillmd.com/api/skills/erkamyaman/ionic-att/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: erkamyaman (https://skillmd.com/u/erkamyaman)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/erkamyaman/ionic-att

---


# iOS App Tracking Transparency (ATT)

iOS 14+ requires apps that track users across other companies' apps and websites — including AdMob personalized ads — to ask for permission via the system ATT dialog. Without it: ads degrade to non-personalized, eCPM drops dramatically, and Apple rejects the build during review.

## When to consult

- **Info.plist setup + plugin install**: [setup.md](references/setup.md)
- **When and how to prompt** (timing matters): [request-flow.md](references/request-flow.md)
- **Per-framework integration**: [framework-snippets.md](references/framework-snippets.md)

## Hard rules

- ❌ **NEVER prompt on first launch.** Apple rejects this. The ATT dialog must come after the user has experienced enough of the app to understand why permission is being requested.
- ✅ Prompt **after onboarding completes** and **before** AdMob's first impression.
- ✅ The `NSUserTrackingUsageDescription` string in `Info.plist` MUST clearly state how the data is used. Generic placeholders ("We need this to show ads") get rejected.
- ✅ Android is not affected — the ATT plugin no-ops on Android.
- ✅ ATT pairs with [`ionic-cmp-consent`](../ionic-cmp-consent/SKILL.md) — they cover different jurisdictions (Apple vs EU), and both are required for full ad revenue.

## Library

```bash
npm install @capacitor-community/app-tracking-transparency
npx cap sync
```

