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.

Cómo realizar la instalación con Gradle

Si usas la versión 19.8.0 o una posterior del SDK de anuncios de Google para dispositivos móviles, puedes omitir este paso de instalación de Gradle. De lo contrario, incluye el SDK de UMP en build.gradle de tu app de la siguiente manera:

dependencies {
    // This dependency is automatically included by Google Mobile Ads SDK 19.8.0
    // or higher.
    implementation 'com.google.android.ump:user-messaging-platform:2.0.0'
}

Después de realizar los cambios en build.gradle de tu app, asegúrate de sincronizar tu proyecto con archivos de Gradle.

Actualizar manifiesto

A continuación, busque el ID de aplicación y agrégalo a tu AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.rewardedinterstitialexample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <!-- Sample app ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

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 requestConsentInfoUpdate() 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ó.

Usa la información almacenada en el objeto consentInformationcuando presentes el formulario cuando sea necesario.

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

Java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.google.android.ump.ConsentForm;
import com.google.android.ump.ConsentInformation;
import com.google.android.ump.ConsentRequestParameters;
import com.google.android.ump.FormError;
import com.google.android.ump.UserMessagingPlatform;

public class MainActivity extends AppCompatActivity {
  private ConsentInformation consentInformation;
  private ConsentForm consentForm;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Set tag for under age of consent. false means users are not under
    // age.
    ConsentRequestParameters params = new ConsentRequestParameters
        .Builder()
        .setTagForUnderAgeOfConsent(false)
        .build();

    consentInformation = UserMessagingPlatform.getConsentInformation(this);
    consentInformation.requestConsentInfoUpdate(
        this,
        params,
        new ConsentInformation.OnConsentInfoUpdateSuccessListener() {
            @Override
            public void onConsentInfoUpdateSuccess() {
                // The consent information state was updated.
                // You are now ready to check if a form is available.
            }
        },
        new ConsentInformation.OnConsentInfoUpdateFailureListener() {
            @Override
            public void onConsentInfoUpdateFailure(FormError formError) {
                // Handle the error.
            }
        });
  }
}

Kotlin

package com.example.myapplication

import com.google.android.ump.ConsentForm
import com.google.android.ump.ConsentInformation
import com.google.android.ump.ConsentInformation.OnConsentInfoUpdateFailureListener
import com.google.android.ump.ConsentInformation.OnConsentInfoUpdateSuccessListener
import com.google.android.ump.ConsentRequestParameters
import com.google.android.ump.UserMessagingPlatform

class MainActivity : AppCompatActivity() {
  private lateinit var consentInformation: ConsentInformation
  private lateinit var consentForm: ConsentForm

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // Set tag for under age of consent. false means users are not under
    // age.
    val params = ConsentRequestParameters
        .Builder()
        .setTagForUnderAgeOfConsent(false)
        .build()

    consentInformation = UserMessagingPlatform.getConsentInformation(this)
    consentInformation.requestConsentInfoUpdate(
        this,
        params,
        OnConsentInfoUpdateSuccessListener {
          // The consent information state was updated.
          // You are now ready to check if a form is available.
        },
        OnConsentInfoUpdateFailureListener {
          // Handle the error.
        })
  }
}

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 isConsentFormAvailable() method on the ConsentInformation instance que creaste anteriormente.

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

Java

...
    consentInformation.requestConsentInfoUpdate(
        this,
        params,
        new ConsentInformation.OnConsentInfoUpdateSuccessListener() {
          @Override
          public void onConsentInfoUpdateSuccess() {
            // The consent information state was updated.
            // You are now ready to check if a form is available.
            if (consentInformation.isConsentFormAvailable()) {
              loadForm();
            }
          }
        },
        new ConsentInformation.OnConsentInfoUpdateFailureListener() {
          @Override
          public void onConsentInfoUpdateFailure(FormError formError) {
            // Handle the error.
          }
    });
  }

  public void loadForm() {

  }
}

Kotlin

...
    consentInformation.requestConsentInfoUpdate(
        this,
        params,
        OnConsentInfoUpdateSuccessListener {
          // The consent information state was updated.
          // You are now ready to check if a form is available.
          if (consentInformation.isConsentFormAvailable) {
            loadForm()
          }
        },
        OnConsentInfoUpdateFailureListener {
          // Handle the error.
        })
  }

  fun loadForm() {

  }
}

Para cargar el formulario, usa the static loadConsentForm() method on the UserMessagingPlatform class.

Java

public void loadForm() {
  // Loads a consent form. Must be called on the main thread.
  UserMessagingPlatform.loadConsentForm(
      this,
      new UserMessagingPlatform.OnConsentFormLoadSuccessListener() {
        @Override
        public void onConsentFormLoadSuccess(ConsentForm consentForm) {
          MainActivity.this.consentForm = consentForm;
        }
      },
      new UserMessagingPlatform.OnConsentFormLoadFailureListener() {
        @Override
        public void onConsentFormLoadFailure(FormError formError) {
          // Handle the error.
        }
      }
  );
}

Kotlin

fun loadForm() {
  // Loads a consent form. Must be called on the main thread.
  UserMessagingPlatform.loadConsentForm(
      this,
      UserMessagingPlatform.OnConsentFormLoadSuccessListener {
        this.consentForm = consentForm
      },
      UserMessagingPlatform.OnConsentFormLoadFailureListener {
        // Handle the error.
      }
  )
}

Presentar el formulario si es necesario

Después de determinar la disponibilidad del formulario y cargarlo, usa el métodoshow() en la instancia deConsentForm para presentar el formulario.

Usa el objetoconsentInformation anterior para verificarconsent status y actualizar tu métodoloadForm() :

Java

public void loadForm() {
  // Loads a consent form. Must be called on the main thread.
  UserMessagingPlatform.loadConsentForm(
      this,
      new UserMessagingPlatform.OnConsentFormLoadSuccessListener() {
        @Override
        public void onConsentFormLoadSuccess(ConsentForm consentForm) {
          MainActivity.this.consentForm = consentForm;
          if (consentInformation.getConsentStatus() == ConsentInformation.ConsentStatus.REQUIRED) {
            consentForm.show(
                MainActivity.this,
                new ConsentForm.OnConsentFormDismissedListener() {
                  @Override
                  public void onConsentFormDismissed(@Nullable FormError formError) {
                    if (consentInformation.getConsentStatus() == ConsentInformation.ConsentStatus.OBTAINED) {
                      // App can start requesting ads.
                    }

                    // Handle dismissal by reloading form.
                    loadForm();
                  }
            });
          }
        }
      },
      new UserMessagingPlatform.OnConsentFormLoadFailureListener() {
        @Override
        public void onConsentFormLoadFailure(FormError formError) {
          // Handle Error.
        }
      }
  );
}

Kotlin

fun loadForm() {
  // Loads a consent form. Must be called on the main thread.
  UserMessagingPlatform.loadConsentForm(
      this,
      UserMessagingPlatform.OnConsentFormLoadSuccessListener {
        this.consentForm = consentForm
        if (consentInformation.consentStatus == ConsentInformation.ConsentStatus.REQUIRED) {
          consentForm.show(
              this,
              ConsentForm.OnConsentFormDismissedListener {
                if (consentInformation.consentStatus == ConsentInformation.ConsentStatus.OBTAINED) {
                  // App can start requesting ads.
                }

                // Handle dismissal by reloading form.
                loadForm()
              }
          )
        }
      },
      UserMessagingPlatform.OnConsentFormLoadFailureListener {
        // Handle the error.
      }
  )
}

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 setDebugGeography method on ConsentDebugSettings.Builder.

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 arequestConsentInfoUpdate() sin configurar este valor, tu app registrará el hash del ID obligatorio cuando se ejecute.

Java

ConsentDebugSettings debugSettings = new ConsentDebugSettings.Builder(this)
    .setDebugGeography(ConsentDebugSettings.DebugGeography.DEBUG_GEOGRAPHY_EEA)
    .addTestDeviceHashedId("TEST-DEVICE-HASHED-ID")
    .build();

ConsentRequestParameters params = new ConsentRequestParameters
    .Builder()
    .setConsentDebugSettings(debugSettings)
    .build();

consentInformation = UserMessagingPlatform.getConsentInformation(this);
consentInformation.requestConsentInfoUpdate(this,
    params,
    new ConsentInformation.OnConsentInfoUpdateSuccessListener() {
      @Override
      public void onConsentInfoUpdateSuccess() {
        // The consent information state was updated.
        // You are now ready to check if a form is available.
      }
    },
    new ConsentInformation.OnConsentInfoUpdateFailureListener() {
      @Override
      public void onConsentInfoUpdateFailure(FormError formError) {
        // Handle the error.
      }
});

Kotlin

val debugSettings = ConsentDebugSettings.Builder(this)
    .setDebugGeography(ConsentDebugSettings.DebugGeography.DEBUG_GEOGRAPHY_EEA)
    .addTestDeviceHashedId("TEST-DEVICE-HASHED-ID")
    .build()

val params = ConsentRequestParameters
    .Builder()
    .setConsentDebugSettings(debugSettings)
    .build()

consentInformation = UserMessagingPlatform.getConsentInformation(this)
    consentInformation.requestConsentInfoUpdate(
        this,
        params,
        OnConsentInfoUpdateSuccessListener {
          // The consent information state was updated.
          // You are now ready to check if a form is available.
        },
        OnConsentInfoUpdateFailureListener {
          // Handle the error.
        })
}

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

DebugGeo Descripción
DEBUG_GEOGRAPHY_DISABLED Se inhabilitó la geografía de depuración.
DEBUG_GEOGRAPHY_EEA La ubicación geográfica aparece en el EEE para los dispositivos de depuración.
DEBUG_GEOGRAPHY_NOT_EEA 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.

Java

consentInformation.reset();

Kotlin

consentInformation.reset()

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