App Tracking Transparency (ATT) è un meccanismo iOS che richiede il consenso esplicito dell’utente per accedere all’identificatore pubblicitario IDFA prima del tracciamento in app e siti web. Introdotto in iOS 14.5, ATT ha obbligato tutti gli sviluppatori a mostrare un dialogo di sistema che richiede l’autorizzazione al tracciamento. Secondo la Documentazione per Sviluppatori Apple, ogni app che utilizza IDFA per pubblicità mirata o attribuzione deve integrare il framework ATT e ottenere l’autorizzazione di accesso.
Punti chiave
App Tracking Transparency è un framework di Apple per proteggere la privacy degli utenti, presentato in iOS 14.5. Richiede che le app ottengano l’autorizzazione esplicita per accedere all’identificatore pubblicitario del dispositivo (IDFA) prima di utilizzarlo per il tracciamento.
Prima di ATT, gli sviluppatori potevano leggere l’IDFA senza chiedere il permesso, consentendo alle reti pubblicitarie di creare profili utente e tracciare la loro attività tra app e siti web. Apple ha considerato questo una violazione della privacy e ha introdotto un dialogo di consenso obbligatorio.
Il framework è disponibile da iOS 14.0, ma è diventato obbligatorio per tutte le app che utilizzano IDFA con il rilascio di iOS 14.5 nell’aprile 2021. Secondo Flurry Analytics, dopo l’implementazione di ATT, meno del 25% degli utenti statunitensi ha acconsentito al tracciamento, cambiando radicalmente il mercato della pubblicità mobile.
ATT verifica l’autorizzazione tramite un dialogo di sistema speciale che l’app non può modificare o aggirare. L’utente vede un popup standard con il testo fornito dallo sviluppatore e sceglie tra “Consenti” o “Chiedi all’app di non tracciare”.
Apple posiziona ATT come parte della sua strategia complessiva sulla privacy, che include anche le Etichette nutrizionali sulla privacy nell’App Store e il Manifesto della privacy. Tutti e tre i meccanismi lavorano insieme: le etichette mostrano quali dati raccoglie l’app, il Manifesto dichiara le ragioni dell’uso delle API e ATT dà all’utente il controllo sul tracciamento.
Rifiutare il tracciamento non blocca il funzionamento dell’app stessa — gli utenti possono continuare a utilizzare tutte le funzionalità, ma le reti pubblicitarie non riceveranno l’IDFA per personalizzazione e attribuzione. Le alternative di Apple all’IDFA includono SKAdNetwork e l’attribuzione probabilistica.
Secondo Branch Metrics, dopo l’introduzione di ATT, la percentuale di app che ricevono IDFA è passata dal 70% al 20% a livello globale. Ciò ha portato a una revisione degli approcci all’attribuzione delle installazioni e alla monetizzazione pubblicitaria.
In iOS 15, Apple non ha inasprito i requisiti ATT ma ha aggiunto il Report sulla privacy delle app — un report che mostra all’utente la frequenza con cui le app accedono a sensori e dati. iOS 16 ha ampliato il controllo: l’utente può modificare le impostazioni di tracciamento in qualsiasi momento tramite Impostazioni → Privacy → Tracciamento.
Importante: se l’utente seleziona “Chiedi all’app di non tracciare” nel dialogo ATT, l’app non riceve il valore IDFA — invece, restituisce una stringa di zeri: 00000000-0000-0000-0000-000000000000. Tentare di leggere l’IDFA con altri mezzi o metodi alternativi porta al rifiuto dell’app nell’App Store.
A partire da iOS 17, Apple ha rafforzato i controlli: se un’app richiede IDFA senza mostrare il dialogo di sistema ATT, riceve un rifiuto a livello di sistema operativo, non solo un identificatore vuoto. Ciò elimina la possibilità di raccolta in background dell’IDFA all’insaputa dell’utente.
Il processo di richiesta ATT consiste in tre fasi: verifica dello stato, visualizzazione del dialogo di sistema e elaborazione della risposta. Lo sviluppatore non può saltare nessun passaggio — il sistema operativo controlla ogni fase.
Prima di chiamare il dialogo, l’app deve verificare lo stato corrente tramite ATTrackingManager. Gli stati possibili sono: notDetermined (non ancora richiesto), restricted (vietato dalle policy del dispositivo), denied (utente rifiutato), authorized (consentito).
Se lo stato è già determinato (authorized o denied), il dialogo non può essere chiamato di nuovo — l’utente ha preso una decisione permanente. L’unico modo per cambiare decisione è attraverso le impostazioni di sistema iOS.
Per verificare lo stato si utilizza la proprietà ATTrackingManager.trackingAuthorizationStatus. La chiamata deve avvenire sul thread principale poiché il dialogo di sistema è un componente dell’interfaccia utente.
import AppTrackingTransparency
import AdSupport
func checkTrackingStatus() {
let status = ATTrackingManager.trackingAuthorizationStatus
switch status {
case .notDetermined:
requestTrackingPermission()
case .authorized:
readIDFA()
case .denied, .restricted:
useAlternativeTracking()
@unknown default:
break
}
}
Per mostrare il dialogo, si chiama il metodo requestTrackingAuthorization con una closure che riceve il risultato della scelta dell’utente. Importante: il dialogo viene mostrato una sola volta. Se lo sviluppatore tenta di chiamarlo di nuovo, il sistema ignora la richiesta.
Il testo del dialogo è composto da due parti: un’intestazione di sistema (che non può essere modificata) e un messaggio personalizzato che lo sviluppatore specifica in Info.plist tramite la chiave NSUserTrackingUsageDescription.
Il dialogo dovrebbe apparire in un contesto naturale — non immediatamente all’avvio dell’app, ma al primo tentativo di utilizzare funzionalità legate al tracciamento. Apple consiglia di mostrare il dialogo dopo che l’utente ha compreso il valore della funzionalità.
func requestTrackingPermission() {
ATTrackingManager.requestTrackingAuthorization { status in
DispatchQueue.main.async {
switch status {
case .authorized:
let idfa = ASIdentifierManager.shared().advertisingIdentifier
print("IDFA: \(idfa)")
case .denied:
print("L’utente ha rifiutato il tracciamento")
default:
break
}
}
}
}
IDFA (Identifier for Advertisers) è un identificatore pubblicitario unico per i dispositivi iOS, utilizzato per pubblicità mirata e attribuzione delle installazioni. Prima di ATT, gli sviluppatori lo ottenevano tramite ASIdentifierManager senza restrizioni. Dopo ATT, l’accesso a IDFA è bloccato fino a quando l’utente non dà il consenso esplicito.
IDFA è una stringa UUID unica per ogni dispositivo iOS. Le reti pubblicitarie utilizzano IDFA per: tracciare le installazioni delle app (attribuzione), mostrare annunci pertinenti basati sugli interessi dell’utente, misurare l’efficacia delle campagne pubblicitarie e il retargeting — recuperare gli utenti che non hanno completato un’azione desiderata.
Dopo che l’utente rifiuta il tracciamento, ASIdentifierManager restituisce il valore 00000000-0000-0000-0000-000000000000. L’app può ancora leggere IDFA per scopi tecnici (come antifrode), ma non può trasmetterlo alle reti pubblicitarie.
Secondo Singular (2024), il tasso globale di consenso ATT è del 25–35%, con l’Europa (GDPR) che mostra tassi più alti (40–50%) rispetto agli Stati Uniti (15–25%). Ciò ha spinto le piattaforme pubblicitarie a sviluppare metodi di attribuzione alternativi.
SKAdNetwork è un framework di Apple per l’attribuzione delle installazioni senza esporre IDFA. Funziona a livello di sistema operativo: la rete pubblicitaria invia un postback firmato, che Apple convalida e inoltra allo sviluppatore. L’attribuzione avviene senza identificare un utente specifico, solo a livello di campagna.
L’attribuzione probabilistica utilizza molteplici segnali del dispositivo — modello, versione iOS, fuso orario, luminosità dello schermo — per abbinare probabilisticamente le installazioni alle impressioni pubblicitarie. Tuttavia, Apple vieta questo metodo nelle sue linee guida e il suo utilizzo può portare al rifiuto dell’app.
Google, Adjust e AppsFlyer hanno sviluppato le proprie soluzioni ibride che combinano SKAdNetwork con dati aggregati proprietari. Ad esempio, Google Ads Conversion Tracking utilizza i postback SKAdNetwork e i propri modelli di machine learning per l’attribuzione senza IDFA.
Per integrare ATT, è necessario aggiungere la chiave NSUserTrackingUsageDescription in Info.plist e importare il framework AppTrackingTransparency. Di seguito sono riportati i passaggi per Swift e Objective-C.
Il primo passo è aggiungere la chiave NSUserTrackingUsageDescription in Info.plist con un testo che spiega perché l’app ha bisogno del tracciamento. Questo testo verrà visualizzato nel dialogo di sistema. Esempio: “Il tuo IDFA viene utilizzato per mostrare annunci personalizzati e monitorare l’efficacia delle campagne.”
Senza questa chiave, chiamare requestTrackingAuthorization causerà un crash dell’app — Apple verifica esplicitamente la presenza di NSUserTrackingUsageDescription prima di mostrare il dialogo. Il testo deve essere conciso, specifico e riflettere l’uso effettivo dei dati.
Importante: la chiave viene aggiunta manualmente tramite la scheda Info di Xcode o modificando il sorgente XML di Info.plist. Dopo l’aggiunta, ricostruisci il progetto e verifica che la chiave appaia nel binario finale.
<!-- Info.plist -->
<key>NSUserTrackingUsageDescription</key>
<string>This identifier is used to deliver
personalized ads and measure campaign performance.</string>
In un progetto reale, è meglio chiamare la richiesta ATT prima del primo avvio di un modulo pubblicitario o tracker. Si consiglia di spiegare prima il valore del consenso su una schermata separata (prompt di pre-autorizzazione) — questo aumenta i tassi di consenso del 20–30%.
Un prompt di pre-autorizzazione è un’interfaccia utente personalizzata che mostra il vantaggio di attivare il tracciamento (“Aiutaci a mostrarti annunci pertinenti”). Solo dopo aver toccato “Continua” appare il dialogo di sistema ATT. Adjust (2024) ha registrato un aumento del 40% del consenso utilizzando una schermata di pre-autorizzazione.
final class TrackingManager {
static let shared = TrackingManager()
func requestTrackingIfNeeded() {
guard ATTrackingManager.trackingAuthorizationStatus
== .notDetermined
else { return }
ATTrackingManager.requestTrackingAuthorization { _ in
NotificationCenter.default.post(
Notification(Name("trackingStatusChanged"))
)
}
}
}
Gli sviluppatori commettono spesso errori tipici durante l’integrazione di ATT, che portano a una minore conversione del consenso o al rifiuto dell’app da parte dei revisori dell’App Store. Esaminiamo i cinque problemi più comuni.
L’errore più comune è mostrare il dialogo di sistema ATT sulla prima schermata subito dopo il caricamento dell’app. L’utente non comprende ancora il valore dell’app e probabilmente preme “Rifiuta”. IronSource (2023) ha mostrato un calo del 32% del consenso quando richiesto sulla prima schermata rispetto alla richiesta dopo la terza sessione.
Raccomandazione: richiedi il tracciamento dopo che l’utente ha eseguito un’azione di valore (visualizzato contenuto, iniziato l’onboarding) o dopo 3–5 sessioni di utilizzo dell’app. Questo aumenta la fiducia e la percezione del valore.
Mostrare il dialogo di sistema ATT senza spiegazione preliminare è un errore che riduce la conversione al 15–20%. L’utente vede una richiesta inaspettata e la rifiuta istintivamente. Una schermata di pre-autorizzazione che spiega il vantaggio aumenta il consenso al 35–45%.
Il testo di pre-autorizzazione deve essere specifico: “Permettici di mostrarti annunci pertinenti — questo ci aiuta a rimanere gratuiti.” Evita frasi vaghe — riducono la fiducia. GameAnalytics ha mostrato nel 2023 che una schermata di pre-autorizzazione che spiega il vantaggio genera il 28% in più di consensi rispetto a una schermata vuota.
Se l’utente ha già rifiutato il tracciamento o lo stato è restricted (controllo parentale, policy aziendali), l’app non deve chiamare di nuovo il dialogo ATT. Una chiamata ripetuta non funziona e viene percepita come una violazione della privacy. Invece, passa a SKAdNetwork e pubblicità contestuale.
Nello stato restricted, l’app non può determinare se l’opzione “Consenti richieste di tracciamento” è attivata nelle impostazioni. In questo caso, utilizza sempre SKAdNetwork come unico metodo di attribuzione e non mostrare una schermata di pre-autorizzazione.
Leggere IDFA tramite ASIdentifierManager.shared().advertisingIdentifier senza previa autorizzazione ATT restituisce una stringa di zeri. Alcuni sviluppatori tentano di utilizzare vecchi metodi di accesso a IDFA tramite API private — questo garantisce il rifiuto durante la revisione dell’app.
Apple utilizza l’analisi statica del codice e il machine learning per rilevare i bypass. Anche se l’app supera la revisione, gli aggiornamenti successivi o i controlli automatici potrebbero rivelare la violazione e portare al ban dell’account sviluppatore.
Un testo troppo lungo, vago o fuorviante nella chiave NSUserTrackingUsageDescription è motivo di rifiuto da parte dei revisori. Apple verifica che la descrizione corrisponda all’uso effettivo dei dati. Se l’app non ha pubblicità ma indica “a scopo pubblicitario”, il revisore rifiuterà il build.
Formato consigliato: una descrizione specifica dello scopo dell’utilizzo di IDFA, di 2–3 frasi. Esempio per un’app senza pubblicità: “L’identificatore viene utilizzato per analisi e prevenzione delle frodi. I dati non vengono condivisi con terze parti e non vengono utilizzati per la profilazione.”
Domande frequenti
Se un’app utilizza IDFA o tracciamento senza ATT, Apple la rifiuterà durante la revisione. Anche in assenza di tracciamento, si consiglia di aggiungere ATT per trasparenza — altrimenti, il rischio di rifiuto aumenta con ogni aggiornamento.
Sì, l’app funziona perfettamente, ma le reti pubblicitarie non riceveranno l’IDFA per personalizzazione e attribuzione. Tutte le funzionalità dell’app, tranne gli annunci personalizzati, rimangono disponibili.
Sì, l’utente può modificare la propria decisione in qualsiasi momento tramite Impostazioni → Privacy → Tracciamento. L’app non può reimpostare programmaticamente lo stato — solo tramite le impostazioni di sistema.
Utilizza una schermata di pre-autorizzazione che spiega il vantaggio e richiedi il tracciamento non al primo avvio, ma dopo che l’utente ha eseguito un’azione di valore. Meta (2024) ha mostrato un aumento del 35% dei consensi con richieste ritardate.
Le app nella categoria “Bambini” non possono utilizzare IDFA e ATT per il tracciamento secondo le regole di Apple. È inoltre vietato condividere dati con terze parti per analisi o pubblicità.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche