[iOS] 4. Praca z ATT (przejrzystość śledzenia aplikacji / iOS)
Praca z ATT (App Tracking Transparency) w systemie iOS
ATT i zarządzanie zgodami są oddzielnymi systemami Że Ty należy koordynować ręcznie.
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.
-
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
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
NSUserTrackingUsageDescriptiondo 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.







