Informacje
Treść

[iOS] 4. Praca z ATT (przejrzystość śledzenia aplikacji / iOS)

Praca z ATT (App Tracking Transparency) w systemie iOS

W tym przewodniku wyjaśniono, jak poprawnie zintegrować oprogramowanie firmy Apple Przejrzystość śledzenia aplikacji (ATT) framework z naszym pakietem SDK CMP. ATT to wymóg na poziomie platformy (Apple), podczas gdy CMP zarządza zgodą prawną/regulacyjną. Oba te elementy muszą ze sobą współdziałać, aby zapewnić zgodność i prawidłowe działanie pakietu SDK.

Zarządzanie monitem i zgodą w ramach funkcji Przejrzystości śledzenia aplikacji iOS (ATT) zgodnie z RODO/ePrivacy służyć różnym celom i działać niezależnieZalecamy sprawdzenie, czy żadnego SDK jest załadowana zanim nasz dialog ATT a wcześniej nasz SDK. Na podstawie wyborów dokonanych przez użytkownika obie dialog ATT i nasza warstwa zgody, załaduj lub nie podane zestawy SDK. 
W celu wyjaśnienia:
  • Adres dialogowy ATT i warstwy zgody (CMP) różne podstawy prawne i zakresy.

    • ATT jest mechanizmem firmy Apple służącym do uzyskiwania zgody użytkownika na śledzenie między aplikacjami (tj. udostępnianie identyfikatorów, takich jak IDFA, osobom trzecim w celach reklamowych).

    • warstwa zgody (CMP) rządzi użycie plików cookie i zestawu SDK w celach takich jak analiza, personalizacja, pomiary lub niezbędne funkcje aplikacji — zgodnie z wymogami RODO/ePrivacy i podobnymi przepisamiJako przykłady możemy wymienić Firebase (GFA), Crashlytics, OneSignal, MixPanel, Sentry itp. Żaden z nich nie jest bezpośrednio powiązany z ATT, ale musisz zebrać zgodę w każdym razie od użytkownika. 

Nawet jeśli użytkownik wybierze opcję „Poproś aplikację o nieśledzenie” na poziomie systemu iOS, Twoja aplikacja może nadal przetwarzać pewne typy danych (na przykład pliki cookie funkcjonalne, zestawy SDK do pomiaru lub inne narzędzia techniczne), które wymagają podstawy prawnej lub zgody na mocy przepisów o ochronie prywatnościW związku z tym warstwa zgody musi być nadal wyświetlana, aby użytkownik mógł dokonać wyboru w odniesieniu do tych technologii. Upewnij się, że nie dotyczy to Twojego przypadku, ponieważ jeśli zdecydujesz się nie wyświetlać warstwy zgody, ale nadal będziesz ładować dowolny zestaw SDK, który przetwarza dane na serwerach z urządzenia, nawet w różnych celach/od różnych dostawców, Twoja aplikacja zostanie zablokowana.

Krok 1: Warunki wstępne

  • Minimalna wersja iOS: iOS 14 (ATT nie jest dostępny we wcześniejszych wersjach)

  • Dodaj Framework Transparency śledzenia aplikacji do twojego projektu

  • W twoim Info.plist, Dodaj:

<key>NSUserTrackingUsageDescription</key> 
<string>This identifier will be used to deliver personalized ads and improve user experience.</string>
  • Ciąg musi jasno wyjaśniać, dlaczego żądasz śledzenia

Apple może odrzucić niejasne sformułowania.

Całą obsługą ATT należy zarządzać z poziomu samej aplikacji mobilnej, a nie za pośrednictwem naszego zestawu SDK, ponieważ nasz zestaw SDK nie jest świadomy cyklu życia aplikacji mobilnej, z którą jest integrowany. Żądanie ATT musi zostać wyświetlone i w pełni obsłużone zanim Nasz SDK, a okno dialogowe ATT nie powinno być ładowane jednocześnie z naszą warstwą zgody ani na jej wierzchu. Upewnij się, że ładujesz tylko naszą warstwę zgody za pośrednictwem checkAndOpen() or forceOpen() metody po obsługa żądania ATT i upewnienie się, że wybór użytkownika dotyczący ATT został już zaktualizowany na urządzeniu. Czy nie załaduj naszą warstwę zgody zanim że. 

Krok 2: Sprawdź status ATT

Przed zainicjowaniem zestawów SDK śledzenia sprawdź aktualny status autoryzacji ATT:

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
    }
}

 

Krok 3: Złóż wniosek o autoryzację ATT

Jeśli stan jest .notDetermined, prośba o autoryzację, gdy aplikacja jest aktywna:

if #available(iOS 14, *) {
    ATTrackingManager.requestTrackingAuthorization { status in
        DispatchQueue.main.async {
            self.didReceiveATTStatus(status)
        }
    }
} else {
    // iOS < 14: proceed to CMP directly
    openCMP()
}

Krok 4: Obsługa wyniku ATT

Zdefiniuj sposób przetwarzania wyniku ATT, a następnie uruchom CMP:

func didReceiveATTStatus(_ status: ATTrackingManager.AuthorizationStatus) {
    switch status {
    case .authorized:
        openCMP()
    case .denied, .restricted:
        rejectAdPurposesAndVendors {
            self.openCMP()
        }
    case .notDetermined:
        openCMP()
    @unknown default:
        openCMP()
    }
}

 

Krok 5: Uruchom CMP

Po rozwiązaniu problemu ATT należy ustalić status ATT w interfejsie użytkownika CMP, aby otworzyć interfejs użytkownika CMP w celu zebrania zgody prawnej/regulacyjnej za pomocą ukierunkowany projekt:

private func openCMP() {
    CMPManager.shared.settATTStatus =   // insert here the ATT status retrieved 
      									//from ATTManager.AuthorizationStatus
    CMPManager.shared.checkAndOpen()
}

 

Krok 6: Tabela decyzyjna — ATT × Zachowanie CMP × Akcje SDK

Status ATT IDFA Zachowanie CMP Akcje SDK
.notDetermined Nie Poczekaj na monit ATT, a następnie uruchom CMP. Nie inicjuj jeszcze trackerów.
.authorized Tak Zbierz szczegółową zgodę CMP. Włącz reklamy/analizy tylko wtedy, gdy pozwala na to CMP.
.denied Nie Reklamę/profilowanie należy traktować jako odrzucone. Odrzucaj reklamy/dostawców programowo, a następnie wyświetlaj CMP w celach innych niż śledzenie.
.restricted Nie Tak samo jak Odrzucono. Odrzuć cele reklamowe/dostawców, a następnie otwórz CMP.
iOS < 14 N / A Pomiń ATT, używaj tylko CMP. Zablokuj do czasu rozwiązania problemu CMP.

Krok 7: Receptury API zgodne z ATT

Odrzuć reklamy/dostawców, gdy ATT jest odrzucone lub ograniczone

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

(LUB) Cele reklamowe przed udzieleniem zgody/dostawcy, gdy ATT autoryzuje

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

 

Krok 8: Sprawdź ponownie w aplikacji CV

ATT można zmienić w Ustawieniach. Zawsze sprawdzaj ponownie po wznowieniu:

Krok 9: Przypadki skrajne i scenariusze awaryjne

  • Ograniczony: ATT niedostępne (np. kontrola rodzicielska). Blokada śledzenia.

  • iOS < 14: Brak ATT → należy stosować wyłącznie CMP.

  • Monit niedostępny: Żądanie ATT należy złożyć, gdy aplikacja jest aktywna.

  • Odmowa użytkownika: Traktuj cele reklamowe/dostawców jako odrzucone.

Krok 10: Testowanie i debugowanie

  • Użyj nową instalację aby wywołać monit ATT.

  • Przetestuj wszystkie stany: .authorized, .denied, .restricted, .notDetermined.

  • Przełącz ATT w symulatorze/urządzeniu fizycznym w Ustawienia → Prywatność i bezpieczeństwo → Śledzenie.

  • Rejestruj dane wyjściowe w celu potwierdzenia uruchomienia CMP dopiero po rozwiązaniu problemu ATT.

Krok 11: Najlepsze praktyki

  • Nigdy nie inicjuj trackerów przed zakończeniem przepływu ATT + CMP.
  • Używaj podpowiedzi rozważnie; nigdy nie wprowadzaj użytkowników w błąd, ponieważ może to doprowadzić do zablokowania.
  • Nie dopuść do nałożenia się interfejsu użytkownika CMP na monit ATT.
  • Zezwól użytkownikom na ponowne otwarcie CMP w dowolnym momencie.
  • Można się spodziewać odrzucenia wniosku Apple Review, jeśli śledzenie rozpocznie się przed uzyskaniem zezwolenia ATT.

Krok 12: Lista kontrolna dla programisty

  • Dodaj AppTrackingTransparency.framework.

  • Dodaj NSUserTrackingUsageDescription do Info.plist.

  • Sprawdź status ATT podczas uruchamiania.

  • Opcjonalnie wyświetl monit wstępny.

  • Poproś o ATT, jeśli .notDetermined.

  • Obsłuż wynik ATT (odpowiednio zaakceptuj/odrzuć dostawców/cele).

  • Uruchom CMP po zakończeniu ATT.

  • Zainicjuj/zablokuj zestawy SDK dopiero po rozwiązaniu problemu CMP.

  • Sprawdź ponownie ATT w CV złożonym w aplikacji.

  • Udostępnij opcję ponownego otwarcia CMP.

  • Przetestuj wszystkie przepływy.


Referencje

Powrót do góry