Solicitar el consentimiento de los usuarios europeos

Organízate con las colecciones Guarda y clasifica el contenido según tus preferencias.

Según la Política de Consentimiento de Usuarios de la UE de Google, debe divulgar determinada información a los usuarios del Espacio Económico Europeo (EEE) y obtener su consentimiento para el uso de cookies y otro tipo de almacenamiento local, cuando sea un requisito legal, así como para usar datos personales (como AdID) a fin de 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).

A fin de ayudar a los publicadores 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 obtener el consentimiento de los usuarios. El código fuente completo está disponible en GitHub deGitHub.

Los anuncios que publica Google pueden clasificarse como personalizados o no personalizados, y ambos requieren el consentimiento de los usuarios del EEE. De forma predeterminada, las solicitudes de anuncios a Google publican anuncios personalizados, y la selección de los anuncios se basa en los datos recopilados previamente del usuario. Google también admite la configuración de solicitudes de anuncios para publicar anuncios no personalizados. Obtén más información sobre los anuncios personalizados y no personalizados.

En esta guía, se describe cómo usar el SDK de consentimiento para obtener el consentimiento de los usuarios. También se describe cómo reenviar el consentimiento al SDK de los anuncios móviles de Google una vez que lo obtienes.

Requisitos previos

CocoaPods (recomendado)

La forma más sencilla de importar el SDK a un proyecto de iOS es usar CocoaPods. Abre el Podfile de tu proyecto y agrega esta línea al destino de tu app:

pod 'PersonalizedAdConsent'

Luego, desde la línea de comandos, ejecuta lo siguiente:

pod install --repo-update

Si recién comienzas a usar CocoaPods, consulta su documentación oficial para obtener información sobre cómo crear y usar Podfiles.

Descarga manual

También puedes descargar o clonar la fuente del SDK directamente y seguir estas instrucciones para incluirla en tu proyecto:

  1. Desde el buscador, arrastra el archivo PersonalizedAdConsent.xcodeproj a tu proyecto.

  2. Navega a la pestaña Fases de compilación. En Dependencias de destino, haz clic en el botón + y agrega el objetivo PersonalizedAdConsent.

  3. Haz clic con el botón derecho en tu proyecto y selecciona Add Files to "MyProject". Navega a PersonalizedAdConsent.bundle. Asegúrate de marcar Crear referencias de carpetas.

    Una vez que finalice este proceso, deberías ver PersonalizedAdConsent.bundle en la pestaña Fases de compilación de la sección Copiar recursos del paquete.

Antes de usar cualquier otro método en el SDK de consentimiento, debe actualizar el estado de consentimiento para asegurarse de que este tenga la información más reciente sobre los proveedores de tecnología publicitaria que seleccionó en la IU deAdMob . Si la lista de proveedores de tecnología publicitaria cambió desde que el usuario proporcionó el consentimiento por última vez, el estado de consentimiento vuelve a un estado desconocido.

Si no utiliza la mediación

Si no usas la mediación, tienes dos opciones para implementar el SDK de consentimiento a fin de obtener el consentimiento.

Una opción es usar el SDK de consentimiento a fin de presentar un formulario de consentimiento procesado por Google a tus usuarios. En el formulario de consentimiento, se muestra una lista de los proveedores de tecnología publicitaria que seleccionaste en la IU de AdMob. El SDK de consentimiento almacena la respuesta de consentimiento del usuario.

La otra opción es usar el SDK de consentimiento para recuperar de forma dinámica la lista completa de proveedores de tecnología publicitaria de AdMob, como se explica en la recopilación de consentimiento administrada por el publicador. Sin embargo, en este caso, deberás determinar cómo la lista de proveedores debe estar disponible para tus usuarios y presentar tu propio formulario de consentimiento a los usuarios.

Una vez que el usuario haya hecho una elección de consentimiento, puedes pedirle al SDK de consentimiento que almacene la elección de consentimiento del usuario, como se explica en Almacena el consentimiento administrado por el publicador.

Una vez que obtengas el consentimiento, si un usuario dio su consentimiento para recibir solo anuncios no personalizados, deberás reenviar el consentimiento al SDK de Google Mobile Ads.

Si usas la AdMob mediación

Puedes usar el SDK de consentimiento para recuperar de forma dinámica la lista completa de proveedores de tecnología publicitaria de AdMob, como se explica en la recopilación de consentimiento administrada por el publicador. Deberás determinar qué proveedores de tecnología publicitaria adicionales de otras redes de publicidad deberán presentarse para que los usuarios otorguen su consentimiento.

Como desarrollador de apps, deberás obtener el consentimiento del usuario para los proveedores de tecnología publicitaria que muestra el SDK de consentimiento y los proveedores de otras redes de publicidad. También deberás almacenar las respuestas de consentimiento del usuario de forma manual y reenviar el consentimiento al SDK de los anuncios móviles de Google si el usuario dio su consentimiento para recibir solo anuncios no personalizados.

Actualmente, Google no puede obtener ni manejar el consentimiento de las redes de mediación, por lo que deberás obtener y manejar el consentimiento para cada red de publicidad por separado. Consulta la guía de integración de cada socio de mediación para obtener más detalles sobre la implementación.

Actualizar el estado de consentimiento

Cuando se usa el SDK de consentimiento, se recomienda determinar el estado del consentimiento de un usuario en cada inicio de la app. Para ello, llama a requestConsentInfoUpdateForPublisherIdentifiers:completionHandler: en una instancia de 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 llamada a requestConsentInfoUpdateForPublisherIdentifiers:completionHandler: requiere dos argumentos:

  • Una matriz de ID de editores válidos y completamente activados desde los cuales tu app solicita anuncios. Busque su ID de publicador.

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

Si la información de consentimiento se actualiza correctamente, PACConsentInformation.sharedInstance.consentStatus proporciona el estado de consentimiento actualizado. Es posible que tenga los siguientes valores:

Estado de consentimiento Definición
PACConsentStatusPersonalized El usuario otorgó su consentimiento para anuncios personalizados.
PACConsentStatusNonPersonalized El usuario otorgó su consentimiento para mostrar anuncios no personalizados.
PACConsentStatusUnknown El usuario no otorgó ni rechazó el consentimiento para anuncios personalizados o no personalizados.

Una vez que la información de consentimiento se actualiza correctamente, también puedes verificar 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 el consentimiento de conformidad con la Política de Consentimiento de Usuarios de la UE. Puedes realizar solicitudes de anuncios al SDK de Google Mobile Ads.

Si la propiedad requestLocationInEEAOrUnknown es YES, sucede lo siguiente:

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

Recuerda ofrecer a los usuarios la opción de Cambiar o revocar el consentimiento.

El formulario de consentimiento que procesa Google es un formulario configurable de pantalla completa que se muestra sobre el contenido de tu app. Puedes configurar el formulario para presentar al usuario con combinaciones de las siguientes opciones:

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

Debes revisar con atención el texto del consentimiento. Lo que aparece de forma predeterminada es un mensaje que podría ser apropiado si usas Google para monetizar tu app. Sin embargo, no podemos proporcionar asesoramiento legal sobre el texto de consentimiento que sea apropiado para ti. Para actualizar el texto de consentimiento del formulario de consentimiento que procesa Google, modifica el archivo consentform.html incluido en el SDK de consentimiento según sea necesario.

El formulario de consentimiento que procesa Google se muestra en la clase PACConsentForm. En el siguiente código, se muestra cómo compilar un PACConsentForm con las tres opciones de formulario:

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;

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. La configuración predeterminada es YES.
shouldOfferNonPersonalizedAds
Indica si el formulario de consentimiento debe mostrar una opción de anuncio no personalizado. La configuración predeterminada es YES.
shouldOfferAdFree
Indica si el formulario de consentimiento debe mostrar una opción de app sin anuncios. La configuración predeterminada es NO.

Una vez que hayas creado y configurado un objeto PACConsentForm, invoca el método loadWithCompletionHandler: de PACConsentForm para cargar el formulario de consentimiento, como se muestra a continuación:

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

Para presentar al usuario el formulario de consentimiento que procesa Google, llama a presentFromViewController:dismissCompletion: en un PACConsentForm cargado, como se muestra a continuación:

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

  • Un objeto UIViewController desde el que se va a presentar

  • Un bloque que acepta una NSError y una BOOL como parámetros de entrada NSError proporciona información si se produjo un error al mostrar el formulario de consentimiento. userPrefersAdFree BOOL tiene un valor de YES cuando el usuario elige usar una versión paga de la app 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:. Puedes leer la elección del usuario y reenviar el consentimiento al SDK de anuncios de Google para dispositivos móviles.

Recopilación de consentimiento administrado por el publicador

Si eliges obtener el consentimiento, puedes usar la propiedad adProviders de la clase PACConsentInformation para obtener los proveedores de tecnología publicitaria asociados con los ID de publicador que se usan en tu app. Ten en cuenta que se requiere el consentimiento a fin de obtener la lista completa de proveedores de tecnología publicitaria configurados para tus ID de publicador.

Antes de acceder a la propiedad adProviders de PACConsentInformation, debes esperar a que se actualice correctamente el estado de consentimiento del usuario, como se describe en la sección Actualiza el estado de consentimiento.

Swift

let adProviders = PACConsentInformation.sharedInstance.adProviders

Objective‑C

NSArray *adProviders = PACConsentInformation.sharedInstance.adProviders;

Luego, puede usar la lista de proveedores de anuncios para obtener su consentimiento.

Después de obtener el consentimiento, registra el PACConsentStatus correspondiente a la respuesta del usuario mediante la propiedad status de la clase PACConsentInformation.

Swift

PACConsentInformation.sharedInstance.consentStatus = .personalized

Objective‑C

PACConsentInformation.sharedInstance.consentStatus = PACConsentStatusPersonalized;

Después de informar el consentimiento para el SDK de consentimiento, puedes reenviar el consentimiento al SDK de Google Mobile Ads.

Para permitir que los usuarios actualicen su consentimiento, solo repite los pasos descritos en la sección Recopila el consentimiento cuando el usuario elija actualizar su estado de consentimiento.

Si un publicador sabe que el usuario no alcanza la edad de consentimiento, todas las solicitudes de anuncios deben configurar la TFUA (etiqueta para usuarios que no alcanzaron la edad de consentimiento en Europa). Para incluir esta etiqueta en todas las solicitudes de anuncios de tu app,configuró la propiedad tagForUnderAgeOfConsent como YES. Esta configuración se aplica a todas las solicitudes de anuncios futuras.

Swift

PACConsentInformation.sharedInstance.isTaggedForUnderAgeOfConsent = true

Objective‑C

PACConsentInformation.sharedInstance.tagForUnderAgeOfConsent = YES;

Una vez que se habilite la configuración de TFUA, no se podrá cargar el formulario de consentimiento que procesa Google. Ninguna de las solicitudes de anuncios que incluyan TFUA no será apta para la publicidad personalizada ni el remarketing. TFUA inhabilita las solicitudes a proveedores de tecnología publicitaria de terceros, como los píxeles de medición de anuncios y los servidores de publicidad de terceros.

Para quitar el TFUA de las solicitudes de anuncios,estableció la propiedad tagForUnderAgeOfConsent en NO.

Prueba

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

Para facilitar las pruebas de tu app dentro y fuera del EEE, el SDK de consentimiento admite opciones de depuración que puedes configurar antes de llamar a cualquier otro método en el SDK de consentimiento.

  1. Toma el ID de publicidad de tu dispositivo. Puedes usar el siguiente código para registrar tu ID de publicidad:

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

    Luego, consulte la consola para obtenerla:

    Advertising ID: 41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339
  2. Designa tu dispositivo como un dispositivo de prueba con el ID de publicidad de la consola:

    PACConsentInformation.sharedInstance.debugIdentifiers =
        @[ @"41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339" ];
  3. Por último, establece debugGeography en tu geografía 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 del consentimiento tendrán en cuenta tu geografía 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.

Retrasar la medición de la aplicación (opcional)

De forma predeterminada, el SDK de anuncios de Google para dispositivos móviles inicializa la medición de apps y comienza a enviar datos de eventos a nivel de usuario a Google de inmediato cuando se inicia la app. Este comportamiento de inicialización garantiza que puedas habilitar las métricas del usuario de AdMob sin realizar cambios adicionales en el código.

Sin embargo, si tu app requiere el consentimiento del usuario para enviar estos eventos, puedes retrasar la medición hasta que inicialices el SDK de anuncios para dispositivos móviles de forma explícita o cargues un anuncio.

Para retrasar la medición de la app, agrega la clave GADDelayAppMeasurementInit con un valor booleano de YES a la Info.plist de la app. Puedes realizar este cambio de manera programática:

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

O bien, edítala en el editor de la lista de propiedades:

Preguntas frecuentes

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