Solicitar el consentimiento de los usuarios europeos

De acuerdo con la Política de Consentimiento de Usuarios de la UE de Google, debe hacer ciertas divulgaciones a sus usuarios en el Espacio Económico Europeo (EEE) y obtener su consentimiento para usar cookies u otro almacenamiento local, cuando así lo exija la ley, y para usar datos personales (como AdID). para publicar anuncios. Esta política refleja los requisitos de la Directiva de privacidad electrónica de la UE y el Reglamento general de protección de datos (GDPR).

Para ayudar a los editores a cumplir con sus obligaciones en virtud de esta política, Google ofrece un SDK de consentimiento. El SDK de consentimiento es una biblioteca de código abierto que proporciona funciones de utilidad para recopilar el consentimiento de sus usuarios. El código fuente completo está disponible enGitHub .

Los anuncios publicados por Google se pueden categorizar como personalizados o no personalizados, y ambos requieren el consentimiento de los usuarios en el EEE. De forma predeterminada, las solicitudes de anuncios a Google publican anuncios personalizados, con una selección de anuncios basada en los datos recopilados previamente por el usuario. Google también admite la configuración de solicitudes de anuncios para publicar anuncios no personalizados.Obtenga más información sobre los anuncios personalizados y no personalizados .

Esta guía describe cómo usar el SDK de consentimiento para obtener el consentimiento de los usuarios. También describe cómo reenviar el consentimiento al SDK de Google Mobile Ads una vez que haya obtenido el consentimiento.

requisitos previos

CocoaPods (preferido)

La forma más sencilla de importar el SDK a un proyecto de iOS es con CocoaPods . Abra el Podfile de su proyecto y agregue esta línea al objetivo de su aplicación:

pod 'PersonalizedAdConsent'

Luego, desde la línea de comando, ejecute:

pod install --repo-update

Si es nuevo en CocoaPods, consulte su documentación oficial para obtener información sobre cómo crear y usar Podfiles.

Descargar manual

También puede descargar o clonar la fuente del SDK directamente y seguir estas instrucciones para incluirlo en su proyecto:

  1. Desde el buscador, arrastre el archivo PersonalizedAdConsent.xcodeproj a su proyecto.

  2. Vaya a la pestaña Fases de construcción. En Dependencias de destino , haga clic en el botón + y agregue el destino de CustomAdConsent .

  3. Haga clic derecho en su proyecto y seleccione Agregar archivos a "MyProject" . Navegue a PersonalizedAdConsent.bundle . Asegúrese de marcar Crear referencias de carpeta .

    Una vez que haya terminado, debería ver el archivo PersonalizedAdConsent.bundle en la pestaña Fases de compilación en la sección Copiar recursos del paquete.

Antes de usar cualquier otro método en Consent SDK, debe actualizar el estado de consentimiento para asegurarse de que Consent SDK tenga la información más reciente sobre los proveedores de tecnología publicitaria que ha seleccionado en la interfaz de usuarioAdMob . Si la lista de proveedores de tecnología publicitaria ha cambiado desde la última vez que el usuario dio su consentimiento, el estado de consentimiento vuelve a ser desconocido.

Si no utiliza la mediación

Si no está utilizando la mediación, tiene dos opciones para implementar el SDK de consentimiento para recopilar el consentimiento.

Una opción es usar el SDK de consentimiento para presentar un formulario de consentimiento generado por Google a sus usuarios. El formulario de consentimiento muestra una lista de los proveedores de tecnología publicitaria que ha seleccionado en la interfaz de usuario AdMob. El SDK de consentimiento almacena la respuesta de consentimiento del usuario.

La otra opción es usar el SDK de consentimiento para recuperar dinámicamente la lista completa de proveedores de tecnología publicitaria de AdMob, como se explica en la recopilación de consentimiento administrada por el editor . Sin embargo, en este caso deberá determinar cómo la lista de proveedores debe estar disponible para sus usuarios y presentarles su propio formulario de consentimiento.

Una vez que el usuario haya realizado una elección de consentimiento, puede pedirle al SDK de consentimiento que almacene la elección de consentimiento del usuario como se explica en Almacenamiento del consentimiento administrado por el editor .

Al recopilar el consentimiento, si un usuario ha dado su consentimiento para recibir solo anuncios no personalizados, deberá reenviar el consentimiento al SDK de anuncios de Google para móviles .

Si utiliza la mediación AdMob

Puede usar el SDK de consentimiento para recuperar dinámicamente la lista completa de proveedores de tecnología publicitaria de AdMob, como se explica en la recopilación de consentimiento administrada por el editor . Deberá determinar qué proveedores de tecnología publicitaria adicionales de otras redes publicitarias deben presentarse a sus usuarios para obtener el consentimiento.

Como desarrollador de aplicaciones, deberá recopilar el consentimiento del usuario tanto para los proveedores de tecnología publicitaria devueltos por el SDK de consentimiento como para los proveedores de otras redes publicitarias. También deberá almacenar manualmente las respuestas de consentimiento del usuario y reenviar el consentimiento al SDK de anuncios de Google para móviles si el usuario dio su consentimiento para recibir solo anuncios no personalizados.

Actualmente, Google no puede obtener ni administrar el consentimiento para las redes de mediación, por lo que deberá obtener y administrar el consentimiento para cada red publicitaria por separado. Consulte la guía de integración de cada socio de mediación para conocer los detalles de implementación.

Actualizar estado de consentimiento

Al usar el SDK de consentimiento, se recomienda que determine el estado del consentimiento de un usuario en cada lanzamiento de la aplicación . Para hacer esto, llame a requestConsentInfoUpdateForPublisherIdentifiers:completionHandler: en una instancia de PACConsentInformation .

Rápido

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

C objetivo

#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 llamada a requestConsentInfoUpdateForPublisherIdentifiers:completionHandler: requiere dos argumentos:

  • Una matriz de ID de editor válidos y completamente activados a los que su aplicación solicita anuncios.Encuentre su ID de editor .

  • Un bloque que acepta un NSError como parámetro de entrada, que proporciona información sobre una solicitud de actualización de consentimiento fallida.

Si la información de consentimiento se actualiza correctamente, PACConsentInformation.sharedInstance.consentStatus proporciona el estado de consentimiento actualizado. Puede tener los valores que se indican a continuación:

Estado de consentimiento Definición
PACConsentStatusPersonalized El usuario ha dado su consentimiento para anuncios personalizados.
PACConsentStatusNonPersonalized El usuario ha dado su consentimiento para anuncios no personalizados.
PACConsentStatusUnknown El usuario no ha otorgado ni rechazado el consentimiento para anuncios personalizados o no personalizados.

Una vez que la información de consentimiento se actualice correctamente, también puede consultar PACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown para ver si el usuario se encuentra en el Espacio Económico Europeo o si se desconoce la ubicación de la solicitud.

Si la propiedad requestLocationInEEAOrUnknown es NO , el usuario no se encuentra en el Espacio Económico Europeo y no se requiere consentimiento de acuerdo con la Política de Consentimiento del Usuario de la UE. Puede realizar solicitudes de anuncios al SDK de anuncios de Google para móviles.

Si la propiedad requestLocationInEEAOrUnknown es YES :

SDK de consentimientoConsentimiento SDK .proporciona dos formas de obtener el consentimiento de un usuario:

Recuerde brindar a los usuarios la opción de Cambiar o revocar el consentimiento .

El formulario de consentimiento generado por Google es un formulario configurable de pantalla completa que se muestra sobre el contenido de su aplicación. Puede configurar el formulario para presentar al usuario combinaciones de las siguientes opciones:

  • Consentimiento para ver anuncios personalizados
  • Consentimiento para ver anuncios no personalizados
  • Use una versión paga de la aplicación en lugar de ver anuncios

Debe revisar el texto de consentimiento detenidamente: lo que aparece de forma predeterminada es un mensaje que podría ser apropiado si utiliza Google para monetizar su aplicación; pero no podemos proporcionar asesoramiento legal sobre el texto de consentimiento que sea adecuado para usted. Para actualizar el texto de consentimiento del formulario de consentimiento generado por Google, modifique el archivo consentform.html incluido en el SDK de consentimiento según sea necesario.

El formulario de consentimiento generado por Google se configura y muestra mediante la clase PACConsentForm . El siguiente código demuestra cómo construir un PACConsentForm con las tres opciones de formulario:

Rápido

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

C objetivo

// 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;

Las propiedades de PACConsentForm se describen con más detalle a continuación:

shouldOfferPersonalizedAds
Indica si el formulario de consentimiento debe mostrar una opción de anuncio personalizado. El valor predeterminado es YES .
shouldOfferNonPersonalizedAds
Indica si el formulario de consentimiento debe mostrar una opción de anuncio no personalizado. El valor predeterminado es YES .
shouldOfferAdFree
Indica si el formulario de consentimiento debe mostrar una opción de aplicación sin publicidad. El valor predeterminado es NO .

Una vez que haya creado y configurado un objeto PACConsentForm , cargue el formulario de consentimiento invocando el método loadWithCompletionHandler: de PACConsentForm , como se muestra a continuación:

Rápido

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

C objetivo

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

Para presentarle al usuario el formulario de consentimiento generado por Google, llame a presentFromViewController:dismissCompletion: en un PACConsentForm cargado, como se muestra a continuación:

Rápido

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

C objetivo

 [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 llamada a presentFromViewController:dismissCompletion: requiere dos argumentos:

  • Un UIViewController desde el que presentar.

  • Un bloque que acepta un NSError y un BOOL como parámetros de entrada. El NSError proporciona información si hubo un error al mostrar el formulario de consentimiento. El BOOL userPrefersAdFree tiene un valor de YES cuando el usuario elige usar una versión paga de la aplicación en lugar de ver anuncios.

Después de que el usuario selecciona una opción y cierra el formulario, el SDK de consentimiento guarda la elección del usuario y llama al bloque dismissCompletion: Puede leer la elección del usuario y reenviar el consentimiento al SDK de Google Mobile Ads .

Recopilación de consentimiento gestionada por el editor

Si elige obtener el consentimiento usted mismo, puede usar la propiedad adProviders de la clase PACConsentInformation para obtener los proveedores de tecnología publicitaria asociados con las ID de editor utilizadas en su aplicación. Tenga en cuenta que se requiere consentimiento para la lista completa de proveedores de tecnología publicitaria configurados para sus ID de editor.

Antes de acceder a la propiedad adProviders de PACConsentInformation , debe esperar la actualización correcta del estado de consentimiento del usuario como se describe en la sección Actualizar estado de consentimiento .

Rápido

let adProviders = PACConsentInformation.sharedInstance.adProviders

C objetivo

NSArray *adProviders = PACConsentInformation.sharedInstance.adProviders;

A continuación, puede utilizar la lista de proveedores de anuncios para obtener el consentimiento usted mismo.

Al obtener el consentimiento, registre el PACConsentStatus correspondiente a la respuesta del usuario utilizando la propiedad de status de la clase PACConsentInformation .

Rápido

PACConsentInformation.sharedInstance.consentStatus = .personalized

C objetivo

PACConsentInformation.sharedInstance.consentStatus = PACConsentStatusPersonalized;

Después de informar el consentimiento del SDK de consentimiento, puede reenviar el consentimiento al SDK de anuncios de Google para móviles .

Para permitir que los usuarios actualicen su consentimiento, simplemente repita los pasos descritos en la sección Recopilar consentimiento cuando el usuario decida actualizar su estado de consentimiento.

Si un editor sabe que el usuario tiene menos de la edad de consentimiento, todas las solicitudes de anuncios deben configurar TFUA (Etiqueta para usuarios menores de la edad de consentimiento en Europa). Para incluir esta etiqueta en todas las solicitudes de anuncios realizadas desde su aplicación, llameestablezca la propiedad tagForUnderAgeOfConsent en YES . Esta configuración surte efecto para todas las solicitudes de anuncios futuras.

Rápido

PACConsentInformation.sharedInstance.isTaggedForUnderAgeOfConsent = true

C objetivo

PACConsentInformation.sharedInstance.tagForUnderAgeOfConsent = YES;

Una vez que se habilita la configuración de TFUA, el formulario de consentimiento generado por Google no se cargará. Todas las solicitudes de anuncios que incluyan TFUA no serán elegibles para publicidad personalizada y remarketing. TFUA deshabilita las solicitudes a proveedores de tecnología publicitaria de terceros, como píxeles de medición de anuncios y servidores de anuncios de terceros.

Para eliminar TFUA de las solicitudes de anuncios, llameestablece la propiedad tagForUnderAgeOfConsent en NO .

Pruebas

El SDK de consentimiento tiene diferentes comportamientos según el valor dePACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown .Por ejemplo, el formulario de consentimiento no se carga si el usuario no se encuentra en el EEE.

Para facilitar las pruebas de su aplicación tanto dentro como fuera del EEE, Consent SDK admite opciones de depuración que puede configurar antes de llamar a cualquier otro método en Consent SDK.

  1. Tome la identificación de publicidad de su dispositivo. Puede usar el siguiente código para registrar su ID de publicidad:

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

    Y luego verifique la consola para obtenerlo:

    Advertising ID: 41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339
  2. Designe su dispositivo como dispositivo de prueba utilizando el ID de publicidad de la consola:

    PACConsentInformation.sharedInstance.debugIdentifiers =
        @[ @"41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339" ];
  3. Finalmente, establezca debugGeography en su ubicación geográfica preferida para fines de prueba.

    // 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;

Después de completar estos pasos, las llamadas para actualizar el estado de consentimiento tendrán en cuenta su ubicación geográfica de depuración.

El código de esta sección se puede usar con cualquier versión del SDK de anuncios de Google para móviles, tanto si has usado el SDK de consentimiento como si no.

El SDK de anuncios de Google para móviles sirve anuncios personalizados de forma predeterminada. Si un usuario solo da su consentimiento para recibir anuncios no personalizados, puedes configurar un objeto GADRequest para especificar que solo se soliciten anuncios no personalizados. El siguiente código hace que se soliciten anuncios no personalizados sin tener en cuenta si el usuario se encuentra en el EEE.

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];

Si se solicitan anuncios no personalizados, la URL de solicitud de anuncio incluye actualmente &npa=1, pero se trata de un ajuste de implementación interno del SDK Google Mobile Ads que podría cambiar.

Medición de la aplicación de retraso (opcional)

De forma predeterminada, el SDK de Google Mobile Ads inicializa la medición de la aplicación y comienza a enviar datos de eventos a nivel de usuario a Google inmediatamente cuando se inicia la aplicación.Este comportamiento de inicialización garantiza que pueda habilitar las métricas de usuario de AdMob sin realizar cambios adicionales en el código.

Sin embargo, si su aplicación requiere el consentimiento del usuario antes de que se puedan enviar estos eventos, puede retrasar la medición de la aplicación hasta que inicialice explícitamente el SDK de anuncios móviles o cargue un anuncio.

Para retrasar la medición de la aplicación, agregue la clave GADDelayAppMeasurementInit con un valor booleano de YES a la Info.plist de su aplicación. Puedes hacer este cambio programáticamente:

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

O edítelo en el editor de listas de propiedades:

Preguntas más frecuentes

¿Cuántos proveedores de tecnología publicitaria admite Consent SDK?
El SDK de consentimiento no impone un límite en la cantidad de proveedores de tecnología publicitaria que un editor elige habilitar.
¿La lista de proveedores de tecnología publicitaria que devuelve el SDK se actualiza automáticamente si cambio mi selección en la interfaz de usuario AdMob ?
Sí, si realiza cambios en la lista de proveedores de tecnología publicitaria en la interfaz de usuarioAdMob , los cambios se propagarán a los servidores de anuncios de Google en aproximadamente una hora.