Comienza ahora

Según la Política de Consentimiento de Usuarios de la UE de Google, debes divulgar determinada información a los usuarios del Espacio Económico Europeo (EEE) y del Reino Unido, y obtener su consentimiento para el uso de cookies y otro tipo de almacenamiento local, cuando sea un requisito legal, como así también para el uso de datos personales (como AdID) con fines de publicación de 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 el SDK de User Messaging Platform (UMP). Se actualizó el SDK de UMP para que admita los estándares más recientes de la IAB. Todas estas configuraciones ahora se pueden manejar de forma conveniente en la AdMob privacidad y la mensajería.

Requisitos previos

Tipos de mensajes para los usuarios

Consulta Tipos de mensajes de los usuarios para obtener una lista completa de los mensajes admitidos. Para obtener instrucciones específicas sobre cómo implementar cada tipo de mensaje, consulta la barra de navegación izquierda.

Importa el SDK

CocoaPods (preferido)

El SDK de UMP se incluye como dependencia del Pod del SDK de Google Mobile Ads a partir del SDK 7.64.0.

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

pod 'Google-Mobile-Ads-SDK'

Luego, ejecuta el comando siguiente:

pod install --repo-update

Si eres nuevo en CocoaPods, consulta Cómo usar CocoaPods para obtener detalles sobre cómo crear y usar Podfiles.

Descarga manual

La otra forma de importar el SDK es hacerlo manualmente.

Descarga el SDK

Luego, arrastra el framework a tu proyecto de Xcode y asegúrate de seleccionar Copiar elementos si es necesario.

Luego, puedes incluir el framework en cualquier archivo que necesites mediante:

Swift

import UserMessagingPlatform

Objective‑C

#include <UserMessagingPlatform/UserMessagingPlatform.h>

Actualiza el archivo Info.plist

Busque su ID de aplicación y agrégalo a tu Info.plist:

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>

Determina si se debe mostrar un mensaje

Debes solicitar una actualización de la información de consentimiento del usuario en cada inicio de la app mediante requestConsentInfoUpdateWithParameters:completionHandler: antes de cargar un formulario. Esto puede determinar si el usuario debe dar su consentimiento si aún no lo ha hecho o si venció.

Si es necesario, puedes presentar el formulario más adelante.

A continuación, se muestra un ejemplo de cómo verificar el estado cuando se inicia la app:

Swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
   // Create a UMPRequestParameters object.
   let parameters = UMPRequestParameters()
   // Set tag for under age of consent. Here false means users are not under age.
   parameters.tagForUnderAgeOfConsent = false

   // Request an update to the consent information.
   UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
      with: parameters,
      completionHandler: { error in
        if error != nil {
           // Handle the error.
        } else {
           // The consent information state was updated.
           // You are now ready to check if a form is
           // available.
        }
       })
}

Objective‑C

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

// Create a UMPRequestParameters object.
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
// Set tag for under age of consent. Here NO means users are not under age.
parameters.tagForUnderAgeOfConsent = NO;

// Request an update to the consent information.
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError *_Nullable error) {
                           if (error) {
                             // Handle the error.
                           } else {
                             // The consent information state was updated.
                             // You are now ready to check if a form is
                             // available.
                           }
                         }];
}

Cargar un formulario si está disponible

Antes de mostrar un formulario, primero debe determinar si hay uno disponible. Los formularios no disponibles pueden deberse a que el usuario habilitó el seguimiento de anuncios limitado o a que los etiquetó como menores de la edad de consentimiento.

Para verificar la disponibilidad de un formulario, usa elthe formStatus property on the UMPConsentInformation instance que creaste anteriormente.

Luego, agrega un método wrapper para cargar el formulario:

Swift

// Request an update to the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
    withParameters: parameters,
    completionHandler: { [self] error in

      // The consent information has updated.
      if error != nil {
        // Handle the error.
      } else {
        // The consent information state was updated.
        // You are now ready to see if a form is available.
        let formStatus = UMPConsentInformation.sharedInstance.formStatus
        if formStatus == UMPFormStatus.available {
          loadForm()
        }
      }
    })
...
func loadForm() {

}

Objective‑C

// Request an update to the consent information.
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError* _Nullable error) {

                           // The consent information has updated.
                           if (error) {
                             // Handle the error.
                           } else {
                             // The consent information state was updated.
                             // You are now ready to see if a form is available.
                             UMPFormStatus formStatus =
                                 UMPConsentInformation.sharedInstance
                                     .formStatus;
                             if (formStatus == UMPFormStatusAvailable) {
                               [self loadForm];
                             }
                           }
                         }];
...
- (void) loadForm {

}

Para cargar el formulario, usa the static loadWithCompletionHandler: method on the UMPConsentForm class.

Swift

func loadForm() {
  // Loads a consent form. Must be called on the main thread.
  UMPConsentForm.load(
      withCompletionHandler: { form, loadError in
        if loadError != nil {
          // Handle the error
        } else {
          // Present the form
        }
      })
}

Objective‑C

- (void)loadForm {
  [UMPConsentForm
      loadWithCompletionHandler:^(UMPConsentForm *form, NSError *loadError) {
        if (loadError) {
          // Handle the error
        } else {
          // Present the form
        }
      }];
}

Presentar el formulario si es necesario

Después de determinar la disponibilidad del formulario y cargarlo, usa el métodopresentFromViewController:completionHandler: en la instancia deUMPConsentForm para presentar el formulario.

Usa el objetoUMPConsentInformation anterior para verificarconsent status y actualizar tu métodoloadForm :

Swift

func loadForm() {
  UMPConsentForm.load(withCompletionHandler: { form, loadError in
    if loadError != nil {
      // Handle the error.
    } else {
      // Present the form. You can also hold on to the reference to present
      // later.
      if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.required {
        form?.present(
            from: self,
            completionHandler: { dismissError in
              if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.obtained {
                // App can start requesting ads.
              }
                // Handle dismissal by reloading form.
                loadForm();
            })
      } else {
        // Keep the form available for changes to user consent.
      }
    }
  })
}

Objective‑C

- (void)loadForm {
  [UMPConsentForm loadWithCompletionHandler:^(UMPConsentForm *form,
                                              NSError *loadError) {
    if (loadError) {
      // Handle the error.
    } else {
      // Present the form. You can also hold on to the reference to present
      // later.
      if (UMPConsentInformation.sharedInstance.consentStatus ==
          UMPConsentStatusRequired) {
        [form
            presentFromViewController:self
                    completionHandler:^(NSError *_Nullable dismissError) {
                      if (UMPConsentInformation.sharedInstance.consentStatus ==
                          UMPConsentStatusObtained) {
                        // App can start requesting ads.
                      }
                        // Handle dismissal by reloading form.
                        [self loadForm];
                    }];
      } else {
        // Keep the form available for changes to user consent.
      }
    }
  }];
}

Si necesitas realizar alguna acción después de que el usuario eligió o descartó el formulario, coloca esa lógica en el controlador de finalización o en la devolución de llamada del formulario.

Prueba

Forzar una geografía

El SDK de UMP proporciona una forma de probar el comportamiento de tu app como si el dispositivo estuviera ubicado en el EEE o el Reino Unido mediante the debugGeography property of type UMPDebugGeography on UMPDebugSettings.

Debes proporcionar el ID con hash de tu dispositivo de prueba en la configuración de depuración de tu app para usar la funcionalidad de depuración. Si llamas arequestConsentInfoUpdateWithParameters:completionHandler: sin configurar este valor, tu app registrará el hash del ID obligatorio cuando se ejecute.

Swift

let parameters = UMPRequestParameters()
let debugSettings = UMPDebugSettings()
debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"]
debugSettings.geography = UMPDebugGeography.EEA
parameters.debugSettings = debugSettings
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
    with: parameters,
    completionHandler: { error in
      ...
    })

Objective‑C

UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init];
debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ];
debugSettings.geography = UMPDebugGeographyEEA;
parameters.debugSettings = debugSettings;
[UMPConsentInformation.sharedInstance
    requestConsentInfoUpdateWithParameters:parameters
                         completionHandler:^(NSError *_Nullable error){
                           ...
}];

Con la UMPDebugGeography, puedes forzar la ubicación geográfica a una de estas opciones:

DebugGeo Descripción
UMPDebugGeographyDisabled Se inhabilitó la geografía de depuración.
UMPDebugGeographyEEA La ubicación geográfica aparece en el EEE para los dispositivos de depuración.
UMPDebugGeographyNotEEA La geografía no aparece en el EEE para los dispositivos de depuración.

Ten en cuenta que la configuración de depuración solo funciona en dispositivos de prueba. No es necesario agregar los emuladores a la lista de ID de dispositivos porque ya tienen habilitadas las pruebas de forma predeterminada.

Cuando pruebes tu app con el SDK de UMP, tal vez te resulte útil restablecer el estado del SDK para que puedas simular la primera experiencia del usuario con la instalación. El SDK proporciona el método reset para hacer esto.

Swift

UMPConsentInformation.sharedInstance.reset()

Objective‑C

[UMPConsentInformation.sharedInstance reset];

También debes llamar a reset si decides quitar el SDK de UMP por completo de tu proyecto.