Solicitud de consentimiento de los usuarios europeos

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 usar cookies y otro tipo de almacenamiento local, cuando sea un requisito legal, como así también 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).

Para 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 enGitHub.

Los anuncios que publica Google se pueden categorizar como personalizados o no personalizados y 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 anuncios se basa en los datos recopilados del 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.

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 después de obtener el consentimiento.

Prerequisites

CocoaPods (preferido)

La forma más sencilla de importar el SDK a un proyecto de iOS es con 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, ejecute el siguiente comando:

pod install --repo-update

Si eres nuevo en 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 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, debería aparecer PersonalizedAdConsent.bundle en la pestaña Fases de compilación de la sección Copiar recursos de paquete.

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

Si no usa la mediación

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

Una opción es usar el SDK de consentimiento a fin de presentar un formulario de consentimiento procesado por Google a tus usuarios. El formulario de consentimiento 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 deberá estar disponible para los 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 Cómo almacenar el consentimiento administrado por el editor.

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 los anuncios móviles de Google.

Si usas la mediación AdMob

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 deben presentarse a los usuarios para obtener su consentimiento.

Como desarrollador de aplicaciones, deberá 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 manualmente las respuestas de consentimiento del usuario y reenviar el consentimiento al SDK de Google Mobile Ads si el usuario dio su consentimiento para recibir solo anuncios no personalizados.

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

Actualizar el estado de consentimiento

Cuando usas el SDK de consentimiento, se recomienda que determines 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 publicador válidos y completamente activados desde los cuales tu app solicita anuncios. Busca tu 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 del consentimiento Definición
PACConsentStatusPersonalized El usuario otorgó su consentimiento para los anuncios personalizados.
PACConsentStatusNonPersonalized El usuario otorgó su consentimiento para los anuncios no personalizados.
PACConsentStatusUnknown El usuario no otorgó ni rechazó el consentimiento para mostrar 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 consentimiento en virtud de 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:

SDK 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 en pantalla completa que se muestra sobre el contenido de tu app. Puedes configurar el formulario para presentar al usuario combinaciones de las siguientes opciones:

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

Debes revisar el texto de consentimiento con atención: 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 brindarte asesoramiento legal sobre el texto de consentimiento que es apropiado para ti. Para actualizar el texto de consentimiento del formulario de consentimiento procesado por Google, modifica el archivo consentform.html incluido en el SDK de consentimiento según sea necesario.

El formulario de consentimiento que procesa Google se configura y muestra con 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, carga el formulario de consentimiento mediante la invocación del método loadWithCompletionHandler: de PACConsentForm, 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 un NSError y un BOOL como parámetros de entrada NSError proporciona información si se produjo un error al mostrar el formulario de consentimiento. El valor de userPrefersAdFree BOOL tiene un valor de YES cuando el usuario eligió usar una versión pagada 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 Google Mobile Ads.

Recopilación de consentimiento administrada por el editor

Si eliges obtener el consentimiento por tu cuenta, puedes usar la propiedad adProviders de la clase PACConsentInformation a fin de obtener los proveedores de tecnología publicitaria asociados con los ID de publicador usados en tu app. Ten en cuenta que se requiere tu consentimiento para ver la lista completa de proveedores de tecnología publicitaria configurados para los 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 utilizar la lista de proveedores de anuncios para obtener su consentimiento.

Cuando obtengas el consentimiento, registra el PACConsentStatus correspondiente a la respuesta del usuario con 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 Recopilar 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 establecer la etiqueta TFUA (etiqueta para usuarios que no alcanzaron la edad de consentimiento en Europa). Para incluir esta etiqueta en todas las solicitudes de anuncios realizadas desde su aplicación,establece la propiedad tagForUnderAgeOfConsent en 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, el formulario de consentimiento que procesa Google no se cargará. Todas las solicitudes de anuncios que incluyan TFUA no serán aptas para la publicidad personalizada y el remarketing. El 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 quitar el TFUA de las solicitudes de anuncios,establece la propiedad tagForUnderAgeOfConsent en NO.

Pruebas

El SDK de consentimiento tiene comportamientos diferentes según el valor dePACConsentInformation.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, revisa la consola para obtenerla:

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

    PACConsentInformation.sharedInstance.debugIdentifiers =
        @[ @"41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339" ];
  3. Por último, configura debugGeography como la ubicación geográfica preferida para realizar pruebas.

    // 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 Google Mobile Ads. También se puede usar sin importar si usaste el SDK de consentimiento para obtener el consentimiento.

El comportamiento predeterminado del SDK de Google Mobile Ads es publicar anuncios personalizados. Si un usuario dio su consentimiento para recibir solo anuncios no personalizados, puedes configurar un objeto GADRequest para especificar que solo se deben solicitar anuncios no personalizados. El siguiente código hace que se soliciten anuncios no personalizados independientemente de si el usuario se encuentra o no 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 la solicitud incluye &npa=1. Sin embargo, ten en cuenta que este es un detalle interno de la implementación del SDK de Google Mobile Ads y está sujeto a cambios.

Retrasar medición de apps (opcional)

De forma predeterminada, el SDK de Google Mobile Ads 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 antes de que se puedan enviar estos eventos, puedes demorar 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 listas 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 editor elige habilitar.
¿Se actualiza automáticamente la lista de proveedores de tecnología publicitaria que muestra el SDK si cambio mi selección en la AdMob IU?
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.