Bienvenidos a este tutorial sobre cómo implementar un aviso de Consentimiento obligatorio para mostrar anuncios Admob en Android Java y Kotlin.
Para implementar el anuncio de consentimiento, hemos configurado previamente nuestra aplicación como indicamos en este tutorial:
Vamos a utilizar el SDK de Google Admob: https://developers.google.com/admob/android/privacy?hl=es-419
Lo primero que vamos a hacer es ir a app/build.gradle
y añadimos la siguiente dependencia:
dependencies { implementation 'com.google.android.ump:user-messaging-platform:2.1.0' }
Ahora vamos a nuestro activity principal, en mi caso MainActivity.java y añadimos lo siguiente:
- Creamos estas variables:
//Aviso de Google Admob para UE private ConsentInformation consentInformation; // Use an atomic boolean to initialize the Google Mobile Ads SDK and load ads once. private final AtomicBoolean isMobileAdsInitializeCalled = new AtomicBoolean(false);
- Sustituimos el inicializar anuncios si lo tuviéramos, dentro de oncreate (
//MobileAds.initialize(this);
) por esto:
solicitarConsentimientoAnuncios();
- Creamos la función
solicitarConsentimientoAnuncios()
:
private void solicitarConsentimientoAnuncios() { // Set tag for under age of consent. false means users are not under age // of consent. ConsentRequestParameters params = new ConsentRequestParameters .Builder() .setTagForUnderAgeOfConsent(false) .build(); consentInformation = UserMessagingPlatform.getConsentInformation(this); consentInformation.requestConsentInfoUpdate( this, params, (ConsentInformation.OnConsentInfoUpdateSuccessListener) () -> { UserMessagingPlatform.loadAndShowConsentFormIfRequired( this, (ConsentForm.OnConsentFormDismissedListener) loadAndShowError -> { if (loadAndShowError != null) { // Consent gathering failed. Log.w("TAG", String.format("%s: %s", loadAndShowError.getErrorCode(), loadAndShowError.getMessage())); } // Consent has been gathered. if (consentInformation.canRequestAds()) { initializeMobileAdsSdk(); } } ); }, (ConsentInformation.OnConsentInfoUpdateFailureListener) requestConsentError -> { // Consent gathering failed. Log.w("TAG", String.format("%s: %s", requestConsentError.getErrorCode(), requestConsentError.getMessage())); }); // Check if you can initialize the Google Mobile Ads SDK in parallel // while checking for new consent information. Consent obtained in // the previous session can be used to request ads. if (consentInformation.canRequestAds()) { initializeMobileAdsSdk(); } }
- Creamos la función
initializeMobileAdsSdk();
private void initializeMobileAdsSdk() { if (isMobileAdsInitializeCalled.getAndSet(true)) { return; } // Initialize the Google Mobile Ads SDK. MobileAds.initialize(this); }
Y listo, ya tenemos nuestra ventana de notificación preparada.
Finalmente, el código en conjunto queda de la siguiente forma:
//Aviso de Google Admob para UE private ConsentInformation consentInformation; // Use an atomic boolean to initialize the Google Mobile Ads SDK and load ads once. private final AtomicBoolean isMobileAdsInitializeCalled = new AtomicBoolean(false); ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ... //MobileAds.initialize(this); solicitarConsentimientoAnuncios(); ... } private void solicitarConsentimientoAnuncios() { // Set tag for under age of consent. false means users are not under age // of consent. ConsentRequestParameters params = new ConsentRequestParameters .Builder() .setTagForUnderAgeOfConsent(false) .build(); consentInformation = UserMessagingPlatform.getConsentInformation(this); consentInformation.requestConsentInfoUpdate( this, params, (ConsentInformation.OnConsentInfoUpdateSuccessListener) () -> { UserMessagingPlatform.loadAndShowConsentFormIfRequired( this, (ConsentForm.OnConsentFormDismissedListener) loadAndShowError -> { if (loadAndShowError != null) { // Consent gathering failed. Log.w("TAG", String.format("%s: %s", loadAndShowError.getErrorCode(), loadAndShowError.getMessage())); } // Consent has been gathered. if (consentInformation.canRequestAds()) { initializeMobileAdsSdk(); } } ); }, (ConsentInformation.OnConsentInfoUpdateFailureListener) requestConsentError -> { // Consent gathering failed. Log.w("TAG", String.format("%s: %s", requestConsentError.getErrorCode(), requestConsentError.getMessage())); }); // Check if you can initialize the Google Mobile Ads SDK in parallel // while checking for new consent information. Consent obtained in // the previous session can be used to request ads. if (consentInformation.canRequestAds()) { initializeMobileAdsSdk(); } } private void initializeMobileAdsSdk() { if (isMobileAdsInitializeCalled.getAndSet(true)) { return; } // Initialize the Google Mobile Ads SDK. MobileAds.initialize(this); }
Extra: Versión con objeto, más simplificada y rápida. Java y Kotlin
Versión Java:
Recuerda añadir la librería:
implementation 'com.google.android.ump:user-messaging-platform:2.1.0'
He creado una versión directamente en un objeto, que nos permitirá que sea más rápido y sencillo.
AdmobAlert.java
import android.app.Activity; import android.util.Log; import com.google.android.gms.ads.MobileAds; import com.google.android.ump.ConsentForm; import com.google.android.ump.ConsentInformation; import com.google.android.ump.ConsentRequestParameters; import com.google.android.ump.UserMessagingPlatform; import java.util.concurrent.atomic.AtomicBoolean; public class AdmobAlert { private ConsentInformation consentInformation; // Use an atomic boolean to initialize the Google Mobile Ads SDK and load ads once. private final AtomicBoolean isMobileAdsInitializeCalled = new AtomicBoolean(false); public AdmobAlert(Activity activity) { solicitarConsentimientoAnuncios(activity); } private void solicitarConsentimientoAnuncios(Activity activity) { // Set tag for under age of consent. false means users are not under age // of consent. ConsentRequestParameters params = new ConsentRequestParameters .Builder() .setTagForUnderAgeOfConsent(false) .build(); consentInformation = UserMessagingPlatform.getConsentInformation(activity); consentInformation.requestConsentInfoUpdate( activity, params, (ConsentInformation.OnConsentInfoUpdateSuccessListener) () -> { UserMessagingPlatform.loadAndShowConsentFormIfRequired( activity, (ConsentForm.OnConsentFormDismissedListener) loadAndShowError -> { if (loadAndShowError != null) { // Consent gathering failed. Log.w("TAG", String.format("%s: %s", loadAndShowError.getErrorCode(), loadAndShowError.getMessage())); } // Consent has been gathered. if (consentInformation.canRequestAds()) { initializeMobileAdsSdk(activity); } } ); }, (ConsentInformation.OnConsentInfoUpdateFailureListener) requestConsentError -> { // Consent gathering failed. Log.w("TAG", String.format("%s: %s", requestConsentError.getErrorCode(), requestConsentError.getMessage())); }); // Check if you can initialize the Google Mobile Ads SDK in parallel // while checking for new consent information. Consent obtained in // the previous session can be used to request ads. if (consentInformation.canRequestAds()) { initializeMobileAdsSdk(activity); } } private void initializeMobileAdsSdk(Activity activity) { if (isMobileAdsInitializeCalled.getAndSet(true)) { return; } // Initialize the Google Mobile Ads SDK. MobileAds.initialize(activity); } }
Y solo tendremos que invocar este objeto en nuestro proyecto, dónde querramos mostrarlo, por ejemplo en MainActvity.java
new AdmobAlert(this);
Versión Kotlin
Recuerda añadir la librería:
implementation 'com.google.android.ump:user-messaging-platform:2.1.0'
AdmobAlert
.kt
import android.app.Activity import android.util.Log import com.google.android.gms.ads.MobileAds import com.google.android.ump.ConsentForm import com.google.android.ump.ConsentInformation import com.google.android.ump.ConsentRequestParameters import com.google.android.ump.UserMessagingPlatform import java.util.concurrent.atomic.AtomicBoolean class AdmobAlert(activity: Activity) { private var consentInformation: ConsentInformation // Use an atomic boolean to initialize the Google Mobile Ads SDK and load ads once. private val isMobileAdsInitializeCalled = AtomicBoolean(false) init { solicitarConsentimientoAnuncios(activity) } private fun solicitarConsentimientoAnuncios(activity: Activity) { // Set tag for under age of consent. false means users are not under age // of consent. val params = ConsentRequestParameters .Builder() .setTagForUnderAgeOfConsent(false) .build() consentInformation = UserMessagingPlatform.getConsentInformation(activity) consentInformation.requestConsentInfoUpdate( activity, params, ConsentInformation.OnConsentInfoUpdateSuccessListener { UserMessagingPlatform.loadAndShowConsentFormIfRequired( activity, ConsentForm.OnConsentFormDismissedListener { loadAndShowError -> if (loadAndShowError != null) { // Consent gathering failed. Log.w( "TAG", String.format( "%s: %s", loadAndShowError.errorCode, loadAndShowError.message ) ) } // Consent has been gathered. if (consentInformation.canRequestAds()) { initializeMobileAdsSdk(activity) } } ) }, ConsentInformation.OnConsentInfoUpdateFailureListener { requestConsentError -> // Consent gathering failed. Log.w( "TAG", String.format( "%s: %s", requestConsentError.errorCode, requestConsentError.message ) ) }) // Check if you can initialize the Google Mobile Ads SDK in parallel // while checking for new consent information. Consent obtained in // the previous session can be used to request ads. if (consentInformation.canRequestAds()) { initializeMobileAdsSdk(activity) } } private fun initializeMobileAdsSdk(activity: Activity) { if (isMobileAdsInitializeCalled.getAndSet(true)) { return } // Initialize the Google Mobile Ads SDK. MobileAds.initialize(activity) } }
Para invocarlo:
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.app.fuentes_de_agua.Util.ads.AdmobAlert class TuActividad : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.tu_layout) // Crear una instancia de AdmobAlert y pasarle la referencia de la actividad val admobAlert = AdmobAlert(this) } }
Ingeniero en Informática, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.
2 comentarios en «Implementar aviso de Consentimiento de Usuarios UE con Google Admob y Android (UMP SDK – Alert Admob)»