[iOS] 4. Werken met ATT (App Tracking Transparency / iOS)
Werken met ATT (App Tracking Transparency) op iOS
ATT en toestemmingsbeheer zijn aparte systemen Dat U moeten handmatig worden gecoördineerd.
Deze handleiding legt uit hoe u Apple's App-trackingtransparantie (ATT) Framework met onze CMP SDK. ATT is een vereiste op platformniveau (Apple), terwijl CMP de wettelijke/regulerende toestemming beheert. Beide moeten samenwerken om naleving en correct SDK-gedrag te garanderen.
-
Het ATT-dialoogvenster en het toestemmingslaagadres (CMP) verschillende rechtsgrondslagen en reikwijdtes.
-
ATT is Apple's mechanisme om toestemming van de gebruiker te verkrijgen voor cross-app tracking (bijvoorbeeld het delen van identificatiegegevens zoals IDFA met derden voor reclamedoeleinden).
-
De toestemmingslaag (CMP) regeert cookie- en SDK-gebruik voor doeleinden zoals analyse, personalisatie, meting of essentiële app-functies — zoals vereist door AVG/ePrivacy en soortgelijke wettenAls voorbeelden kunnen we Firebase (GFA), Crashlytics, OneSignal, MixPanel, Sentry, enz. noemen. Geen van deze heeft direct betrekking op ATT, maar je moet toestemming verzamelen in ieder geval niet van de gebruiker.
-
Zelfs als een gebruiker op systeemniveau op iOS “Vraag app om niet te volgen” selecteert, zal uw app kan nog steeds bepaalde soorten gegevens verwerken (bijvoorbeeld functionele cookies, SDK's voor metingen of andere technische hulpmiddelen) die een wettelijke basis of toestemming nodig hebben op grond van de privacywetgevingDaarom moet de toestemmingslaag nog steeds worden weergegeven, zodat de gebruiker zijn of haar keuze met betrekking tot deze technologieën kan uitoefenen. Zorg ervoor dat dit niet het geval is, aangezien Als u besluit de toestemmingslaag niet weer te geven, maar toch een SDK laadt die gegevens naar servers van het apparaat verwerkt, zelfs met verschillende doeleinden/leveranciers, wordt uw app geblokkeerd.
Stap 1: Vereisten
-
Minimale iOS-versie: iOS 14 (ATT niet beschikbaar op eerdere versies)
-
Voeg de AppTrackingTransparantie.framework aan uw project
-
In uw Info.plist, voeg toe:
<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads and improve user experience.</string>
-
De string moet duidelijk uitleggen waarom u tracking aanvraagt
Apple kan vage formuleringen afwijzen.
Alle ATT-verwerking moet worden beheerd via de mobiele app zelf en niet via onze SDK, omdat onze SDK geen kennis heeft van de levenscyclus van de mobiele app die deze integreert. ATT-verzoek moet worden weergegeven en volledig worden afgehandeld vaardigheden onze SDKen het ATT-dialoogvenster mag niet tegelijkertijd met of boven op onze toestemmingslaag worden geladen. Zorg ervoor dat u onze toestemmingslaag alleen laadt via checkAndOpen() or forceOpen() methoden na het verwerken van de ATT-aanvraag en ervoor zorgen dat de keuze van de gebruiker met betrekking tot ATT reeds op het apparaat is bijgewerkt. Niet laad onze toestemmingslaag vaardigheden dat.
Stap 2: Controleer ATT-status
Controleer de huidige ATT-autorisatiestatus voordat u tracking-SDK's initialiseert:
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
}
}
Stap 3: ATT-autorisatie aanvragen
Als de status is .notDetermined, autorisatie aanvragen wanneer de app actief is:
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { status in
DispatchQueue.main.async {
self.didReceiveATTStatus(status)
}
}
} else {
// iOS < 14: proceed to CMP directly
openCMP()
}
Stap 4: ATT-resultaat verwerken
Definieer hoe het ATT-resultaat moet worden verwerkt en start vervolgens CMP:
func didReceiveATTStatus(_ status: ATTrackingManager.AuthorizationStatus) {
switch status {
case .authorized:
openCMP()
case .denied, .restricted:
rejectAdPurposesAndVendors {
self.openCMP()
}
case .notDetermined:
openCMP()
@unknown default:
openCMP()
}
}
Stap 5: CMP starten
Nadat ATT is opgelost, bepaalt u de ATT-status in de CMP-gebruikersinterface. U kunt de CMP-gebruikersinterface openen om wettelijke/regulerende toestemming te verzamelen met behulp van een gericht ontwerp:
private func openCMP() {
CMPManager.shared.settATTStatus = // insert here the ATT status retrieved
//from ATTManager.AuthorizationStatus
CMPManager.shared.checkAndOpen()
}
Stap 6: Beslissingstabel — ATT × CMP-gedrag × SDK-acties
| ATT-status | IDFA | CMP-gedrag | SDK-acties |
|---|---|---|---|
.notDetermined |
Nee | Wacht op de ATT-prompt en start vervolgens CMP. | Initialiseer de trackers nog niet. |
.authorized |
Ja | Verzamel gedetailleerde CMP-toestemming. | Schakel advertenties/analyses alleen in als CMP dit toestaat. |
.denied |
Nee | Beschouw reclame/profilering als afgewezen. | Advertentiedoeleinden/leveranciers programmatisch afwijzen en vervolgens CMP weergeven voor niet-trackingdoeleinden. |
.restricted |
Nee | Hetzelfde als geweigerd. | Advertentiedoeleinden/leveranciers afwijzen en vervolgens CMP openen. |
| iOS < 14 | NB | Sla ATT over, gebruik alleen CMP. | Blokkeren totdat CMP is opgelost. |
Stap 7: ATT-bewuste API-recepten
Advertentiedoeleinden/leveranciers afwijzen wanneer ATT is geweigerd of beperkt
func rejectAdPurposesAndVendors(completion: @escaping () -> Void) {
let adPurposeIds = ["c52", "c53"] // Example purposes
CMPManager.shared.rejectPurposes(adPurposeIds, updateVendor: true)
}
(OF) Advertentiedoeleinden/leveranciers vóór de toekenning wanneer ATT dit heeft geautoriseerd
func pregrantAdPurposesAndVendorsThenOpenCMP() {
let adPurposeIds = ["c52", "c53"]
CMPManager.shared.acceptPurposes(adPurposeIds, updatePurpose: true)
}
Stap 8: Controleer opnieuw op App Resume
ATT kan worden gewijzigd in de instellingen. Controleer dit altijd opnieuw bij het hervatten:
Stap 9: Randgevallen en terugvalopties
Stap 10: Testen en debuggen
-
Gebruik een verse installatie om de ATT-prompt te activeren.
-
Test alle toestanden:
.authorized,.denied,.restricted,.notDetermined. -
Schakel ATT in Simulator/Fysiek apparaat in onder Instellingen → Privacy en beveiliging → Tracking.
-
Logboekuitvoer om te bevestigen dat CMP pas wordt gestart nadat ATT is opgelost.
Stap 11: Beste praktijken
- Initialiseer trackers nooit voordat de ATT + CMP-stroom is voltooid.
- Maak verstandig gebruik van pre-prompts; misleid gebruikers nooit, want dit kan tot blokkering leiden.
- Laat de CMP UI niet overlappen met de ATT-prompt.
- Geef gebruikers de mogelijkheid om CMP op elk gewenst moment opnieuw te openen.
- Houd er rekening mee dat Apple Review uw gegevens afwijst als tracking plaatsvindt voordat ATT toestemming heeft gegeven.
Stap 12: Checklist voor ontwikkelaars
-
Toevoegen
AppTrackingTransparency.framework. -
Toevoegen
NSUserTrackingUsageDescriptionnaar Info.plist. -
Controleer ATT-status bij het opstarten.
-
Optioneel pre-prompt weergeven.
-
Vraag ATT aan als
.notDetermined. -
ATT-resultaten verwerken (leveranciers/doeleinden accepteren/afwijzen).
-
Start CMP nadat ATT voltooid is.
-
Initialiseer/blokkeer SDK's pas nadat CMP is opgelost.
-
Controleer ATT opnieuw bij het hervatten van de app.
-
Bied een CMP-heropeningsoptie.
-
Test alle stromen.







