Arbeiten mit ATT (App Tracking Transparency) auf iOS
ATT und Consent Management sind separate Systeme, die Sie manuell koordinieren müssen.
Dieser Leitfaden erklärt, wie man Apples „App Tracking Transparency“ (ATT)-Framework korrekt in unser CMP-SDK integriert. ATT ist eine plattformseitige Anforderung (Apple), während CMP die rechtliche/regulatorische Einwilligung verwaltet. Beide müssen zusammenarbeiten, um die Einhaltung der Vorschriften und das ordnungsgemäße Verhalten des SDK sicherzustellen.
Die iOS-App-Tracking-Transparenz (ATT) und die Einwilligungsverwaltung gemäß DSGVO/ePrivacy
serve different purposesund betreiben
independentlyWir empfehlen, dies zu überprüfen.
no SDK whatsoeverwird geladen
beforeUnser ATT-Dialog
and beforeunser SDK. Basierend auf den vom Nutzer getroffenen Entscheidungen auf
bothDer ATT-Dialog und unsere Einwilligungsschicht, Laden der angegebenen SDKs oder nicht.
Zur Verdeutlichung:
-
Der ATT-Dialog und die Einwilligungsschicht (CMP) beziehen sich auf unterschiedliche Rechtsgrundlagen und Anwendungsbereiche.
-
ATT ist Apples Mechanismus, um die Zustimmung der Nutzer für das app-übergreifende Tracking einzuholen (d. h. die Weitergabe von Identifikatoren wie IDFA an Dritte zu Werbezwecken).
-
Die Einwilligungsschicht (CMP) regelt die Verwendung von Cookies und SDKs für Zwecke wie Analysen, Personalisierung, Messung oder wesentliche App-Funktionen – wie von der DSGVO/ePrivacy und ähnlichen Gesetzen vorgeschrieben. Als Beispiele seien hier Firebase (GFA), Crashlytics, OneSignal, MixPanel, Sentry usw. genannt. Keines dieser Dienste steht in direktem Zusammenhang mit ATT, aber du musst dennoch die Einwilligung des Nutzers einholen.
-
Selbst wenn ein Nutzer auf iOS-Systemebene „App bitten, nicht zu tracken“ auswählt, verarbeitet Ihre App möglicherweise weiterhin bestimmte Arten von Daten (z. B. funktionale Cookies, Mess-SDKs oder andere technische Tools), die nach Datenschutzgesetzen eine rechtmäßige Grundlage oder Einwilligung erfordern. Daher muss die Einwilligungsmaske weiterhin angezeigt werden, damit der Nutzer seine Entscheidung bezüglich dieser Technologien treffen kann. Stellen Sie sicher, dass dies bei Ihnen nicht der Fall ist, denn wenn Sie die Einwilligungsmaske nicht anzeigen lassen, aber dennoch ein SDK laden, das Daten vom Gerät an Server übermittelt – selbst wenn dies zu anderen Zwecken oder von anderen Anbietern geschieht –, wird Ihre App blockiert.
Schritt 1: Voraussetzungen
-
Mindestversion für iOS: iOS 14 (ATT ist in früheren Versionen nicht verfügbar)
-
Fügen Sie das AppTrackingTransparency.framework zu Ihrem Projekt hinzu
-
Fügen Sie in Ihrer Info.plist Folgendes hinzu:
<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads and improve user experience.</string>
-
Der Text muss klar erklären, warum Sie Tracking anfordern
Apple lehnt möglicherweise vage Formulierungen ab.
Die gesamte ATT-Abwicklung muss in der mobilen App selbst erfolgen und nicht über unser SDK, da unser SDK den Lebenszyklus der mobilen App, in die es integriert ist, nicht kennt. Die ATT-Anfrage muss vor unserem SDK angezeigt und vollständig abgewickelt werden, und der ATT-Dialog sollte nicht gleichzeitig oder über unserer Einwilligungsschicht geladen werden. Stellen Sie sicher, dass Sie unsere Einwilligungsschicht nur über checkAndOpen() oder forceOpen() , nachdem die ATT-Anfrage bearbeitet wurde und sichergestellt ist, dass die Entscheidung des Nutzers bezüglich ATT bereits auf dem Gerät aktualisiert wurde. Laden Sie unsere Einwilligungsschicht nicht vor diesem Zeitpunkt.
Schritt 2: ATT-Status prüfen
Überprüfen Sie den aktuellen ATT-Autorisierungsstatus, bevor Sie Tracking-SDKs initialisieren:
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
}
}
Schritt 3: ATT-Genehmigung beantragen
Wenn der Status .notDetermined, erteile die Berechtigung, wenn die App aktiv ist:
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { status in
DispatchQueue.main.async {
self.didReceiveATTStatus(status)
}
}
} else {
// iOS < 14: proceed to CMP directly
openCMP()
}
Schritt 4: ATT-Ergebnis bearbeiten
Legen Sie fest, wie das ATT-Ergebnis verarbeitet werden soll, und starten Sie dann die CMP:
func didReceiveATTStatus(_ status: ATTrackingManager.AuthorizationStatus) {
switch status {
case .authorized:
openCMP()
case .denied, .restricted:
rejectAdPurposesAndVendors {
self.openCMP()
}
case .notDetermined:
openCMP()
@unknown default:
openCMP()
}
}
Schritt 5: CMP starten
Nachdem die ATT-Abfrage abgeschlossen ist, ermitteln Sie den ATT-Status, damit die CMP-Benutzeroberfläche geöffnet werden kann, um mithilfe eines zielgerichteten Designs die rechtliche/regulatorische Einwilligung einzuholen:
private func openCMP() {
CMPManager.shared.setATTStatus = // insert here the ATT status retrieved
//from ATTManager.AuthorizationStatus
CMPManager.shared.checkAndOpen()
}
Schritt 6: Entscheidungstabelle – ATT × CMP-Verhalten × SDK-Aktionen
| ATT-Status | IDFA | CMP-Verhalten | SDK-Aktionen |
|---|---|---|---|
.notDetermined |
Nein | Auf die ATT-Eingabeaufforderung warten, dann CMP starten. | Tracker noch nicht initialisieren. |
.authorized |
Ja | Erfassen Sie detaillierte CMP-Einwilligungen. | Aktivieren Sie Werbung/Analytik nur, wenn CMP dies zulässt. |
.denied |
Nein | Behandeln Sie Werbung/Profiling als abgelehnt. | Lehnen Sie Werbezwecke/Anbieter programmgesteuert ab und zeigen Sie dann das CMP für Nicht-Tracking-Zwecke an. |
.restricted |
Nein | Wie bei „Abgelehnt“. | Werbezwecke/Anbieter ablehnen und anschließend CMP öffnen. |
| iOS < 14 | Nicht zutreffend | ATT überspringen, nur CMP verwenden. | Blockieren, bis CMP aufgelöst ist. |
Schritt 7: ATT-Aware-API-Rezepte
Lehnen Sie Werbezwecke/Anbieter ab, wenn ATT abgelehnt oder eingeschränkt wurde
func rejectAdPurposesAndVendors(completion: @escaping () -> Void) {
let adPurposeIds = ["c52", "c53"] // Example purposes
CMPManager.shared.rejectPurposes(adPurposeIds, updateVendor: true)
}
(ODER) Vorab genehmigte Werbezwecke/Anbieter, wenn ATT autorisiert ist
func pregrantAdPurposesAndVendorsThenOpenCMP() {
let adPurposeIds = ["c52", "c53"]
CMPManager.shared.acceptPurposes(adPurposeIds, updatePurpose: true)
}
Schritt 8: Überprüfen Sie den App-Lebenslauf noch einmal
Die automatische Übersetzung kann in den Einstellungen geändert werden. Überprüfen Sie die Übersetzung im Lebenslauf immer noch einmal:
Schritt 9: Sonderfälle und Ausweichlösungen
-
Eingeschränkt: ATT nicht verfügbar (z. B. Kindersicherung). Tracking blockieren.
-
iOS < 14: Kein ATT → verwende nur CMP.
-
Eingabeaufforderung nicht verfügbar: ATT muss angefordert werden, wenn die App aktiv ist.
-
Benutzerablehnung: Behandeln Sie Werbezwecke/Anbieter als abgelehnt.
Schritt 10: Testen & Debuggen
-
Verwenden Sie eine Neuinstallation, um die ATT-Aufforderung auszulösen.
-
Testen Sie alle Zustände:
.authorized,.denied,.restricted,.notDetermined. -
Schalte ATT im Simulator/auf dem physischen Gerät unter „Einstellungen“ → „Datenschutz & Sicherheit“ → „Tracking“ ein.
-
Protokolliere die Ausgaben, um sicherzustellen, dass CMP erst nach der Auflösung von ATT gestartet wird.
Schritt 11: Best Practices
- Initialisieren Sie Tracker niemals, bevor der ATT- und CMP-Ablauf abgeschlossen ist.
- Setzen Sie Vorab-Hinweise sinnvoll ein; führen Sie Nutzer niemals in die Irre, da dies zu Blockierungen führen könnte.
- Die CMP-Benutzeroberfläche darf sich nicht mit der ATT-Eingabeaufforderung überschneiden.
- Ermöglichen Sie es den Nutzern, die CMP jederzeit erneut zu öffnen.
- Rechnen Sie mit einer Ablehnung durch Apple Review, wenn vor der ATT-Genehmigung ein Tracking stattfindet.
Schritt 12: Checkliste für Entwickler
-
Hinzufügen
AppTrackingTransparency.framework. -
Füge
NSUserTrackingUsageDescriptionzu Info.plist. -
Überprüfen Sie den ATT-Status beim Start.
-
Optional: Vorab-Hinweis anzeigen.
-
ATT anfordern, wenn
.notDetermined. -
Behandeln Sie das ATT-Ergebnis (akzeptieren/lehnen Sie Anbieter/Zwecke entsprechend ab).
-
Starten Sie CMP, nachdem ATT abgeschlossen ist.
-
Initialisiere/blockiere SDKs erst, nachdem die CMP aufgelöst wurde.
-
Überprüfen Sie die ATT im App-Lebenslauf noch einmal.
-
Biete eine Option zur Wiederaufnahme des CMP an.
-
Testen Sie alle Abläufe.