Since iOS 14.5 we’ve had to live with ATT (App Tracking Transparency). For ad-supported apps the opt-in rate is existential. Industry average sits around 25%. On a client’s game app opt-in was at 19%, and over four months we pushed it to 52%. Here’s what we did.
What does ATT actually ask for?
Before your app can reach IDFA (Identifier for Advertisers), iOS needs explicit user consent. Without it, IDFA returns all zeros and cross-app tracking dies. Ad SDKs, attribution providers, retargeting systems, all of them ride on this consent.
Info.plist:
<key>NSUserTrackingUsageDescription</key>
<string>We'd like to access your identifier to show you more relevant ads and make the app better for you.</string>The API call:
import AppTrackingTransparency
ATTrackingManager.requestTrackingAuthorization { status in
// .authorized, .denied, .restricted, .notDetermined
}The things that push opt-in down
What dragged the rate down to 19%:
- Prompt on the first app open. The user hasn’t seen any value yet and says no on autopilot.
- Cold legalese in the usage description. “We need permission to collect your data.” No one says yes to that.
- Two prompts back to back on the splash screen. Notifications permission and tracking permission in sequence. Psychological exhaustion.
- Only one language. An English prompt on a localised device confuses the user into declining.
What moved opt-in to 52%
1. A pre-prompt screen
Before the system prompt, we show our own custom screen. Visual, explanatory, friendly in tone.
Want ads that actually fit you?
[large icon]
With this permission:
- You see ads for games you'd actually play
- You help us keep the app free
- Your privacy is always protected
[Continue] [Not now]When the user taps Continue, we fire the system prompt. When they tap Not now, we don’t fire at all, we keep the state clean.
Of users who saw this screen, 70% tapped Continue. Of those, 74% authorised on the system prompt. Combined: 0.70 × 0.74 = 52%.
2. Timing
Not on first launch. We trigger on the second session or after a success event. The user has lived with the app and seen value, so they’re more open.
3. Soften the usage description
Instead of “to show you personalised ads”:
“We need this permission to show you content and ads that are relevant to you. Your privacy is our priority.”
Transparent and human. Within Apple’s guidelines, no reject risk.
4. Localisation
English prompt on English devices, localised prompt on localised devices. Two variants in Localizable.strings.
5. Split the two prompts apart
We asked for notifications and tracking permissions in different sessions. Notifications at the end of session one (after a successful task), tracking at the start of session two.
6. Educate the decliners
If the user declines, we say “ok” and move on, no pressure. But in the settings screen there’s a “Personalised ads” section. If they change their mind, they can jump to system settings from there.
What Apple actually allows
- The pre-prompt cannot be misleading. Threats like “the app won’t work without permission” are not allowed.
- Rewarding consent isn’t formally banned but it’s on the edge (extra lives, a discount). Apple treats it as “rewarded tracking” and it carries reject risk. Don’t.
- Don’t make the pre-prompt impossible to dismiss.
- Ask only once. If the user declines, you can’t fire the system prompt again (iOS enforces this anyway), and you shouldn’t resurface the pre-prompt either.
The fallback: SKAdNetwork
Even if ATT is declined, SKAdNetwork (SKAN) attribution is still available. Anonymous but limited. Campaign ID, conversion value, that sort of thing. If your attribution provider (AppsFlyer, Adjust, Singular) supports SKAN, the hybrid approach preserves most of your power.
What to measure
- Pre-prompt impressions
- Pre-prompt continue rate
- System prompt impressions
- System prompt authorisation rate
- Total opt-in rate (product of the last two)
- Funnel drop-off analysis
We A/B tested every step. Multiple pre-prompt copy variants. The best performer was conversational, friendly copy. Corporate language converted worse.
Takeaway
ATT opt-in is a UX problem. The right moment, the right language, the right number of steps, they all move the needle. 50%+ is achievable if you design for it.