Ottenere il consenso con la piattaforma di messaggistica utente

Prerequisiti

Leggi In che modo i requisiti IAB incidono sui messaggi per il consenso degli utenti dell'Unione europea.

Introduzione

L'SDK UMP offre strumenti che consentono ai publisher di richiedere il consenso per gli annunci personalizzati e di gestire i requisiti di App Tracking Transparency (ATT) di Apple. I publisher possono utilizzare l'SDK UMP per gestire una o entrambe le richieste mostrando un singolo modulo, poiché tutta la configurazione avviene in Privacy e messaggi di AdMob.

Secondo le Norme relative al consenso degli utenti dell'UE di Google, è obbligatorio informare gli utenti nello Spazio economico europeo (SEE) e nel Regno Unito e ricevere il loro consenso per l'utilizzo dei cookie o di altri tipi di archiviazione locale, laddove richiesto dalla legge, e per l'utilizzo dei dati personali (ad esempio AdID) per la pubblicazione degli annunci. Queste norme riflettono i requisiti della direttiva e-Privacy e del Regolamento generale sulla protezione dei dati (GDPR) dell'UE.

Per supportare i publisher nell'adempimento degli obblighi previsti da queste norme, Google offre l'SDK User Messaging Platform (UMP), che sostituisce il precedente SDK per il consenso open source. L'SDK UMP è stato aggiornato per supportare gli standard IAB più recenti. Abbiamo anche semplificato la procedura di configurazione dei moduli di consenso e dell'elenco dei partner pubblicitari. Tutte queste configurazioni ora possono essere facilmente gestite in Privacy e messaggi di AdMob.

Questa guida illustra come installare l'SDK, implementare le soluzioni IAB e attivare le funzionalità di test.

Importa l'SDK

CocoaPods (preferito)

L'SDK UMP è incluso come dipendenza dal pod dell'SDK Google Mobile Ads a partire dall'SDK Google Mobile Ads 7.64.0.

Il modo più semplice per importare l'SDK in un progetto iOS è utilizzare CocoaPods. Apri il pod del progetto e aggiungi questa riga alla destinazione dell'app:

pod 'Google-Mobile-Ads-SDK'

Quindi, dalla riga di comando esegui:

pod install --repo-update

Se non hai esperienza con CocoaPods, consulta la documentazione ufficiale per informazioni su come creare e utilizzare i Podfile.

Download manuale

Scarica l'SDK

Trascina il framework nel tuo progetto Xcode, assicurandoti di selezionare Copia elementi se necessario.

Puoi quindi includere il framework in qualsiasi file necessario utilizzando:

Swift

import UserMessagingPlatform

Objective-C

#include <UserMessagingPlatform/UserMessagingPlatform.h>

Aggiorna il tuo file Info.plist

Aggiungi l'ID app a Info.plist

Ottieni l'ID app seguendo le istruzioni del Centro assistenza.

Aggiungi il tuo ID app al tuo Info.plist:

<key>GADApplicationIdentifier</key>
<string>YOUR-APP-ID</string>

Trasparenza del monitoraggio delle app

Se prevedi di utilizzare l'SDK UMP per gestire i requisiti di trasparenza del monitoraggio delle app di Apple, assicurati di aver creato, configurato e pubblicato il tuo messaggio ATT utilizzando Privacy e messaggi di AdMob.

Per consentire all'SDK UMP di visualizzare un messaggio di avviso personalizzato, aggiorna Info.plist per aggiungere la chiave NSUserTrackingUsageDescription con una stringa di messaggio personalizzata che descrive il tuo utilizzo.

<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>

La descrizione dell'utilizzo viene visualizzata nella finestra di dialogo ATT quando presenti il modulo di consenso:

Successivamente, dovrai collegare il framework AppTrackingTransparency:

Durante il test, ricorda che in base ai requisiti di Apple, la finestra di dialogo ATT IDFA verrà visualizzata solo una volta, poiché requestTrackingAuthorization: è una richiesta una tantum. Per fare apparire l'avviso una seconda volta, devi disinstallare e reinstallare l'app sul tuo dispositivo di test.

Utilizzo dell'SDK

L'SDK è progettato per essere utilizzato in modo lineare. Per utilizzare l'SDK:

  1. Richiedi le informazioni più recenti sul consenso.
  2. Verifica se è richiesto il consenso.
  3. Controllare se un modulo è disponibile e, in questo caso, caricarlo.
  4. Presenta il modulo.
  5. Offri agli utenti un modo per cambiare il consenso.

Ti consigliamo di richiedere un aggiornamento delle informazioni sul consenso a ogni lancio dell'app. Determina se l'utente deve fornire o meno il consenso.

Questo metodo deve essere chiamato solo dal thread principale.

Swift

// Create a UMPRequestParameters object.
let parameters = UMPRequestParameters()
// Set tag for under age of consent. Here false means users are not under age.
parameters.tagForUnderAgeOfConsent = false

// Request an update to the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
    with: parameters,
    completionHandler: { error in
      if error != nil {
        // Handle the error.
      } else {
        // The consent information state was updated.
        // You are now ready to check if a form is
        // available.
      }
    })

Objective-C

// Create a UMPRequestParameters object.
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
// Set tag for under age of consent. Here NO means users are not under age.
parameters.tagForUnderAgeOfConsent = NO;

// Request an update to the consent information.
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError *_Nullable error) {
                           if (error) {
                             // Handle the error.
                           } else {
                             // The consent information state was updated.
                             // You are now ready to check if a form is
                             // available.
                           }
                         }];

Carica un modulo, se disponibile

È buona norma caricare un modulo ogni volta che l'utente lancia l'app, anche se ritieni che il consenso non sia necessario, in modo che il modulo sia pronto per essere visualizzato nel caso in cui l'utente voglia modificare la propria impostazione del consenso.

I moduli per ottenere il consenso vengono creati nell'interfaccia utente AdMob. Dopo aver stabilito che dovrai chiedere il consenso a un utente, il passaggio successivo consiste nel determinare se un modulo è disponibile. Esistono diversi motivi per cui un modulo potrebbe non essere disponibile, tra cui:

  • L'utente ha attivato il limite per il monitoraggio degli annunci.
  • Hai taggato l'utente perché non aveva l'età del consenso digitale.

Per verificare se un modulo è disponibile, utilizza la proprietà formStatus in UMPConsentInformation, che restituisce un'enumerazione di tipo UMPFormStatus. I valori possibili per UMPFormStatus sono tre:

  • UMPFormStatusUnknown: stato del modulo sconosciuto. In questo caso devi chiamare requestConsentInfoUpdateWithParameters:completionHandler:.
  • UMPFormStatusAvailable: è disponibile un modulo di consenso che può essere caricato.
  • UMPFormStatusUnavailable: un modulo di consenso non è disponibile.

Aggiungi un metodo di wrapper per caricare un modulo in questo modo:

Swift

// Request an update to the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
    withParameters: parameters,
    completionHandler: { [self] error in

      // The consent information has updated.
      if error != nil {
        // Handle the error.
      } else {
        // The consent information state was updated.
        // You are now ready to see if a form is available.
        let formStatus = UMPConsentInformation.sharedInstance.formStatus
        if formStatus == UMPFormStatus.available {
          loadForm()
        }
      }
    })
...
func loadForm() {

}

Objective-C

// Request an update to the consent information.
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError* _Nullable error) {

                           // The consent information has updated.
                           if (error) {
                             // Handle the error.
                           } else {
                             // The consent information state was updated.
                             // You are now ready to see if a form is available.
                             UMPFormStatus formStatus =
                                 UMPConsentInformation.sharedInstance
                                     .formStatus;
                             if (formStatus == UMPFormStatusAvailable) {
                               [self loadForm];
                             }
                           }
                         }];
...
- (void) loadForm {

}

Per caricare il modulo, utilizzerai il metodo statico loadWithCompletionHandler: nella classe UMPConsentForm. Questo metodo deve essere chiamato solo dal thread principale. Modifica il metodo loadForm in questo modo:

Swift

func loadForm() {
  UMPConsentForm.load(
      withCompletionHandler: { form, loadError in
        if loadError != nil {
          // Handle the error
        } else {
          // Present the form
        }
      })
}

Objective-C

- (void)loadForm {
  [UMPConsentForm
      loadWithCompletionHandler:^(UMPConsentForm *form, NSError *loadError) {
        if (loadError) {
          // Handle the error
        } else {
          // Present the form
        }
      }];
}

Presenta il modulo, se necessario

Per presentare il modulo di consenso, utilizza il metodo presentFromViewController:completionHandler: nella classe UMPConsentForm. Devi determinare se l'utente richiede il consenso prima di presentare il modulo. Per verificare se è necessario il consenso, esamina la proprietà consentStatus dell'oggetto UMPConsentInformation, che restituisce un'enumerazione di tipo UMPConsentStatus. I valori possibili per UMPConsentStatus sono quattro:

  • UMPConsentStatusUnknown: stato del consenso sconosciuto.
  • UMPConsentStatusRequired: il consenso dell'utente è obbligatorio, ma non è stato ancora ottenuto.
  • UMPConsentStatusNotRequired: consenso degli utenti non richiesto. Ad esempio, l'utente non si trova nel SEE o nel Regno Unito.
  • UMPConsentStatusObtained: consenso dell'utente ottenuto. Personalizzazione non definita.

Modifica il metodo loadForm in questo modo:

Swift

func loadForm() {
  UMPConsentForm.load(withCompletionHandler: { form, loadError in
    if loadError != nil {
      // Handle the error.
    } else {
      // Present the form. You can also hold on to the reference to present
      // later.
      if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.required {
        form?.present(
            from: self,
            completionHandler: { dismissError in
              if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.obtained {
                // App can start requesting ads.
              }

            })
      } else {
        // Keep the form available for changes to user consent.
      }
    }
  })
}

Objective-C

- (void)loadForm {
  [UMPConsentForm loadWithCompletionHandler:^(UMPConsentForm *form,
                                              NSError *loadError) {
    if (loadError) {
      // Handle the error.
    } else {
      // Present the form. You can also hold on to the reference to present
      // later.
      if (UMPConsentInformation.sharedInstance.consentStatus ==
          UMPConsentStatusRequired) {
        [form
            presentFromViewController:self
                    completionHandler:^(NSError *_Nullable dismissError) {
                      if (UMPConsentInformation.sharedInstance.consentStatus ==
                          UMPConsentStatusObtained) {
                        // App can start requesting ads.
                      }

                    }];
      } else {
        // Keep the form available for changes to user consent.
      }
    }
  }];
}

Se non hai bisogno del consenso, puoi conservare un riferimento al modulo per consentire all'utente di modificare il proprio stato di consenso.

Test

Forza un'area geografica

L'SDK UMP offre un modo semplice per testare il comportamento della tua app come se il dispositivo si trovasse nel SEE o nel Regno Unito utilizzando la proprietà debugGeography di tipo UMPDebugGeography sul sito UMPDebugSettings.

Per utilizzare la funzionalità di debug, dovrai fornire l'ID hash del dispositivo di test nelle impostazioni di debug dell'app. Se chiami requestConsentInfoUpdateWithParameters senza impostare questo valore, la tua app registrerà l'hash dell'ID richiesto al momento dell'esecuzione.

Swift

let parameters = UMPRequestParameters()
let debugSettings = UMPDebugSettings()
debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"]
debugSettings.geography = UMPDebugGeography.EEA
parameters.debugSettings = debugSettings
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
    with: parameters,
    completionHandler: { error in
      ...
    })

Objective-C

UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init];
debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ];
debugSettings.geography = UMPDebugGeographyEEA;
parameters.debugSettings = debugSettings;
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError *_Nullable error){
                           ...
}];

Per forzare l'SDK a trattare il dispositivo come se non fosse nel SEE o nel Regno Unito, utilizza UMPDebugGeographyNotEEA. Tieni presente che le impostazioni di debug funzionano solo su dispositivi di test. Non è necessario aggiungere gli emulatori all'elenco degli ID dispositivo perché i test sono abilitati per impostazione predefinita.

Durante il test della tua app con l'SDK UMP, potrebbe essere utile reimpostare lo stato dell'SDK in modo da poter simulare la prima installazione di un utente. Per farlo, l'SDK fornisce il metodo reset.

Swift

UMPConsentInformation.sharedInstance.reset()

Objective-C

[UMPConsentInformation.sharedInstance reset];

Devi anche ripetere la chiamata se decidi di rimuovere completamente l'SDK UMP dal tuo progetto.

Ritardo nella misurazione delle app (facoltativo)

Per impostazione predefinita, l'SDK Google Mobile Ads inizializza la misurazione delle app e inizia a inviare a Google i dati degli eventi a livello di utente subito dopo l'avvio dell'app. Questo comportamento di inizializzazione garantisce l'attivazione delle metriche utente di AdMob senza apportare ulteriori modifiche al codice.

Tuttavia, se la tua app richiede il consenso degli utenti prima che questi eventi possano essere inviati, puoi ritardare la misurazione delle app finché non inizializza esplicitamente l'SDK Mobile Ads o carichi un annuncio.

Per ritardare la misurazione delle app, aggiungi la chiave GADDelayAppMeasurementInit con un valore booleano YES ai parametri Info.plist dell'app. Puoi apportare questa modifica in modo programmatico:

<key>GADDelayAppMeasurementInit</key>
<true/>

In alternativa, modificalo nell'editor dell'elenco delle proprietà:

Mediazione

Se utilizzi la mediazione, dovrai gestire il consenso per i partner di mediazione in modo diverso in base al framework di consenso che scegli di utilizzare nella tua app. Google supporta il framework per il consenso IAB, ma ti consente anche di avere la tua soluzione personalizzata per il consenso. Di seguito sono riportati i dettagli su come gestire la mediazione per ciascuna di queste opzioni. Scopri di più sulla nostra soluzione per il consenso.

Né l'SDK UMP né l'SDK Mobile Ads inoltrano le informazioni sul consenso ai partner di mediazione. Quando utilizzi la soluzione IAB, l'SDK UMP scrive le informazioni sullo stato del consenso nello spazio di archiviazione locale ed è responsabilità dell'SDK di ogni partner di mediazione leggere le chiavi appropriate. Contatta ogni rete di terze parti per determinare se supporta la soluzione IAB.

Se utilizzi una soluzione per il consenso personalizzata, è tua responsabilità informare gli SDK di terze parti in merito allo stato del consenso della tua app. Per dettagli su come trasmettere le informazioni sul consenso alle terze parti pertinenti, consulta la guida all'integrazione di ogni partner di mediazione.

Il codice in questa sezione può essere utilizzato con qualsiasi versione dell'SDK Google Mobile Ads. Può essere utilizzata anche indipendentemente dal fatto che tu abbia usato l'SDK Consent per raccogliere il consenso.

Il comportamento predefinito dell'SDK Google Mobile Ads consiste nella pubblicazione di annunci personalizzati. Se un utente ha acconsentito alla ricezione solo di annunci non personalizzati, puoi configurare un oggetto GADRequest per specificare che solo gli annunci non personalizzati devono essere richiesti. Il seguente codice comporta la richiesta di annunci non personalizzati, indipendentemente dal fatto che l'utente si trovi o meno nel SEE:

Swift

let request = GADRequest()
let extras = GADExtras()
extras.additionalParameters = ["npa": "1"]
request.register(extras)

Objective-C

GADRequest *request = [GADRequest request];
GADExtras *extras = [[GADExtras alloc] init];
extras.additionalParameters = @{@"npa": @"1"};
[request registerAdNetworkExtras:extras];

Se vengono richiesti annunci non personalizzati, l'URL della richiesta di annuncio include attualmente &npa=1. Tuttavia, tieni presente che questo è un dettaglio di implementazione interna dell'SDK Google Mobile Ads ed è soggetto a modifiche.