---
title: App Tracking Transparency (iOS 14.5+)
slug: it-pubtech-cmp/app-tracking-transparency-ios-145
docTags: 
createdAt: 2024-06-14T14:28:52.448Z
---

A partire da iOS 14.5, rilasciato nell'aprile 2021, Apple ha introdotto il framework App Tracking Transparency (ATT). Questo framework impone che le app devono divulgare in modo trasparente l'uso dei dati e informare gli utenti sulle pratiche di tracciamento da parte di terzi all'interno dell'app.

Il tracciamento e l'uso dell'Identifier for Advertisers (IDFA) ora richiedono il consenso esplicito dell'utente. Secondo le linee guida di Apple, il "tracciamento" comprende il collegamento dei dati dell'utente o del dispositivo raccolti dalla tua app con i dati raccolti da altre aziende dalle loro app, siti web o proprietà offline per scopi come la pubblicità mirata o la misurazione della pubblicità. Include anche la condivisione dei dati dell'utente o del dispositivo con broker di dati.

Attualmente, l'SDK PubConsent non richiede l'autorizzazione dell'utente per il tracciamento come richiesto dal framework App Tracking Transparency (ATT). È responsabilità dell'app gestire questo processo e determinare come la Piattaforma di Gestione del Consenso (CMP) PubConsent e il permesso ATT debbano coesistere.

La tua app deve rispettare le linee guida di Apple divulgando i dati raccolti e ottenendo il consenso dell'utente per il tracciamento. Per richiedere il permesso di tracciamento su iOS, dovresti chiamare la funzione `ATTrackingManager.requestTrackingAuthorization` all'interno della tua app.

## Quando e come richiedere il permesso ATT?

Secondo le linee guida di Apple, devi mostrare l'avviso di richiesta del permesso ATT prima di tentare di accedere all'Identifier for Advertisers (IDFA) sul dispositivo iOS. Se il permesso non viene richiesto, o se l'utente rifiuta il permesso, l'IDFA non sarà disponibile per la tua app e per eventuali SDK di terze parti integrati. Questa limitazione potrebbe influire sul funzionamento degli SDK di terze parti che dipendono dai dati di tracciamento.

## Garantire la conformità

Per essere pienamente conformi sia alle linee guida di Apple che ai requisiti del GDPR, devi ottenere il permesso dell'utente tramite il framework ATT e richiedere anche il consenso dell'utente tramite la CMP. Attualmente, il framework ATT di Apple non è allineato con l'IAB Transparency and Consent Framework (TCF) o con gli standard GDPR. Pertanto, non può essere utilizzato come unico meccanismo di raccolta del consenso e deve essere utilizzato in combinazione con la CMP PubConsent per garantire una conformità completa.

## Implementazioni

### 1) Richiedere il permesso tramite ATT, quindi raccogliere il consenso tramite la CMP solo se l'utente ha concesso il permesso tramite ATT.

**Pro:**

- Questa implementazione garantisce che gli utenti vengano interrogati una sola volta se negano il permesso tramite ATT, minimizzando l'attrito per l'utente.
- Gli utenti che non concedono il consenso tramite ATT vengono risparmiati da una seconda richiesta da parte della CMP.

**Contro:**

- Gli utenti che concedono il permesso tramite ATT dovranno ancora fornire il consenso separatamente tramite la CMP, portando ad essere interrogati due volte (una volta da ATT e una volta dalla CMP). Purtroppo, ciò è attualmente inevitabile.
- Il principale svantaggio di questo approccio è che se un utente nega il consenso tramite ATT, si presume che neghi anche il consenso tramite la CMP. Questo nonostante il fatto che ATT e la CMP riguardino scopi diversi e coinvolgano diversi fornitori. Ciò significa che la tua app potrebbe estrapolare la decisione di un utente da ATT (che si concentra sul tracciamento tramite IDFA) ad altri scopi non correlati. Se ciò sia accettabile o meno dipende dal contesto specifico della tua app e dell'utente.

### 2) Raccogliere il consenso tramite la CMP, quindi richiedere il permesso tramite ATT.

**Pro:**

- Il principale vantaggio di questa implementazione è che consente agli utenti di fare scelte distinte tra il tracciamento ATT e i vari scopi e fornitori gestiti dalla CMP. Questo rispetta il fatto che la CMP e ATT riguardano ambiti e scelte di consenso differenti.

**Contro:**

- Gli utenti dovranno comunque essere interrogati due volte (prima dalla CMP e poi da ATT), il che potrebbe potenzialmente portare a fatica o fastidio per l'utente. Purtroppo, questa ridondanza è attualmente inevitabile.

Per implementare questa soluzione puoi registrare il callback `OnConsentReadyCallback`.

## Integrare l'avviso CMP e il permesso ATT

### Mostrare il permesso ATT, quindi l'avviso CMP se l'utente accetta il permesso ATT

Questo esempio dimostra come visualizzare la richiesta di permesso ATT se la versione di iOS è 14 o successiva.

Mostra l'interfaccia utente di PubConsent solo nelle seguenti condizioni:

- La versione di iOS è inferiore a 14.
- L'utente ha accettato la richiesta di permesso ATT o ATT è ristretto (vedi [ATT Restriction](https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/authorizationstatus/restricted)).

**Dettagli:**

- La richiesta di permesso ATT verrà sempre visualizzata se il dispositivo esegue iOS 14 o successivo e lo stato ATT non è ristretto.
- L'interfaccia utente di PubConsent verrà mostrata solo se l'utente accetta la richiesta di permesso ATT o se la richiesta di permesso ATT non può essere visualizzata (a causa di restrizioni o se la versione di iOS è inferiore a 14).

```swift
import UIKit
import AppTrackingTransparency

class ViewController: UIViewController {
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        if #available(iOS 14, *) {
            ATTrackingManager.requestTrackingAuthorization { status in
                switch status {
                    case .authorized:
                        // Mostra il CMP PubConsent per raccogliere il consenso dall'utente
                        PubConsentCMP.shared.setupUI(containerController: self)
                    case .denied:
                        // Nega il consenso per tutti gli scopi e i fornitori nel CMP PubConsent
                        // Nel caso in cui non è necessario rifiutare tutto nella CMP potete non chiamare questo metodo e nessun consenso verrà espresso.
                        PubConsentCMP.shared.setUserRejectedAll(containerController: self)
                        // Altrimenti potete chiamare il metodo resetUserPreferences per cancellare le preferenze espresse dall'utente in passato
                        PubConsentCMP.shared.resetUserPreferences()
                    case .restricted:
                        // ATT è ristretto sul dispositivo, quindi l'utente non è stato interrogato per una scelta (https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/authorizationstatus/restricted)
                        // Mostra l'avviso del CMP PubConsent per raccogliere il consenso dall'utente
                        PubConsentCMP.shared.setupUI(containerController: self)
                    case .notDetermined:
                        // Questo non dovrebbe accadere
                        // Mostra l'avviso del CMP PubConsent per raccogliere il consenso dall'utente
                        PubConsentCMP.shared.setupUI(containerController: self)
                }
            }
        } else {
            // Mostra il CMP PubConsent per raccogliere il consenso dall'utente poiché iOS < 14 (nessun ATT disponibile)
            PubConsentCMP.shared.setupUI(containerController: self)
        }
    }
}
```

***

If you need to close the popup without expressing any consent you can call the method:

`PubConsentCMP.shared.disableCmpPopup()`

Dopo aver chiamato `disableCmpPopup()` l'unico modo per riattivare il CMP e mostrare il Popup, se necessario, è chiamare il metodo:

`PubConsentCMP.shared.enableCmpPopup(containerController: UIViewController)`
