Según lo estipulado en la Política de Consentimiento de Usuarios de la Unión Europea de Google, debes mostrar 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 y del Reglamento General de Protección de Datos (RGPD) de la UE.
Para que los editores puedan cumplir fácilmente las disposiciones de esta política, Google proporciona un SDK de consentimiento. Se trata de 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 anuncio a Google, se sirven anuncios personalizados que se seleccionan en función de los datos de usuario que se hayan recogido con anterioridad. Google también permite configurar las solicitudes de anuncio 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. También se proporciona información sobre cómo reenviar el consentimiento al SDK de anuncios de Google para móviles cuando lo hayas obtenido.
Requisitos previos
- Inicia sesión en tu cuenta de AdMob y selecciona los proveedores de tecnología publicitaria.
Importar el SDK de consentimiento
CocoaPods (preferido)
La forma más sencilla de importar el SDK a un proyecto de iOS es mediante CocoaPods. Abre el archivo Podfile de tu proyecto y añade esta línea en el parámetro target 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 archivos Podfile.
Descarga manual
También puedes descargar o clonar el código fuente del SDK directamente y seguir estas instrucciones para incluirlo en tu proyecto:
En el Finder, arrastra el archivo
PersonalizedAdConsent.xcodeproj
a tu proyecto.Ve a la pestaña Build Phases (Fases de compilación). En Target Dependencies (Dependencias de destino), haz clic en el botón con el signo + y añade PersonalizedAdConsent como destino.
Haz clic con el botón derecho en tu proyecto y selecciona Add Files to "MyProject" (Añadir archivos a "Mi proyecto"). Desplázate a
PersonalizedAdConsent.bundle
y marca la opción 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).
Consejos para usar el SDK de consentimiento
Antes de usar cualquier otro método en el SDK de consentimiento, debes actualizar el estado del consentimiento para asegurarte de que el SDK dispone de 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 ha cambiado desde que el usuario dio su consentimiento por última vez, el estado del consentimiento vuelve a ser desconocido.
Si no usas la mediación
Si no usas la mediación, tienes dos opciones para obtener el consentimiento usando este SDK.
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 con los proveedores de tecnología publicitaria que has seleccionado en la interfaz de AdMob. Con esta opción, el SDK de consentimiento almacenará la respuesta del usuario.
La otra opción es utilizar el SDK de consentimiento para generar de forma dinámica la lista completa de proveedores de tecnología publicitaria a partir de los datos de AdMob, tal y 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 de forma dinámica la lista completa de proveedores de tecnología publicitaria a partir de los datos de AdMob, tal y como se explica en la sección Obtención de consentimiento gestionada por el editor. Tendrás que determinar qué proveedores de tecnología publicitaria adicionales de otras redes debes presentar a tus usuarios a la hora de solicitarles su consentimiento.
Como desarrollador de aplicaciones, 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 debes almacenar manualmente las respuestas a la solicitud de consentimiento de los usuarios y, si el usuario solo ha aceptado recibir anuncios no personalizados, reenviar el consentimiento al SDK de anuncios de Google para móviles.
Por el 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. Consulta los detalles de implementación en la guía de integración de cada partner de mediación.
Actualizar el estado del consentimiento
Si utilizas el SDK de consentimiento, te recomendamos que determines el estado del consentimiento del usuario cada vez que abra la aplicación. 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 IDs de editor válidos y completamente activados a los que tu aplicación solicite anuncios. Localizar el ID de editor
Un bloque que acepta un valor
NSError
como parámetro de entrada y proporciona información sobre solicitudes de actualización de consentimiento fallidas.
Si la información de consentimiento se actualiza correctamente, el método PACConsentInformation.sharedInstance.consentStatus
proporciona el estado actualizado del consentimiento, que puede tener los siguientes valores:
Estado del 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 ni denegado su consentimiento para que se le muestren anuncios personalizados o no personalizados. |
Cuando la información de consentimiento se haya actualizado correctamente, también podrás usar el método 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
, significa que 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 lo tanto, puedes solicitar anuncios al SDK de anuncios de Google para móviles.
Si la propiedad requestLocationInEEAOrUnknown
es YES
:
Si el valor de
PACConsentStatus
esPACConsentStatusPersonalized
oPACConsentStatusNonPersonalized
, significa que 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 que aparece a continuación, en la que se explica cómo usar los métodos de utilidades para obtener el consentimiento.
Obtener el consentimiento
El SDK de consentimiento de Google ofrece dos formas de recopilar el consentimiento de un usuario:

Presentar un formulario de consentimiento renderizado por Google al usuario.
Solicitar la lista de proveedores de tecnología publicitaria y obtener el consentimiento mediante la opción de obtención de consentimiento gestionada por el editor.
Recuerda que debes ofrecer a los usuarios la opción de cambiar o revocar el consentimiento.
Formulario de consentimiento renderizado por Google
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 resultar adecuado si usas Google para monetizar tu aplicación, pero no podemos ofrecerte asesoramiento legal para determinar cuál es el que mejor se adapta a tu caso. Para cambiar el mensaje de consentimiento del formulario 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 se configura y se muestra mediante la clase PACConsentForm
. En el siguiente fragmento de código, puedes ver cómo crear un elemento PACConsentForm
que incluya las tres opciones de consentimiento:
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 anuncios personalizados.
El valor predeterminado es
YES
. shouldOfferNonPersonalizedAds
- Indica si el formulario de consentimiento debe mostrar una opción de anuncios no personalizados.
El valor predeterminado es
YES
. shouldOfferAdFree
- Indica si el formulario de consentimiento debe mostrar una opción de aplicación sin anuncios.
El valor predeterminado es
NO
.
Cargar el formulario de consentimiento
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. } }];
Mostrar el formulario de consentimiento
Para mostrar al usuario el formulario de consentimiento renderizado por Google, 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 mostrar el formulario.Un bloque que acepta los valores
NSError
yBOOL
como parámetros de entrada. El valorNSError
indica si se ha producido un error al mostrar el formulario de consentimiento. El valorBOOL
userPrefersAdFree
tiene un valorYES
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 su elección 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.
Obtención de consentimiento gestionada por el editor
Si decides obtener el consentimiento por tu cuenta, puedes usar la propiedad adProviders
de la clase PACConsentInformation
para obtener los proveedores de tecnología publicitaria asociados a los IDs de editor que se usan en tu aplicación. Debes obtener el consentimiento de los usuarios para toda la lista de proveedores de tecnología publicitaria que has configurado para tus IDs de editor.
Antes de acceder a la propiedad adProviders
de PACConsentInformation
, debes esperar a que se actualice correctamente el estado del consentimiento del usuario, tal y como se describe en la sección Actualizar estado del consentimiento.
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.
Almacenar los consentimientos gestionados por el editor
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.
Cambiar o revocar el consentimiento
Para ello, solo tienes que repetir los pasos indicados en la sección Obtener el consentimiento cuando el usuario cambie su estado de consentimiento.
Usuarios que no tienen la edad de consentimiento
Si el editor sabe que el usuario no tiene la edad para dar su consentimiento legal, se debe incluir en todas las solicitudes de anuncios el parámetro TFUA (etiqueta para indicar que los usuarios no tienen edad para dar su consentimiento legal en Europa). Para incluir esta etiqueta en todas las solicitudes de anuncios realizadas desde tu aplicación, define la propiedad tagForUnderAgeOfConsent
como 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. El parámetro TFUA inhabilita 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 el parámetro TFUA de las solicitudes de anuncios, define la propiedad tagForUnderAgeOfConsent
como 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.
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
Designa el dispositivo como un dispositivo de prueba con el ID de publicidad de la consola:
PACConsentInformation.sharedInstance.debugIdentifiers = @[ @"41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339" ];
Por último, asigna el parámetro
debugGeography
al área geográfica que quieras usar en las 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;
Cuando completes estos pasos, las llamadas para actualizar el estado del consentimiento tendrán en cuenta el área geográfica de depuración que hayas establecido.
Reenviar el consentimiento al SDK de anuncios de Google para móviles
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 la medición de la aplicación (opcional)
De forma predeterminada, el SDK de anuncios de Google para móviles inicializa la medición de la aplicación y empieza a enviar datos de eventos a nivel de usuario a Google justo después de que se inicie la aplicación. Gracias a este comportamiento, puedes habilitar las métricas de usuario de AdMob sin tener que hacer ningún cambio en el código.
Sin embargo, si tu aplicación requiere el consentimiento del usuario para poder enviar estos eventos, puedes retrasar la medición de la aplicación hasta que inicialices el SDK de anuncios para móviles expresamente o cargues un anuncio.
Para retrasar la medición de la aplicación, añade la clave GADDelayAppMeasurementInit
con el valor booleano de YES
al archivo Info.plist
de la aplicación. Puedes hacerlo mediante programación:
<key>GADDelayAppMeasurementInit</key>
<true/>
También puedes utilizar el editor de lista de propiedades:
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.