Richiesta di consenso da parte degli utenti europei

Secondo le Norme relative al consenso degli utenti dell'UE di Google, è obbligatorio informare gli utenti nello Spazio economico europeo (SEE) e ricevere il loro consenso all'utilizzo dei cookie o di altro spazio di archiviazione locale, laddove richiesto dalla legge, nonché all'utilizzo dei dati personali (ad esempio ID pubblicità) 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 gli editori nell'adempimento degli obblighi previsti da queste norme, Google offre un SDK per il consenso. L'SDK Consent è una libreria open source che offre funzioni di utilità per la raccolta del consenso degli utenti. Il codice sorgente completo è disponibile su GitHub.

Gli annunci pubblicati da Google possono essere classificati come personalizzati o non personalizzati, ed entrambi richiedono il consenso degli utenti nello Spazio economico europeo. Per impostazione predefinita, le richieste di annunci rivolte a Google pubblicano annunci personalizzati, con la selezione degli annunci basata sui dati raccolti in precedenza dall'utente. Google supporta anche la configurazione delle richieste di annunci per la pubblicazione di annunci non personalizzati. Scopri di più sugli annunci personalizzati e non personalizzati.

Questa guida descrive come utilizzare l'SDK Consent per ottenere il consenso degli utenti. Viene anche descritto come inoltrare il consenso all'SDK Google Mobile Ads dopo aver ottenuto il consenso.

Prerequisiti

CocoaPods (preferito)

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

pod 'PersonalizedAdConsent'

Quindi, dall'esecuzione della riga di comando:

pod install --repo-update

Se non hai mai utilizzato CocoaPods, consulta la relativa documentazione ufficiale per informazioni su come creare e utilizzare podfile.

Download manuale

Puoi anche scaricare o clonare direttamente la fonte dell'SDK e seguire queste istruzioni per includerlo nel tuo progetto:

  1. Da Finder, trascina il file PersonalizedAdConsent.xcodeproj nel progetto.

  2. Vai alla scheda Fasi di creazione. In Dipendenze target, fai clic sul pulsante + e aggiungi il target CustomAdConsent.

  3. Fai clic con il tasto destro del mouse sul progetto e seleziona Aggiungi file a "MyProject". Vai a PersonalizedAdConsent.bundle. Assicurati di selezionare Crea riferimenti a cartella.

    Al termine, dovresti vedere il nome PersonalizedAdConsent.bundle nella scheda Fasi di creazione nella sezione Copia risorse bundle.

Prima di utilizzare qualsiasi altro metodo nell'SDK Consent, devi aggiornare lo stato del consenso per assicurarti che l'SDK per il consenso abbia le informazioni più recenti relative ai fornitori di tecnologia pubblicitaria che hai selezionato nell'AdMob interfaccia utente. Se l'elenco dei fornitori di tecnologia pubblicitaria è cambiato dall'ultima volta che l'utente ha fornito il consenso, lo stato del consenso viene riportato nuovamente su uno stato sconosciuto.

Se non utilizzi la mediazione

Se non utilizzi la mediazione, hai due opzioni per implementare l'SDK Consent per raccogliere il consenso.

Una possibilità è utilizzare l'SDK Consent per presentare agli utenti un modulo di consenso visualizzato da Google. Il modulo di consenso mostra un elenco dei fornitori di tecnologia pubblicitaria che hai selezionato nell'interfaccia utente. AdMobL'SDK Consent fornisce la risposta del consenso dell'utente.

L'altra opzione consiste nell'utilizzare l'SDK Consent per recuperare dinamicamente l'elenco completo dei fornitori di tecnologia pubblicitaria da AdMob, come spiegato nella raccolta del consenso gestita dal publisher. Tuttavia, in questo caso dovrai determinare in che modo l'elenco dei provider dovrebbe essere reso disponibile agli utenti e presentare il tuo modulo di consenso agli utenti.

Dopo che l'utente ha effettuato una scelta di consenso, puoi chiedere all'SDK Consent di archiviare la scelta dell'utente in merito al consenso come spiegato nella sezione Conservare il consenso gestito dal publisher.

Dopo aver raccolto il consenso, se un utente ha acconsentito alla ricezione solo di annunci non personalizzati, dovrai inoltrare il consenso all'SDK Google Mobile Ads.

Se utilizzi la AdMob mediazione

Puoi utilizzare l'SDK Consent per recuperare in modo dinamico l'elenco completo dei fornitori di tecnologia pubblicitaria da AdMob, come spiegato nella raccolta del consenso gestita dal publisher. Dovrai determinare quali fornitori di tecnologia pubblicitaria aggiuntivi di altre reti pubblicitarie devono essere presentati ai tuoi utenti per il consenso.

In qualità di sviluppatore di app, dovrai raccogliere il consenso degli utenti sia per i fornitori di tecnologia pubblicitaria restituiti dall'SDK Consent sia per i fornitori di altre reti pubblicitarie. Dovrai anche memorizzare manualmente le risposte del consenso degli utenti e inoltrare il consenso all'SDK Google Mobile Ads se l'utente ha acconsentito alla ricezione solo di annunci non personalizzati.

Al momento Google non è in grado di ottenere e gestire il consenso per le reti di mediazione, pertanto dovrai ottenere e gestire il consenso per ciascuna rete pubblicitaria separatamente. Per informazioni dettagliate sull'implementazione, consulta la guida all'integrazione di ogni partner di mediazione.

Aggiorna stato del consenso

Quando utilizzi l'SDK Consent, ti consigliamo di determinare lo stato del consenso degli utenti a ogni avvio dell'app. Per farlo, chiama requestConsentInfoUpdateForPublisherIdentifiers:completionHandler: su un'istanza di PACConsentInformation.

Swift

import PersonalizedAdConsent
...
class ViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    PACConsentInformation.sharedInstance.
    requestConsentInfoUpdate(
    forPublisherIdentifiers: ["pub-0123456789012345"])
    {(_ error: Error?) -> Void in
      if let error = error {
        // Consent info update failed.
      } else {
        // Consent info update succeeded. The shared PACConsentInformation
        // instance has been updated.
      }
    }
  }

Objective-C

#import <PersonalizedAdConsent/PersonalizedAdConsent.h>
...
@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  [PACConsentInformation.sharedInstance
      requestConsentInfoUpdateForPublisherIdentifiers:@[ @"pub-0123456789012345" ]
          completionHandler:^(NSError *_Nullable error) {
            if (error) {
              // Consent info update failed.
            } else {
              // Consent info update succeeded. The shared PACConsentInformation
              // instance has been updated.
            }
          }];
}

La chiamata a requestConsentInfoUpdateForPublisherIdentifiers:completionHandler: richiede due argomenti:

  • Un array di ID publisher validi e completamente attivati da cui la tua app richiede gli annunci. Trova il tuo ID publisher.

  • Un blocco che accetta un NSError come parametro di input, che fornisce informazioni su una richiesta di aggiornamento del consenso non riuscita.

Se le informazioni sul consenso vengono aggiornate, PACConsentInformation.sharedInstance.consentStatus fornisce lo stato del consenso aggiornato. Può avere i valori elencati di seguito:

Stato consenso Definizione
PACConsentStatusPersonalized L'utente ha concesso il consenso per gli annunci personalizzati.
PACConsentStatusNonPersonalized L'utente ha concesso il consenso per gli annunci non personalizzati.
PACConsentStatusUnknown L'utente non ha né concesso né rifiutato il consenso per gli annunci personalizzati o non personalizzati.

Dopo aver aggiornato correttamente le informazioni sul consenso, puoi controllare PACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown per vedere se l'utente si trova nello Spazio economico europeo o se la località della richiesta è sconosciuta.

Se la proprietà requestLocationInEEAOrUnknown è NO, l'utente non si trova nello Spazio economico europeo e il consenso non è richiesto dalle Norme relative al consenso degli utenti dell'UE. Puoi inviare richieste di annunci all'SDK Google Mobile Ads.

Se la proprietà requestLocationInEEAOrUnknown è YES:

  • Se PACConsentStatus è PACConsentStatusPersonalized o PACConsentStatusNonPersonalized, l'utente ha già fornito il consenso. Ora puoi inoltrare il consenso all'SDK Google Mobile Ads.

  • Se l'utente ha un consenso PACConsentStatusUnknown, consulta la sezione Raccogli il consenso di seguito, in cui viene descritto l'utilizzo dei metodi di utilità per raccogliere il consenso.

L' SDK per il consenso. offre due modi per raccogliere il consenso di un utente:

Ricorda di offrire agli utenti l'opzione Modifica o revoca di consenso.

Il modulo di consenso visualizzato da Google è un modulo configurabile a schermo intero che viene visualizzato sopra i contenuti dell'app. Puoi configurare il modulo per presentare all'utente combinazioni delle seguenti opzioni:

  • Consenso per visualizzare annunci personalizzati
  • Consenso per visualizzare annunci non personalizzati
  • Utilizzare una versione a pagamento dell'app anziché visualizzare gli annunci

Ti consigliamo di leggere attentamente il testo del consenso: quello che viene visualizzato per impostazione predefinita è un messaggio che potrebbe essere appropriato se utilizzi Google per monetizzare la tua app; tuttavia, non possiamo fornire una consulenza legale sul testo del consenso appropriato per te. Per aggiornare il testo per il consenso del modulo di consenso visualizzato da Google, modifica il file consentform.html incluso nell'SDK Consent come richiesto.

Il modulo di consenso visualizzato da Google è configurato e visualizzato utilizzando la classe PACConsentForm. Il codice seguente illustra come creare un elemento PACConsentForm con tutte e tre le opzioni di modulo:

Swift

// TODO: Replace with your app's privacy policy url.
guard let privacyUrl = URL(string: "https://www.your.com/privacyurl"),
  let form = PACConsentForm(applicationPrivacyPolicyURL: privacyUrl) else {
    print("incorrect privacy URL.")
    return
}
form.shouldOfferPersonalizedAds = true
form.shouldOfferNonPersonalizedAds = true
form.shouldOfferAdFree = true

Objective-C

// TODO: Replace with your app's privacy policy url.
NSURL *privacyURL = [NSURL URLWithString:@"https://www.your.com/privacyurl"];
PACConsentForm *form = [[PACConsentForm alloc] initWithApplicationPrivacyPolicyURL:privacyURL];
form.shouldOfferPersonalizedAds = YES;
form.shouldOfferNonPersonalizedAds = YES;
form.shouldOfferAdFree = YES;

Le proprietà di PACConsentForm sono descritte di seguito in maggiore dettaglio:

shouldOfferPersonalizedAds
Indica se il modulo di consenso deve mostrare un'opzione dell'annuncio personalizzato. Il valore predefinito è YES.
shouldOfferNonPersonalizedAds
Indica se il modulo di consenso deve mostrare un'opzione per gli annunci non personalizzati. Il valore predefinito è YES.
shouldOfferAdFree
Indica se il modulo di consenso deve mostrare un'opzione per app senza annunci. Il valore predefinito è NO.

Dopo aver creato e configurato un oggetto PACConsentForm, carica il modulo di consenso richiamando il metodo loadWithCompletionHandler: di PACConsentForm, come mostrato di seguito:

Swift

form.load {(_ error: Error?) -> Void in
  print("Load complete.")
  if let error = error {
    // Handle error.
    print("Error loading form: \(error.localizedDescription)")
  } else {
    // Load successful.
  }
}

Objective-C

[form loadWithCompletionHandler:^(NSError *_Nullable error) {
  NSLog(@"Load complete. Error: %@", error);
  if (error) {
    // Handle error.
  } else {
    // Load successful.
  }
}];

Per presentare all'utente il modulo di consenso visualizzato da Google, chiama presentFromViewController:dismissCompletion: su un PACConsentForm caricato, come descritto di seguito:

Swift

form.present(from: self) { (error, userPrefersAdFree) in
      if let error = error {
        // Handle error.
      } else if userPrefersAdFree {
        // User prefers to use a paid version of the app.
      } else {
        // Check the user's consent choice.
        let status =
             PACConsentInformation.sharedInstance.consentStatus
      }
    }

Objective-C

 [form presentFromViewController:self
     dismissCompletion:^(NSError *_Nullable error, BOOL userPrefersAdFree) {
       if (error) {
         // Handle error.
       } else if (userPrefersAdFree) {
         // The user prefers to use a paid version of the app.
       } else {
         // Check the user's consent choice.
         PACConsentStatus status =
             PACConsentInformation.sharedInstance.consentStatus;
       }
     }];

La chiamata a presentFromViewController:dismissCompletion: richiede due argomenti:

  • Un elemento UIViewController da cui esporre una presentazione.

  • Un blocco che accetta un NSError e un BOOL come parametri di input. L'elemento NSError fornisce informazioni se si è verificato un errore nella visualizzazione del modulo di consenso. userPrefersAdFree BOOL ha un valore di YES quando l'utente ha scelto di utilizzare una versione a pagamento dell'app anziché visualizzare gli annunci.

Dopo che l'utente ha selezionato un'opzione e ha chiuso il modulo, l'SDK Consent salva la scelta dell'utente e chiama il blocco dismissCompletion:. Puoi leggere l'opzione scelta dall'utente e inoltrare il consenso all'SDK Google Mobile Ads.

Raccolta del consenso gestita dal publisher

Se scegli di ottenere il consenso autonomamente, puoi utilizzare la proprietà adProviders della classe PACConsentInformation per ottenere i fornitori di tecnologia pubblicitaria associati agli ID publisher utilizzati nella tua app. Tieni presente che il consenso è obbligatorio per l'elenco completo dei fornitori di tecnologia pubblicitaria configurati per i tuoi ID publisher.

Prima di accedere alla proprietà adProviders di PACConsentInformation, devi attendere l'aggiornamento riuscito dello stato del consenso dell'utente, come descritto nella sezione Aggiornare lo stato del consenso.

Swift

let adProviders = PACConsentInformation.sharedInstance.adProviders

Objective-C

NSArray *adProviders = PACConsentInformation.sharedInstance.adProviders;

Puoi quindi utilizzare l'elenco dei fornitori di annunci per ottenere il tuo consenso.

Una volta ottenuto il consenso, registra il PACConsentStatus corrispondente alla risposta dell'utente utilizzando la proprietà status della classe PACConsentInformation.

Swift

PACConsentInformation.sharedInstance.consentStatus = .personalized

Objective-C

PACConsentInformation.sharedInstance.consentStatus = PACConsentStatusPersonalized;

Dopo aver segnalato il consenso all'SDK per il consenso, puoi inoltrare il consenso all'SDK Google Mobile Ads.

Per consentire agli utenti di aggiornare il consenso, ripeti i passaggi descritti nella sezione Raccogli il consenso quando l'utente sceglie di aggiornare lo stato del consenso.

Se un publisher è a conoscenza del fatto che l'utente non ha l'età del consenso digitale, per tutte le richieste di annunci deve essere impostato il tag TFUA (tag per gli utenti di età inferiore a quella del consenso digitale in Europa). Per includere questo tag in tutte le richieste di annunci effettuate dalla tua app, imposta la proprietà tagForUnderAgeOfConsent su YES. Questa impostazione viene applicata a tutte le richieste di annunci future.

Swift

PACConsentInformation.sharedInstance.isTaggedForUnderAgeOfConsent = true

Objective-C

PACConsentInformation.sharedInstance.tagForUnderAgeOfConsent = YES;

Una volta attivata l'impostazione TFUA, il modulo di consenso visualizzato da Google non verrà caricato. Tutte le richieste di annunci che includono TFUA non saranno idonee per la pubblicità personalizzata e il remarketing. TFUA disattiva le richieste a fornitori di tecnologia pubblicitaria di terze parti, come i pixel di misurazione degli annunci e gli ad server di terze parti.

Per rimuovere TFUA dalle richieste di annunci, ha impostato la proprietà tagForUnderAgeOfConsent su NO.

Test

L'SDK Consent adotta comportamenti diversi a seconda del valore di PACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown. Ad esempio, il modulo per il consenso non viene caricato se l'utente non si trova nel SEE.

Per consentire test più semplici della tua app sia all'interno che all'esterno del SEE, l'SDK per il consenso supporta le opzioni di debug che puoi impostare prima di chiamare altri metodi nell'SDK per il consenso.

  1. Prendi l'ID pubblicità del dispositivo. Puoi utilizzare il seguente codice per registrare il tuo ID pubblicità:

    #import <AdSupport/AdSupport.h>
    // ...
    
    NSLog(@"Advertising ID: %@",
          ASIdentifierManager.sharedManager.advertisingIdentifier.UUIDString);

    Controlla la console per recuperarla:

    Advertising ID: 41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339
  2. Definisci il tuo dispositivo come dispositivo di prova utilizzando l'ID pubblicità della console:

    PACConsentInformation.sharedInstance.debugIdentifiers =
        @[ @"41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339" ];
  3. Infine, imposta debugGeography come area geografica preferita a scopo di test.

    // Geography appears as in EEA for debug devices.
    PACConsentInformation.sharedInstance.debugGeography = PACDebugGeographyEEA;
    // Geography appears as not in EEA for debug devices.
    PACConsentInformation.sharedInstance.debugGeography = PACDebugGeographyNotEEA;

Dopo aver completato questi passaggi, le chiamate per aggiornare lo stato del consenso terranno conto della tua area geografica di debug.

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.

Ritardo della misurazione delle app (facoltativo)

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

Tuttavia, se l'app richiede il consenso dell'utente prima che gli eventi possano essere inviati, puoi ritardare la misurazione dell'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 al valore Info.plist dell'app. Puoi apportare questa modifica in modo programmatico:

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

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

Domande frequenti

Quanti fornitori di tecnologia pubblicitaria supporta l'SDK Consent?
L'SDK Consent non impone un limite al numero di fornitori di tecnologia pubblicitaria che un publisher sceglie di attivare.
L'elenco dei fornitori di tecnologia pubblicitaria restituiti dall'SDK si aggiorna automaticamente se cambio la mia selezione nell'interfaccia utente AdMob
Sì, se apporti modifiche all'elenco di fornitori di tecnologia pubblicitaria nell' AdMob UI, le modifiche verranno propagate agli ad server di Google entro circa un'ora.