Infos
Inhalt

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

Arbeiten mit ATT (App Tracking Transparency) unter iOS

Diese Anleitung erklärt die korrekte Integration von Apples Tracking Transparency (ATT) App Framework mit unserem CMP SDK. ATT ist eine Anforderung auf Plattformebene (Apple), während CMP die rechtliche/regulatorische Zustimmung verwaltet. Beide müssen zusammenarbeiten, um Compliance und ordnungsgemäßes SDK-Verhalten sicherzustellen.

Die iOS App Tracking Transparency (ATT)-Eingabeaufforderung und Einwilligungsverwaltung unter GDPR/ePrivacy verschiedenen Zwecken dienen und bedienen unabhängigWir empfehlen, Folgendes zu überprüfen: überhaupt kein SDK ist geladen bevor unser ATT-Dialog und davor unser SDK. Basierend auf den Entscheidungen des Benutzers auf beide der ATT-Dialog und unsere Zustimmungsebene, laden oder nicht die angegebenen SDKs. 
Um klarzustellen:
  • Der ATT-Dialog und die Consent Layer (CMP)-Adresse unterschiedliche Rechtsgrundlagen und Geltungsbereiche.

    • ATT ist Apples Mechanismus, um Benutzerberechtigungen für App-übergreifendes Tracking (d. h. Weitergabe von Kennungen wie IDFA an Dritte zu Werbezwecken).

    • Die Zustimmungsebene (CMP) regelt Cookie- und SDK-Nutzung für Zwecke wie Analyse, Personalisierung, Messung oder wesentliche App-Funktionen – wie von der DSGVO/ePrivacy und ähnlichen Gesetzen gefordert. Als Beispiele können wir Firebase (GFA), Crashlytics, OneSignal, MixPanel, Sentry usw. nennen. Keiner davon ist direkt mit ATT verbunden, aber Sie müssen die Zustimmung einholen vom Benutzer sowieso. 

Selbst wenn ein Benutzer auf Systemebene unter iOS „App bitten, nicht zu verfolgen“ auswählt, kann weiterhin bestimmte Arten von Daten verarbeiten (z. B. funktionale Cookies, Mess-SDKs oder andere technische Tools), die eine Rechtsgrundlage oder Einwilligung gemäß Datenschutzgesetzen erfordern. Daher muss die Zustimmungsebene weiterhin angezeigt werden, damit der Benutzer seine Wahl bezüglich dieser Technologien treffen kann. Stellen Sie sicher, dass dies bei Ihnen nicht der Fall ist, da Wenn Sie sich dafür entscheiden, die Anzeige der Zustimmungsebene zu unterlassen, aber dennoch ein SDK laden, das Daten vom Gerät an Server weiterleitet, auch mit unterschiedlichen Zwecken/Anbietern, wird Ihre App blockiert.

Schritt 1: Voraussetzungen

  • Mindestens iOS-Version: iOS 14 (ATT war in früheren Versionen nicht verfügbar)

  • Fügen Sie AppTrackingTransparency.framework zu Ihrem Projekt

  • In Ihrem Info.plist, hinzufügen:

<key>NSUserTrackingUsageDescription</key> 
<string>This identifier will be used to deliver personalized ads and improve user experience.</string>
  • Die Zeichenfolge muss klar erklären, warum Sie die Sendungsverfolgung anfordern

Apple könnte vage Formulierungen ablehnen.

Die gesamte ATT-Verarbeitung muss über die mobile App selbst und nicht über unser SDK verwaltet werden, da unser SDK den Lebenszyklus der integrierten mobilen App nicht kennt. ATT-Anfrage muss angezeigt und vollständig bearbeitet werden bevor unser SDK, und der ATT-Dialog sollte nicht gleichzeitig oder über unserer Zustimmungsebene geladen werden. Stellen Sie sicher, dass Sie unsere Zustimmungsebene nur über checkAndOpen() or forceOpen() Methoden nachdem Bearbeiten der ATT-Anfrage und Sicherstellen, dass die Auswahl des Benutzers bezüglich ATT bereits auf dem Gerät aktualisiert wurde. Unterlassen Sie Laden Sie unsere Zustimmungsebene bevor Das. 

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-Autorisierung anfordern

Wenn der Status lautet .notDetermined, fordern Sie eine Autorisierung an, 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 verarbeiten

Definieren Sie, wie das ATT-Ergebnis verarbeitet werden soll, und starten Sie dann 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: Starten Sie CMP

Nachdem ATT abgeschlossen ist, kann der ATT-Status in der CMP-Benutzeroberfläche ermittelt werden, um die rechtliche/behördliche Zustimmung einzuholen. zielgerichtetes Design:

private func openCMP() {
    CMPManager.shared.settATTStatus =   // 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 Warten Sie auf die ATT-Eingabeaufforderung und starten Sie dann CMP. Tracker noch nicht initialisieren.
.authorized Ja Sammeln Sie detaillierte CMP-Einwilligungen. Aktivieren Sie Werbung/Analyse nur, wenn CMP dies zulässt.
.denied Nein Behandeln Sie Werbung/Profiling als abgelehnt. Lehnen Sie Werbezwecke/Anbieter programmgesteuert ab und zeigen Sie dann CMP für Nicht-Tracking-Zwecke an.
.restricted Nein Dasselbe wie „Abgelehnt“. Lehnen Sie Werbezwecke/Anbieter ab und öffnen Sie dann CMP.
iOS < 14 N / A Überspringen Sie ATT, verwenden Sie nur CMP. Blockieren, bis CMP behoben ist.

Schritt 7: ATT-Aware API-Rezepte

Anzeigenzwecke/Anbieter ablehnen, wenn ATT verweigert oder eingeschränkt ist

func rejectAdPurposesAndVendors(completion: @escaping () -> Void) {        
     let adPurposeIds = ["c52", "c53"]        // Example purposes        
     CMPManager.shared.rejectPurposes(adPurposeIds, updateVendor: true)  
}

(ODER) Werbezwecke/Anbieter vorab bewilligen, wenn ATT autorisiert ist

func pregrantAdPurposesAndVendorsThenOpenCMP() {
    let adPurposeIds = ["c52", "c53"]
    CMPManager.shared.acceptPurposes(adPurposeIds, updatePurpose: true)
}

 

Schritt 8: Überprüfen Sie den App-Lebenslauf erneut

ATT kann in den Einstellungen geändert werden. Überprüfen Sie immer erneut, wenn Sie fortfahren:

Schritt 9: Randfälle und Fallbacks

  • Beschränkt: ATT nicht verfügbar (z. B. Kindersicherung). Tracking blockieren.

  • iOS < 14: Kein ATT → nur CMP verwenden.

  • Eingabeaufforderung nicht verfügbar: ATT muss angefordert werden, wenn die App aktiv ist.

  • Benutzerverweigerung: Behandeln Sie Werbezwecke/Anbieter als abgelehnt.

Schritt 10: Testen und Debuggen

  • Verwenden Neuinstallation um die ATT-Eingabeaufforderung auszulösen.

  • Testen Sie alle Zustände: .authorized, .denied, .restricted, .notDetermined.

  • Schalten Sie ATT im Simulator/Physisches Gerät unter Einstellungen → Datenschutz & Sicherheit → Tracking.

  • Protokollausgaben zur Bestätigung von CMP-Starts erst nach der ATT-Auflösung.

Schritt 11: Best Practices

  • Initialisieren Sie Tracker niemals, bevor der ATT + CMP-Flow abgeschlossen ist.
  • Verwenden Sie Vorab-Eingabeaufforderungen mit Bedacht. Führen Sie Benutzer niemals in die Irre, da dies zu einer Blockierung führen kann.
  • Überlappen Sie die CMP-Benutzeroberfläche nicht mit der ATT-Eingabeaufforderung.
  • Erlauben Sie Benutzern, CMP jederzeit erneut zu öffnen.
  • Wenn die Verfolgung vor der ATT-Genehmigung erfolgt, ist mit einer Ablehnung durch Apple Review zu rechnen.

Schritt 12: Checkliste für Entwickler

  • Speichern AppTrackingTransparency.framework.

  • Speichern NSUserTrackingUsageDescription zu Info.plist.

  • Überprüfen Sie den ATT-Status beim Start.

  • Optional Vorabaufforderung anzeigen.

  • Fordern Sie ATT an, wenn .notDetermined.

  • Behandeln Sie das ATT-Ergebnis (akzeptieren/ablehnen Sie Anbieter/Zwecke entsprechend).

  • Starten Sie CMP, nachdem ATT abgeschlossen ist.

  • Initialisieren/blockieren Sie SDKs erst, nachdem CMP aufgelöst wurde.

  • Überprüfen Sie ATT im App-Lebenslauf erneut.

  • Stellen Sie eine CMP-Wiederöffnungsoption bereit.

  • Testen Sie alle Flows.


Referenzen

Nach oben