ATT iOS: co to jest, mechanizm prośby o śledzenie i IDFA

Autor: IT Sectr Opublikowano: 2026-05-20 Czas czytania: 10 min

App Tracking Transparency (ATT) to mechanizm iOS wymagający wyraźnej zgody użytkownika na dostęp do reklamowego identyfikatora IDFA przed śledzeniem w aplikacjach i na stronach internetowych. Wprowadzony w iOS 14.5, ATT zobowiązał wszystkich programistów do wyświetlania systemowego okna z prośbą o zgodę na śledzenie. Według Apple Developer Documentation, każda aplikacja używająca IDFA do targetowanej reklamy lub atrybucji musi zintegrować framework ATT i uzyskać zgodę dostępu.

Najważniejsze

  • ATT — App Tracking Transparency, framework prośby o śledzenie w iOS 14.5+
  • IDFA — reklamowy identyfikator urządzenia, do którego dostęp jest ograniczony bez zgody
  • Okno systemowe — standardowy popup z tekstem aplikacji, którego nie można zmienić
  • Zgoda na śledzenie — obowiązkowa prośba do wyświetlania reklam i atrybucji instalacji
  • Odmowa — użytkownik może w każdej chwili cofnąć zgodę w Ustawieniach

Co to jest ATT (App Tracking Transparency)?

App Tracking Transparency to framework Apple do ochrony prywatności użytkowników, wprowadzony w iOS 14.5. Wymaga on od aplikacji uzyskania wyraźnej zgody na dostęp do reklamowego identyfikatora urządzenia (IDFA) przed użyciem go do śledzenia.

Przed pojawieniem się ATT programiści mogli odczytywać IDFA bez prośby, co pozwalało sieciom reklamowym budować profile użytkowników i śledzić ich aktywność między aplikacjami i stronami internetowymi. Apple uznało takie podejście za naruszenie prywatności i wprowadziło obowiązkowe okno zgody.

Framework jest dostępny od iOS 14.0, ale obowiązkowy dla wszystkich aplikacji używających IDFA stał się wraz z wydaniem iOS 14.5 w kwietniu 2021 roku. Według danych Flurry Analytics, po wdrożeniu ATT mniej niż 25% użytkowników w USA wyraziło zgodę na śledzenie, co radykalnie zmieniło rynek reklamy mobilnej.

ATT sprawdza obecność zgody poprzez specjalne systemowe okno, którego aplikacja nie może modyfikować ani ominąć. Użytkownik widzi standardowy popup z tekstem dostarczonym przez programistę i wybiera „Zezwól” lub „Poproś aplikację, aby nie śledziła”.

Jak ATT jest powiązany z prywatnością w iOS

Apple pozycjonuje ATT jako część ogólnej strategii prywatności, obejmującej również Privacy Nutrition Label w App Store i Privacy Manifest. Wszystkie trzy mechanizmy działają razem: etykiety pokazują, jakie dane zbiera aplikacja, Manifest deklaruje powody użycia API, a ATT daje użytkownikowi kontrolę nad śledzeniem.

Odmowa śledzenia nie blokuje działania samej aplikacji — użytkownik może nadal korzystać ze wszystkich funkcji, ale sieci reklamowe nie otrzymają IDFA do personalizacji i atrybucji. Alternatywą dla IDFA stały się SKAdNetwork i Probabilistic Attribution od Apple.

Według Branch Metrics, po wdrożeniu ATT odsetek aplikacji otrzymujących IDFA spadł z 70% do 20% w skali globalnej. Doprowadziło to do przeglądu podejść do atrybucji instalacji i monetyzacji poprzez reklamy.

Zmiany w iOS 15 i 16

W iOS 15 Apple nie zaostrzyło wymogów ATT, ale dodało App Privacy Report — raport pokazujący użytkownikowi, jak często aplikacje uzyskują dostęp do czujników i danych. iOS 16 rozszerzył kontrolę: użytkownik może w każdej chwili zmienić ustawienia śledzenia poprzez Ustawienia → Prywatność → Śledzenie.

Ważne: jeśli użytkownik wybierze „Poproś aplikację, aby nie śledziła” w oknie ATT, aplikacja nie otrzymuje wartości IDFA, a zamiast tego zwracany jest ciąg zer — 00000000-0000-0000-0000-000000000000. Próba odczytania IDFA w inny sposób lub metodami obejściowymi prowadzi do odrzucenia aplikacji w App Store.

Począwszy od iOS 17, Apple wzmocniło kontrole: jeśli aplikacja żąda IDFA bez wyświetlenia systemowego okna ATT, otrzymuje odmowę na poziomie systemu operacyjnego, a nie tylko pusty identyfikator. Wyklucza to możliwość zbierania IDFA w tle bez wiedzy użytkownika.

Jak działa prośba o śledzenie w iOS

Proces żądania ATT składa się z trzech etapów: sprawdzenie statusu, wyświetlenie systemowego okna i obsługa odpowiedzi. Programista nie może pominąć żadnego z kroków — system operacyjny kontroluje każdy etap.

Sprawdzenie statusu autoryzacji

Przed wywołaniem okna aplikacja musi sprawdzić bieżący status poprzez ATTrackingManager. Możliwe statusy: notDetermined (jeszcze nie żądano), restricted (zabronione przez polityki urządzenia), denied (użytkownik odmówił), authorized (dozwolone).

Jeśli status jest już określony (authorized lub denied), ponowne wywołanie okna nie jest możliwe — użytkownik podjął decyzję na zawsze. Jedynym sposobem na zmianę decyzji jest skorzystanie z systemowych ustawień iOS.

Do sprawdzenia statusu używana jest właściwość ATTrackingManager.trackingAuthorizationStatus. Wywołanie musi nastąpić na głównym wątku, ponieważ systemowe okno jest komponentem UI.

swift
import AppTrackingTransparency
import AdSupport

func checkTrackingStatus() {
    let status = ATTrackingManager.trackingAuthorizationStatus
    switch status {
    case .notDetermined:
        requestTrackingPermission()
    case .authorized:
        readIDFA()
    case .denied, .restricted:
        useAlternativeTracking()
    @unknown default:
        break
    }
}

Wyświetlenie systemowego okna

Do wyświetlenia okna wywoływana jest metoda requestTrackingAuthorization z domknięciem, które otrzymuje wynik wyboru użytkownika. Ważne: okno wyświetlane jest tylko raz. Jeśli programista spróbuje wywołać je ponownie, system zignoruje żądanie.

Tekst w oknie składa się z dwóch części: systemowy nagłówek (którego nie można zmienić) oraz niestandardowa wiadomość, którą programista określa w Info.plist poprzez klucz NSUserTrackingUsageDescription.

Okno powinno pojawić się w naturalnym kontekście — nie natychmiast po uruchomieniu aplikacji, ale przy pierwszej próbie użycia funkcjonalności związanej ze śledzeniem. Apple zaleca wyświetlanie okna po tym, jak użytkownik zrozumie wartość funkcji.

swift
func requestTrackingPermission() {
    ATTrackingManager.requestTrackingAuthorization { status in
        DispatchQueue.main.async {
            switch status {
            case .authorized:
                let idfa = ASIdentifierManager.shared().advertisingIdentifier
                print("IDFA: \(idfa)")
            case .denied:
                print("Użytkownik odmówił śledzenia")
            default:
                break
            }
        }
    }
}

IDFA i ograniczenie dostępu

IDFA (Identifier for Advertisers) to unikalny reklamowy identyfikator urządzenia iOS, używany do targetowanej reklamy i atrybucji instalacji. Przed ATT programiści uzyskiwali go poprzez ASIdentifierManager bez ograniczeń. Po wprowadzeniu ATT dostęp do IDFA jest blokowany, dopóki użytkownik nie wyrazi wyraźnej zgody.

Czym jest IDFA i do czego służy

IDFA to ciąg UUID, unikalny dla każdego urządzenia iOS. Sieci reklamowe używają IDFA do: śledzenia instalacji aplikacji (atrybucja), wyświetlania odpowiedniej reklamy na podstawie zainteresowań użytkownika, pomiaru efektywności kampanii reklamowych oraz retargetingu — powrotu użytkowników, którzy nie dokończyli docelowego działania.

Po odmowie użytkownika dotyczącej śledzenia, ASIdentifierManager zwraca wartość 00000000-0000-0000-0000-000000000000. Aplikacja może nadal odczytywać IDFA do celów technicznych (np. antyfraud), ale nie może go przekazywać sieciom reklamowym.

Według danych Singular (2024), globalny poziom zgody na ATT wynosi 25-35%, przy czym w Europie (RODO) wskaźnik jest wyższy (40-50%) niż w USA (15-25%). Zmusiło to platformy reklamowe do opracowania alternatywnych metod atrybucji.

Alternatywy dla IDFA: SKAdNetwork i Probabilistic Attribution

SKAdNetwork to framework Apple do atrybucji instalacji bez ujawniania IDFA. Działa na poziomie systemu operacyjnego: sieć reklamowa wysyła podpisany postback, który Apple sprawdza i przekazuje programiście. Atrybucja odbywa się bez identyfikacji konkretnego użytkownika, tylko na poziomie kampanii.

Probabilistic Attribution wykorzystuje wiele sygnałów urządzenia — model, wersję iOS, strefę czasową, jasność ekranu — do probabilistycznego dopasowania instalacji do wyświetleń reklam. Jednak Apple zabrania tej metody w swoich zasadach, a jej użycie może prowadzić do odrzucenia aplikacji.

Google, Adjust i AppsFlyer opracowały własne hybrydowe rozwiązania, łączące SKAdNetwork z własnymi zagregowanymi danymi. Na przykład Google Ads Conversion Tracking wykorzystuje postbacki SKAdNetwork i własne modele uczenia maszynowego do atrybucji bez IDFA.

Implementacja ATT w kodzie aplikacji

Do integracji ATT wymagane jest dodanie klucza NSUserTrackingUsageDescription w Info.plist oraz zaimportowanie frameworka AppTrackingTransparency. Poniżej przedstawiono kroki dla Swift i Objective-C.

Konfiguracja Info.plist

Pierwszym krokiem jest dodanie do Info.plist klucza NSUserTrackingUsageDescription z tekstem wyjaśniającym, dlaczego aplikacja potrzebuje śledzenia. Ten tekst wyświetli się w systemowym oknie. Przykład: „Twoje IDFA jest używane do wyświetlania spersonalizowanej reklamy i śledzenia efektywności kampanii”.

Bez tego klucza wywołanie requestTrackingAuthorization doprowadzi do crasha aplikacji — Apple jawnie sprawdza obecność NSUserTrackingUsageDescription przed wyświetleniem okna. Tekst powinien być zwięzły, konkretny i zgodny z rzeczywistym wykorzystaniem danych.

Ważne: klucz dodaje się ręcznie poprzez zakładkę Info w Xcode lub edytując XML źródła Info.plist. Po dodaniu przebuduj projekt i sprawdź, czy klucz wyświetla się w końcowym pliku binarnym.

xml
<!-- Info.plist -->
<key>NSUserTrackingUsageDescription</key>
<string>This identifier is used to deliver
personalized ads and measure campaign performance.</string>

Pełna integracja w Swift

W rzeczywistym projekcie żądanie ATT lepiej wywołać przed pierwszym uruchomieniem modułu reklamowego lub trackera. Zaleca się wcześniejsze wyjaśnienie użytkownikowi korzyści ze zgody na osobnym ekranie (pre-permission prompt) — zwiększa to odsetek zgód o 20-30%.

Pre-permission prompt to własny interfejs UI, który pokazuje korzyści z włączenia śledzenia („Pomóż nam wyświetlać odpowiednie reklamy”). Dopiero po naciśnięciu przycisku „Dalej” wywoływane jest systemowe okno ATT. Adjust (2024) odnotował wzrost zgód o 40% przy użyciu ekranu pre-permission.

swift
final class TrackingManager {
    static let shared = TrackingManager()

    func requestTrackingIfNeeded() {
        guard ATTrackingManager.trackingAuthorizationStatus
            == .notDetermined
        else { return }

        ATTrackingManager.requestTrackingAuthorization { _ in
            NotificationCenter.default.post(
                Notification(Name("trackingStatusChanged"))
            )
        }
    }
}

Błędy przy pracy z ATT

Programiści często popełniają typowe błędy przy integracji ATT, które prowadzą do spadku konwersji zgód lub do odrzucenia aplikacji przez moderatorów App Store. Omówimy pięć najczęstszych problemów.

Żądanie ATT natychmiast po uruchomieniu aplikacji

Najczęstszym błędem jest wyświetlanie systemowego okna ATT na pierwszym ekranie po załadowaniu aplikacji. Użytkownik jeszcze nie rozumie wartości aplikacji i z dużym prawdopodobieństwem naciska „Odmów”. IronSource (2023) wykazał spadek zgód o 32% przy żądaniu na pierwszym ekranie w porównaniu do żądania po trzeciej sesji.

Zalecenie: żądaj śledzenia po tym, jak użytkownik wykonał docelowe działanie (obejrzał treść, rozpoczął onboarding) lub po 3-5 sesjach korzystania z aplikacji. Zwiększa to zaufanie i świadomość wartości.

Brak ekranu pre-permission

Wyświetlenie systemowego okna ATT bez wcześniejszego wyjaśnienia to błąd, który obniża konwersję do 15-20%. Użytkownik widzi nieoczekiwane żądanie i instynktownie odmawia. Ekran pre-permission z wyjaśnieniem korzyści zwiększa zgodę do 35-45%.

Tekst pre-permission powinien być konkretny: „Zezwól na wyświetlanie odpowiedniej reklamy — pomaga nam to pozostać bezpłatnymi”. Unikaj ogólnych fraz — obniżają one zaufanie. GameAnalytics w 2023 roku wykazał, że pre-permission z wyjaśnieniem korzyści daje o 28% więcej zgód niż pusty ekran.

Ignorowanie statusu restricted i denied

Jeśli użytkownik już odmówił śledzenia lub status jest restricted (kontrola rodzicielska, polityki korporacyjne), aplikacja nie powinna ponownie wywoływać okna ATT. Ponowne wywołanie nie działa i jest postrzegane jako naruszenie prywatności. Zamiast tego przełącz się na SKAdNetwork i reklamę kontekstową.

W statusie restricted aplikacja nie może określić, czy opcja „Zezwól na żądania śledzenia” jest włączona w ustawieniach. W takim przypadku zawsze używaj bezalternatywnej atrybucji przez SKAdNetwork i nie wyświetlaj ekranu pre-permission.

Sprawdzanie IDFA bez wywołania ATT

Odczytanie IDFA przez ASIdentifierManager.shared().advertisingIdentifier bez wcześniejszej zgody ATT zwraca ciąg zer. Niektórzy programiści próbują używać starych metod dostępu do IDFA przez prywatne API — to gwarantowanie prowadzi do odrzucenia aplikacji podczas przeglądu.

Apple używa statycznego analizatora kodu i uczenia maszynowego do wykrywania metod obejścia. Nawet jeśli aplikacja przejdzie przegląd, póżniejsze aktualizacje lub automatyczne kontrole mogą wykryć naruszenie i doprowadzić do blokady konta programisty.

Nieprawidłowy tekst NSUserTrackingUsageDescription

Zbyt długi, niejasny lub wprowadzający w błąd tekst w kluczu NSUserTrackingUsageDescription jest powodem odrzucenia aplikacji przez moderatorów. Apple sprawdza, czy opis odpowiada rzeczywistemu użyciu danych. Jeśli w aplikacji nie ma reklam, ale wskazano „do celów reklamowych”, moderator odrzuci kompilację.

Zalecany format: konkretny opis celu użycia IDFA o długości 2-3 zdań. Przykład dla aplikacji bez reklam: „Identyfikator jest używany do analityki i zapobiegania oszustwom. Dane nie są przekazywane osobom trzecim i nie są używane do profilowania”.

Często zadawane pytania

Co się stanie, jeśli nie dodam ATT do aplikacji?

Jeśli aplikacja używa IDFA lub śledzenia bez ATT, Apple odrzuci ją podczas przeglądu. Nawet przy braku śledzenia zaleca się dodanie ATT dla przejrzystości, w przeciwnym razie ryzyko odrzucenia przy kolejnej aktualizacji rośnie.

Czy aplikacja działa bez zgody na śledzenie?

Tak, aplikacja działa w pełni, ale sieci reklamowe nie otrzymają IDFA do personalizacji i atrybucji. Wszystkie funkcje aplikacji, oprócz spersonalizowanej reklamy, pozostają dostępne.

Czy można zresetować status ATT w iOS?

Tak, użytkownik może zmienić decyzję w każdej chwili poprzez Ustawienia → Prywatność → Śledzenie. Aplikacja nie może programowo zresetować statusu — tylko poprzez ustawienia systemowe.

Jak zwiększyć odsetek zgód na ATT?

Użyj ekranu pre-permission z wyjaśnieniem korzyści, żądaj śledzenia nie przy pierwszym uruchomieniu, ale po wykonaniu docelowego działania. Meta (2024) wykazała wzrost zgód o 35% przy opóźnionym żądaniu.

Czy ATT dotyczy aplikacji dla dzieci?

Aplikacje w kategorii „Dla dzieci” nie mogą używać IDFA i ATT do śledzenia zgodnie z zasadami Apple. Zabronione jest im również przekazywanie danych osobom trzecim do analityki lub reklamy.

Podsumowanie

  • ATT — App Tracking Transparency, obowiązkowy framework do żądania dostępu do IDFA w iOS 14.5+
  • IDFA — reklamowy identyfikator urządzenia, chroniony przez ATT przed nieautoryzowanym dostępem
  • Okno systemowe — użytkownik zawsze widzi okno, którego aplikacja nie może zmienić ani ominąć
  • Pre-permission — własny ekran wyjaśnienia korzyści, zwiększający zgodę o 20-40%
  • SKAdNetwork — bezalternatywna atrybucja od Apple dla aplikacji bez dostępu do IDFA
  • Konwersja — globalny poziom zgody wynosi 25-35%, w Europie do 50% dzięki RODO
  • Zintegruj ATT przed wywołaniem jakiegokolwiek trackera i koniecznie dodaj klucz NSUserTrackingUsageDescription w Info.plist

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również