[iOS] 4. Arbeiten mit ATT (App Tracking Transparency / iOS)

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 purposes

und betreiben

independently

Wir empfehlen, dies zu überprüfen. 

no SDK whatsoever

 wird geladen 

before

 Unser ATT-Dialog 

and before

unser SDK. Basierend auf den vom Nutzer getroffenen Entscheidungen auf 

both

Der 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 NSUserTrackingUsageDescription zu 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.


Referenzen

We do our best to keep this purely informative documentation up to date. However, if you notice that any of these guides need a little touch-up, let us know!