[iOS] 4. Arbeta med ATT (App Tracking Transparency / iOS)

Arbeta med ATT (App Tracking Transparency) på iOS

ATT och samtyckeshantering är separata system som du måste samordna manuellt. 

Denna guide förklarar hur man korrekt integrerar Apples ramverk för App Tracking Transparency (ATT) med vårt CMP SDK. ATT är ett krav på plattformsnivå (Apple) medan CMP hanterar juridiskt/regulatoriskt samtycke. Båda måste samverka för att säkerställa efterlevnad och korrekt SDK-funktion.

Meddelandet om iOS App Tracking Transparency (ATT) och hantering av samtycke enligt GDPR/ePrivacy

serve different purposes

och fungera

independently

. Vi rekommenderar att du kontrollerar att 

no SDK whatsoever

 laddas 

before

 our the ATT dialog 

and before

vårt SDK. Baserat på de val som användaren gör på 

both

ATT-dialogrutan och vårt samtyckeslager, ladda eller inte de angivna SDK:erna. 

För att förtydliga:

  • ATT-dialogen och samtyckeslagret (CMP) behandlar olika rättsliga grunder och tillämpningsområden.

    • ATT är Apples mekanism för att erhålla användartillstånd för spårning mellan appar (dvs. delning av identifierare som IDFA med tredje part i reklamsyfte).

    • Samtyckeslagret (CMP) reglerar användningen av cookies och SDK för ändamål som analys, personalisering, mätning eller väsentliga appfunktioner – enligt kraven i GDPR/ePrivacy och liknande lagar. Som exempel kan vi nämna Firebase (GFA), Crashlytics, OneSignal, MixPanel, Sentry, etc. Inget av dessa är direkt relaterat till ATT, men du måste ändå samla in samtycke från användaren. 

Även om en användare väljer ”Be appen att inte spåra” på systemnivå i iOS kan din app fortfarande behandla vissa typer av data (till exempel funktionella cookies, mät-SDK:er eller andra tekniska verktyg) som kräver en laglig grund eller samtycke enligt sekretesslagar. Därför måste samtyckeslagret fortfarande visas, så att användaren kan utöva sitt val angående dessa tekniker. Se till att detta inte är fallet för dig, eftersom om du beslutar att inte visa samtyckeslagret men ändå laddar någon SDK som hanterar data till servrar från enheten, även med olika syften/leverantörer, kommer din app att blockeras.

Steg 1: Förutsättningar

  • Minsta iOS-version: iOS 14 (ATT finns inte tillgängligt på tidigare versioner)

  • Lägg till AppTrackingTransparency.framework till ditt projekt

  • Lägg till följande i din Info.plist:

<key>NSUserTrackingUsageDescription</key> 
<string>This identifier will be used to deliver personalized ads and improve user experience.</string>
  • Texten måste tydligt förklara varför du begär spårning

Apple kan avvisa otydliga formuleringar.

All hantering av ATT måste ske i själva mobilappen och inte via vårt SDK, eftersom vårt SDK inte känner till livscykeln för den mobilapp som integrerar det. ATT-förfrågan måste visas och hanteras helt innan vårt SDK, och ATT-dialogrutan bör inte laddas samtidigt eller ovanpå vårt samtyckeslager. Se till att du endast laddar vårt samtyckeslager via checkAndOpen() eller forceOpen() metoder efter att du har hanterat ATT-förfrågan och säkerställt att användarens val avseende ATT redan har uppdaterats på enheten. Ladda inte vårt samtyckeslager före detta. 

Step 2: Check ATT Status

Kontrollera den aktuella ATT-auktoriseringsstatusen innan du initialiserar spårnings-SDK:er:

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

 

Steg 3: Begär ATT-auktorisering

Om statusen är .notDetermined, begär behörighet när appen är aktiv:

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

Step 4: Handle ATT Result

Fastställ hur resultatet från ATT ska hanteras och lansera sedan CMP:

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

 

Steg 5: Starta CMP

När ATT har lösts, bestäm ATT-statusen så att CMP-gränssnittet kan öppnas för att samla in juridiskt/regulatoriskt samtycke med hjälp av en målinriktad design:

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

 

Steg 6: Beslutstabell — ATT × CMP-beteende × SDK-åtgärder

ATT-status IDFA CMP-beteende SDK-åtgärder
.notDetermined Nej Vänta på ATT-uppmaningen och starta sedan CMP. Initiera inte spårare ännu.
.authorized Ja Samla in detaljerat CMP-samtycke. Aktivera annonser/analys endast om CMP tillåter det.
.denied Nej Behandla annonsering/profilering som avvisad. Avvisa annonsändamål/leverantörer programmatiskt och visa sedan CMP för icke-spårningsändamål.
.restricted Nej Samma som Avvisat. Avvisa annonsändamål/leverantörer och öppna sedan CMP.
iOS < 14 Ej tillämpligt Hoppa över ATT, använd endast CMP. Blockera tills CMP har lösts.

Steg 7: ATT-medvetna API-recept

Avvisa annonsändamål/leverantörer när ATT nekas eller begränsas

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

(ELLER) Annonsändamål/leverantörer före beviljande när ATT har godkänt

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

 

Steg 8: Kontrollera igen i App Resume

ATT kan ändras i Inställningar. Kontrollera alltid igen när du återupptar arbetet:

Steg 9: Gränsfall och reservlösningar

  • Begränsat: ATT otillgängligt (t.ex. föräldrakontroll). Blockera spårning.

  • iOS < 14: No ATT → use CMP only.

  • Prompt inte tillgänglig: ATT måste begäras när appen är aktiv.

  • Användarvägran: Behandla annonsändamål/leverantörer som avvisade.

Steg 10: Testning och felsökning

  • Använd en ny installation för att aktivera ATT-meddelandet.

  • Testa alla tillstånd: .authorized, .denied, .restricted, .notDetermined.

  • Aktivera eller inaktivera ATT i Simulator/Fysisk enhet under Inställningar → Sekretess och säkerhet → Spårning.

  • Logga utdata för att bekräfta att CMP endast startas efter att ATT har lösts.

Steg 11: Bästa praxis

  • Initiera aldrig spårare innan flödet för ATT + CMP är avslutat.
  • Använd förberedande uppmaningar med omdöme; vilseled aldrig användarna, eftersom det kan leda till att de blockerar webbplatsen.
  • Låt inte CMP-gränssnittet överlappa med ATT-meddelandet.
  • Låt användarna öppna CMP igen när som helst.
  • Räkna med att Apple Review avvisar översättningen om spårning sker innan tillstånd för ATT har givits.

Steg 12: Checklista för utvecklare

  • Lägg till AppTrackingTransparency.framework.

  • Lägg till NSUserTrackingUsageDescription till Info.plist.

  • Check ATT status at startup.

  • Visa eventuellt en förhandsuppmaning.

  • Begär ATT om .notDetermined.

  • Hantera ATT-resultatet (godkänn/avvisa leverantörer/ändamål i enlighet därmed).

  • Starta CMP när ATT är klart.

  • Initiera/blockera SDK:er först efter att CMP har laddats.

  • Re-check ATT on app resume.

  • Tillhandahåll alternativet att öppna CMP igen.

  • Testa alla flöden.


Referenser

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!