Solicitar el consentimiento de los usuarios europeos

Según lo estipulado en la política de consentimiento de usuarios de la Unión Europea de Google, debes facilitar cierta información a los usuarios que se encuentren en el Espacio Económico Europeo (EEE) y obtener su consentimiento para usar cookies u otros métodos de almacenamiento local en aquellos casos en los que sea obligatorio por ley, así como para usar sus datos personales (como AdID) con el objetivo de servirles anuncios. Esta política refleja los requisitos de la directiva sobre la privacidad electrónica de la UE y del Reglamento General de Protección de Datos (RGPD).

Para que los editores puedan cumplir fácilmente las disposiciones de esta política, Google ofrece un SDK de consentimiento, es decir, una biblioteca de código abierto que ofrece funciones para obtener el consentimiento de los usuarios. El código fuente completo está disponible en GitHub.

Los anuncios que sirve Google se pueden clasificar como personalizados o no personalizados, y en ambos casos se requiere el consentimiento de los usuarios del EEE. De forma predeterminada, cuando se envían solicitudes de anuncios a Google, se sirven anuncios personalizados que se seleccionan según los datos de usuario que se hayan recogido con anterioridad. Google también permite configurar las solicitudes de anuncios para que se sirvan anuncios no personalizados. Más información sobre los anuncios personalizados y no personalizados

En esta guía se explica cómo usar el SDK de consentimiento para obtener el consentimiento de los usuarios y cómo reenviárselo al SDK de anuncios de Google para móviles cuando lo tengas.

Requisitos previos

CocoaPods (preferido)

La forma más sencilla de importar el SDK a un proyecto de iOS es mediante CocoaPods. Abre el Podfile de tu proyecto y añade esta línea en el destino de tu aplicación:

pod 'PersonalizedAdConsent'

A continuación, desde la línea de comandos, ejecuta:

pod install --repo-update

Si es la primera vez que utilizas CocoaPods, consulta la documentación oficial para obtener información sobre cómo crear y usar Podfiles.

Descarga manual

También puedes descargar o clonar el código fuente del SDK directamente y seguir estas instrucciones para incluirlo en tu proyecto:

  1. En Finder, arrastra el archivo PersonalizedAdConsent.xcodeproj a tu proyecto.

  2. Desplázate a la pestaña Build Phases (Fases de compilación). En Target Dependencies (Dependencias de destino), haz clic en el botón + y añade PersonalizedAdConsent como objetivo.

  3. Haz clic con el botón derecho en el proyecto y selecciona Add Files to "MyProject"... (Añadir archivos a "Mi proyecto"...). Ve a PersonalizedAdConsent.bundle y marca la casilla Create folder references (Crear referencias de carpetas).

    Cuando termines, debería aparecer PersonalizedAdConsent.bundle en la pestaña Build Phases (Fases de compilación) de la sección Copy Bundle Resources (Copiar recursos de paquete).

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

Si no usas la mediación

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

Una opción consiste en usar el SDK de consentimiento para presentar un formulario de consentimiento renderizado por Google a los usuarios. El formulario de consentimiento muestra una lista de los proveedores de tecnología publicitaria que has seleccionado en la interfaz de usuario de AdMob. En ese caso, el SDK de consentimiento almacenará la respuesta del usuario.

La otra opción es usar el SDK de consentimiento para generar dinámicamente la lista completa de proveedores de tecnología publicitaria de AdMob, tal como se explica en la sección Obtención de consentimiento gestionada por el editor. En este caso, tendrás que elegir cómo poner la lista de proveedores a disposición de los usuarios y presentarles tu propio formulario de consentimiento.

Cuando el usuario tome una decisión sobre el consentimiento, puedes pedir al SDK que la almacene, tal y como se explica en la sección Almacenar los consentimientos gestionados por el editor.

Si un usuario solo da su consentimiento para recibir anuncios no personalizados, tendrás que reenviárselo al SDK de anuncios de Google para móviles.

Si usas la mediación de AdMob

Puedes usar el SDK de consentimiento para generar dinámicamente la lista completa de proveedores de tecnología publicitaria de AdMob, tal como se explica en la sección Obtención de consentimiento gestionada por el editor. Tendrás que determinar para qué proveedores de tecnología publicitaria de otras redes tienes que solicitar el consentimiento a tus usuarios.

Como desarrollador de la aplicación, tienes que obtener el consentimiento de los usuarios tanto para los proveedores de tecnología publicitaria indicados por el SDK de consentimiento como para los de otras redes publicitarias. También tienes que almacenar manualmente las respuestas de consentimiento de los usuarios y reenviar el consentimiento al SDK de anuncios de Google para móviles (si el usuario solo ha aceptado recibir anuncios no personalizados).

En este momento, Google no puede obtener ni gestionar los consentimientos de las redes de mediación, por lo que tendrás que hacerlo por separado con cada red publicitaria. Estamos colaborando activamente con todas nuestras redes de mediación de código abierto y con varias versiones para ofrecer documentación actualizada sobre cómo reenviar los consentimientos. Las siguientes redes de mediación ya cuentan con esta documentación:

Si utilizas el SDK de consentimiento, te recomendamos que determines el estado de consentimiento del usuario cada vez que abra la aplicación. Para ello, tienes que llamar 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 IDs de editor a la que tu aplicación solicita los anuncios. Encuentra tu ID de editor.

  • Un bloque que acepte un NSError como parámetro de entrada y proporcione 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, que puede tener los siguientes valores:

Estado de consentimiento Definición
PACConsentStatusPersonalized El usuario ha dado su consentimiento para que se le muestren anuncios personalizados.
PACConsentStatusNonPersonalized El usuario ha dado su consentimiento para que se le muestren anuncios no personalizados.
PACConsentStatusUnknown El usuario no ha dado su consentimiento para que se le muestren anuncios personalizados o no personalizados, pero tampoco lo ha denegado.

Cuando la información de consentimiento se actualice correctamente, también podrás consultar PACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown para comprobar si el usuario se encuentra en el Espacio Económico Europeo o si la ubicación de la solicitud es desconocida.

Si la propiedad requestLocationInEEAOrUnknown es NO, es porque el usuario no se encuentra en el Espacio Económico Europeo y no se requiere su consentimiento para cumplir la política de consentimiento de usuarios de la Unión Europea. Por tanto, puedes solicitar anuncios al SDK de anuncios de Google para móviles.

Si la propiedad requestLocationInEEAOrUnknown es YES, pueden darse dos situaciones:

  • Si el valor PACConsentStatus es PACConsentStatusPersonalized o PACConsentStatusNonPersonalized, el usuario ya ha dado su consentimiento, por lo que puedes reenviárselo al SDK de anuncios de Google para móviles.

  • Si el valor del consentimiento del usuario es PACConsentStatusUnknown, consulta la sección Obtener el consentimiento, en la que explicamos cómo usar los métodos de utilidades para obtener el consentimiento.

El SDK de consentimiento de Google proporciona dos métodos para obtener el consentimiento de un usuario:

Recuerda que debes ofrecer a los usuarios la opción de cambiar o revocar el consentimiento.

El formulario de consentimiento renderizado por Google es un formulario configurable a pantalla completa que se muestra sobre el contenido de tu aplicación. Puedes configurarlo para ofrecer al usuario distintas combinaciones de las siguientes opciones:

  • Dar su consentimiento para ver anuncios personalizados.
  • Dar su consentimiento para ver anuncios no personalizados.
  • Usar una versión de pago de la aplicación en lugar de ver anuncios.

Revisa detenidamente el mensaje de consentimiento: el texto que aparece de forma predeterminada puede ser adecuado si usas Google para monetizar tu aplicación, pero no podemos darte consejos legales al respecto. Para actualizar el mensaje de consentimiento del formulario de consentimiento renderizado por Google, modifica el archivo consentform.html incluido en el SDK de consentimiento según sea necesario.

El formulario de consentimiento renderizado por Google está configurado y se muestra mediante la clase PACConsentForm. En el siguiente código puedes ver cómo crear 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;

A continuación se describen las propiedades de PACConsentForm con más detalle:

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.

Después de crear y configurar un objeto PACConsentForm, invoca el método loadWithCompletionHandler: de PACConsentForm para cargar el formulario de consentimiento, tal y 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 mostrar el formulario de consentimiento renderizado por Google al usuario, llama a presentFromViewController:dismissCompletion: en un PACConsentForm cargado, tal y 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 UIViewController desde el que hacer la presentación.

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

Cuando 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 móviles.

Si decides obtener el consentimiento por tu cuenta, puedes utilizar la propiedad adProviders de la clase PACConsentInformation para obtener los proveedores de tecnología publicitaria asociados a los ID de editor usados en tu aplicación. Debes obtener el consentimiento de los usuarios para toda la lista de proveedores de tecnología publicitaria que corresponda a tus ID de editor.

Swift

let adProviders = PACConsentInformation.sharedInstance.adProviders

Objective‑C

NSArray *adProviders = PACConsentInformation.sharedInstance.adProviders;

A continuación, podrás usar la lista de proveedores de anuncios para obtener el consentimiento por tu cuenta.

Cuando obtengas 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;

Tras comunicar el consentimiento al SDK, puedes reenviárselo al SDK de anuncios de Google para móviles.

Para ello, solo tienes que repetir los pasos indicados en la sección Obtener el consentimiento cuando el usuario cambie su estado de consentimiento.

Si el editor sabe que el usuario no tiene la edad de consentimiento, se debe asignar el parámetro TFUA a todas las solicitudes de anuncios (se trata de la etiqueta para identificar a los usuarios cuya edad es inferior a la edad de consentimiento en Europa). Para incluir esta etiqueta en todas las solicitudes de anuncios realizadas desde tu aplicación, asigna el valor tagForUnderAgeOfConsent a la propiedad YES. Este ajuste se aplicará a todas las solicitudes de anuncios posteriores.

Swift

PACConsentInformation.sharedInstance.isTaggedForUnderAgeOfConsent = true

Objective‑C

PACConsentInformation.sharedInstance.tagForUnderAgeOfConsent = YES;

Si habilitas el parámetro TFUA, el formulario de consentimiento renderizado por Google no podrá cargarse. Todas las solicitudes de anuncios que incluyan esta etiqueta dejarán de ser aptas para mostrar anuncios personalizados y para 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 anuncios de terceros.

Para eliminar el parámetro TFUA de las solicitudes de anuncios, asigna el valor tagForUnderAgeOfConsent a la propiedad NO.

Pruebas

El comportamiento del SDK de consentimiento varía en función del valor de PACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown. Por ejemplo, el formulario de consentimiento no se carga si el usuario no se encuentra en el EEE.

Para que sea más fácil probar la aplicación dentro y fuera del EEE, el SDK de consentimiento admite las opciones de depuración, que puedes configurar antes de llamar a otros métodos en el SDK de consentimiento.

  1. Obtén el ID de publicidad de tu dispositivo. Puedes usar el siguiente código para registrarlo:

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

    A continuación, ve a la consola para obtenerlo:

    Advertising ID: 41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339
    
  2. Usa el ID de publicidad de la consola para incluir tu dispositivo en la lista blanca como un dispositivo de depuración:

    PACConsentInformation.sharedInstance.debugIdentifiers =
        @[ @"41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339" ];
    
  3. Por último, asigna el área geográfica que quieras usar en las pruebas al parámetro debugGeography.

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

Cuando completes estos pasos, las llamadas para actualizar el estado de consentimiento tendrán en cuenta el área geográfica de depuración.

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 se soliciten únicamente anuncios de este tipo. 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 una característica de implementación interna del SDK de anuncios de Google para móviles que puede cambiar.

Preguntas frecuentes

¿Cuántos proveedores de tecnología publicitaria admite el SDK de consentimiento?
No hay ningún límite en el número de proveedores de tecnología publicitaria que puede habilitar el editor con el SDK de consentimiento.
¿La lista de proveedores de tecnología publicitaria que muestra el SDK se actualiza automáticamente si cambio mi selección en la interfaz de usuario de AdMob?
Así es. Si haces algún cambio en la lista de proveedores de tecnología publicitaria de la interfaz de usuario de AdMob, los cambios se propagarán a los servidores de anuncios de Google en una hora aproximadamente.

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.