[iOS] 4. Travailler avec ATT (App Tracking Transparency / iOS)
Travailler avec ATT (App Tracking Transparency) sur iOS
ATT et gestion du consentement sont des systèmes distincts que vous doit coordonner manuellement.
Ce guide explique comment intégrer correctement les fonctionnalités d'Apple Transparence du suivi des applications (ATT) Cadre avec notre SDK CMP. ATT est une exigence de plateforme (Apple), tandis que CMP gère le consentement légal/réglementaire. Les deux doivent collaborer pour garantir la conformité et le bon fonctionnement du SDK.
-
La boîte de dialogue ATT et l'adresse de la couche de consentement (CMP) différentes bases juridiques et champs d'application.
-
ATT est le mécanisme d'Apple pour obtenir l'autorisation de l'utilisateur pour suivi inter-applications (c'est-à-dire le partage d'identifiants comme l'IDFA avec des tiers à des fins publicitaires).
-
La couche de consentement (CMP) gouverne utilisation des cookies et du SDK à des fins telles que l'analyse, la personnalisation, la mesure ou les fonctions essentielles de l'application — comme l'exige le RGPD/ePrivacy et les lois similaires. À titre d’exemples, nous pouvons citer Firebase (GFA), Crashlytics, OneSignal, MixPanel, Sentry, etc. Aucun de ceux-ci n’est directement lié à ATT, mais vous devez recueillir le consentement de l'utilisateur de toute façon.
-
Même si un utilisateur sélectionne « Demander à l'application de ne pas suivre » au niveau du système sur iOS, votre application peut encore traiter certains types de données (par exemple, des cookies fonctionnels, des SDK de mesure ou d'autres outils techniques) qui nécessitent une base légale ou un consentement en vertu des lois sur la protection de la vie privéePar conséquent, la couche de consentement doit toujours être affichée, afin que l'utilisateur puisse exercer son choix concernant ces technologies. Assurez-vous que ce n'est pas votre cas, car si vous décidez de ne pas afficher la couche de consentement mais de charger tout de même un SDK qui gère les données sur les serveurs de l'appareil, même avec des objectifs/fournisseurs différents, votre application sera bloquée.
Étape 1 : Prérequis
-
Version iOS minimale : iOS 14 (ATT non disponible sur les versions antérieures)
-
Ajoutez le Cadre de transparence du suivi des applications à votre projet
-
Dans votre Info.plist, ajouter:
<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads and improve user experience.</string>
-
La chaîne doit clairement expliquer pourquoi vous demandez le suivi
Apple pourrait rejeter une formulation vague.
Toute la gestion ATT doit être gérée sur l'application mobile elle-même, et non via notre SDK, car notre SDK n'est pas conscient du cycle de vie de l'application mobile qui l'intègre. La demande ATT doit être affichée et entièrement traitée avant notre SDK, et la boîte de dialogue ATT ne doit pas être chargée en même temps ou au-dessus de notre couche de consentement. Assurez-vous de charger notre couche de consentement uniquement via checkAndOpen() or forceOpen() méthodes après gérer la demande ATT et s'assurer que le choix de l'utilisateur concernant ATT a déjà été mis à jour sur l'appareil. Ne pas charger notre couche de consentement avant cette.
Étape 2 : Vérifier le statut ATT
Vérifiez l’état actuel de l’autorisation ATT avant d’initialiser les SDK de suivi :
import AppTrackingTransparency
import AdSupport
if #available(iOS 14, *) {
let status = ATTrackingManager.trackingAuthorizationStatus
switch status {
case .authorized:
// IDFA available
case .denied, .restricted:
// IDFA blocked
case .notDetermined:
// Prompt will be shown later
@unknown default:
break
}
}
Étape 3 : Demander l'autorisation ATT
Si le statut est .notDetermined, demander l'autorisation lorsque l'application est active :
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { status in
DispatchQueue.main.async {
self.didReceiveATTStatus(status)
}
}
} else {
// iOS < 14: proceed to CMP directly
openCMP()
}
Étape 4 : Gérer le résultat ATT
Définissez comment traiter le résultat ATT, puis lancez CMP :
func didReceiveATTStatus(_ status: ATTrackingManager.AuthorizationStatus) {
switch status {
case .authorized:
openCMP()
case .denied, .restricted:
rejectAdPurposesAndVendors {
self.openCMP()
}
case .notDetermined:
openCMP()
@unknown default:
openCMP()
}
}
Étape 5 : Lancer CMP
Une fois le problème ATT résolu, déterminez le statut ATT. L'interface utilisateur CMP peut alors s'ouvrir pour recueillir le consentement légal/réglementaire. conception ciblée:
private func openCMP() {
CMPManager.shared.settATTStatus = // insert here the ATT status retrieved
//from ATTManager.AuthorizationStatus
CMPManager.shared.checkAndOpen()
}
Étape 6 : Tableau de décision — ATT × Comportement CMP × Actions SDK
| Statut ATT | IDFA | Comportement du CMP | Actions du SDK |
|---|---|---|---|
.notDetermined |
Non | Attendez l’invite ATT, puis lancez CMP. | N'initialisez pas encore les trackers. |
.authorized |
Oui | Recueillez le consentement CMP granulaire. | Activez les publicités/analyses uniquement si CMP le permet. |
.denied |
Non | Traitez la publicité/le profilage comme refusé. | Rejetez les objectifs/fournisseurs publicitaires par programmation, puis affichez le CMP à des fins non liées au suivi. |
.restricted |
Non | Identique à Refusé. | Rejetez les objectifs/fournisseurs d'annonces, puis ouvrez le CMP. |
| iOS < 14 | N/D | Ignorez ATT, utilisez uniquement CMP. | Bloquer jusqu'à la résolution du CMP. |
Étape 7 : Recettes d'API compatibles ATT
Rejeter les objectifs/fournisseurs publicitaires lorsque l'ATT est refusé ou restreint
func rejectAdPurposesAndVendors(completion: @escaping () -> Void) {
let adPurposeIds = ["c52", "c53"] // Example purposes
CMPManager.shared.rejectPurposes(adPurposeIds, updateVendor: true)
}
(OU) Objectifs/fournisseurs publicitaires préalables à l'octroi lorsque l'ATT l'autorise
func pregrantAdPurposesAndVendorsThenOpenCMP() {
let adPurposeIds = ["c52", "c53"]
CMPManager.shared.acceptPurposes(adPurposeIds, updatePurpose: true)
}
Étape 8 : revérifier la reprise de l'application
L'ATT peut être modifiée dans les Paramètres. Vérifiez-la toujours à la reprise :
Étape 9 : Cas limites et solutions de secours
Étape 10 : Test et débogage
-
Utiliser un nouvelle installation pour déclencher l'invite ATT.
-
Tester tous les états :
.authorized,.denied,.restricted,.notDetermined. -
Activer/désactiver ATT dans Simulateur/Appareil physique sous Paramètres → Confidentialité et sécurité → Suivi.
-
Enregistrez les sorties pour confirmer que CMP est lancé uniquement après la résolution d'ATT.
Étape 11 : Meilleures pratiques
- N'initialisez jamais les trackers avant la fin du flux ATT + CMP.
- Utilisez les pré-invites avec sagesse ; n'induisez jamais les utilisateurs en erreur, car cela pourrait entraîner un blocage.
- Ne chevauchez pas l’interface utilisateur CMP avec l’invite ATT.
- Autoriser les utilisateurs à rouvrir le CMP à tout moment.
- Attendez-vous à un rejet d'Apple Review si le suivi se produit avant l'autorisation d'ATT.
Étape 12 : Liste de contrôle du développeur
-
Ajouter
AppTrackingTransparency.framework. -
Ajouter
NSUserTrackingUsageDescriptionvers Info.plist. -
Vérifiez l'état ATT au démarrage.
-
Afficher éventuellement une pré-invite.
-
Demandez ATT si
.notDetermined. -
Gérer le résultat ATT (accepter/rejeter les fournisseurs/objectifs en conséquence).
-
Lancez CMP une fois ATT terminé.
-
Initialisez/bloquez les SDK uniquement après la résolution du CMP.
-
Revérifiez ATT sur la reprise de l'application.
-
Fournir l'option de réouverture du CMP.
-
Tester tous les flux.







