Registrar IDs de respuesta a solicitudes de anuncios con Firebase Crashlytics

Firebase Crashlytics es una herramienta ligera que genera informes sobre fallos en tiempo real, lo que te permite gestionar problemas de estabilidad en tu aplicación fácilmente. Gracias a esta solución, puedes ahorrar tiempo a la hora de solucionar problemas, ya que agrupa los fallos de manera inteligente y muestra las circunstancias que los han provocado.

En esta guía se explica cómo puedes integrar Crashlytics en un proyecto de Android Studio para que puedas registrar los IDs de respuesta a solicitudes de anuncios. Así, cuando vayas a solucionar fallos que se produzcan en tu aplicación, puedes buscar los IDs de respuesta a solicitudes de anuncios para localizar y bloquear anuncios concretos en el centro de revisión de anuncios de AdMob .

Paso 1: Añade Firebase a una aplicación Android

  1. Si quieres probar a generar registros con Firebase en una aplicación sin fallos, puedes descargar o clonar en GitHub el repositorio de ejemplos de Android del SDK de anuncios de Google para móviles. Concretamente, en esta guía se utilizan ejemplos de anuncios de banner.

    Si ya tienes una aplicación, podrás continuar con el resto de pasos utilizando el nombre del paquete de la aplicación. Puedes seguir estas instrucciones con otros ejemplos del repositorio adaptándolas ligeramente.

  2. Para utilizar Firebase Crashlytics, deberás crear un proyecto de Firebase y añadir tu aplicación en él. Si aún no lo has hecho, crea el proyecto ahora y añádele tu aplicación.

    1. En la página de Crashlytics de la consola de Firebase, haz clic en Configurar Crashlytics.

    2. En la pantalla que aparece, haz clic en No > Configura una nueva aplicación de Firebase.

  3. En el archivo build.gradle, añade las dependencias de Google Analytics, Fabric y Crashlytics.

    app/build.gradle

    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    // Add the Fabric plugin
    apply plugin: 'io.fabric'
    
    dependencies {
        // ...
    
        // Add the Google Mobile Ads SDK
        implementation 'com.google.android.gms:play-services-ads:21.0.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:18.2.10'
    }
    

    project/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.3.10'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
    
  4. Crea y ejecuta tu aplicación para comprobar que Crashlytics se ha configurado correctamente. Si es así, podrás acceder a su panel de control.

Prueba la configuración (opcional)

Si añades un botón para forzar fallos, puedes provocar que se produzcan errores en las aplicaciones cada vez que lo pulses.

En MyActivity.java, añade las siguientes líneas a la función onCreate():

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
    // values/strings.xml.
    adView = findViewById(R.id.ad_view);

    // Start loading the ad in the background.
    adView.loadAd(new AdRequest.Builder().build());

    // Add a crash button.
    Button crashButton = new Button(this);
    crashButton.setText("Crash!");
    crashButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            throw new RuntimeException("Test Crash"); // Force a crash
        }
    });

    addContentView(crashButton, new ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT));
}

En Android Studio, crea y ejecuta tu aplicación en un emulador o en un dispositivo conectado. Cuando la aplicación se cargue, puedes usar el botón para forzar fallos. Reinicia la aplicación desde el dispositivo o desde Android Studio para que el registro de fallos se cargue en Crashlytics.

Paso 2: Registra el ID de respuesta a solicitud de anuncio

Si cargas varios anuncios y los muestras en distintos momentos, te puede resultar útil registrar cada ID de respuesta a una solicitud de anuncio con una clave distinta. Por ejemplo, en esta guía se muestra un ejemplo que solo incluye un anuncio de banner. Por lo tanto, registramos el ID de respuesta a la solicitud de anuncio como la clave banner_ad_response_id en el siguiente fragmento de código. Firebase Crashlytics te permite crear varios pares clave‑valor personalizados para distintos tipos y eventos de anuncio. Consulta AdListener para conocer el ciclo de vida de los anuncios. Para obtener más información sobre cómo generar registros personalizados, consulta el artículo sobre cómo personalizar los informes sobre fallos de Firebase Crashlytics.

En tu archivo MyActivity.java, añade el código que se indica a continuación. Básicamente, este código utiliza la función FirebaseCrashlytics.setCustomKey() en la función de retrollamada onAdLoaded() para comprobar que el anuncio se ha cargado antes de intentar llamar al método getResponseInfo().

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    adView = findViewById(R.id.ad_view);

    adView.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            String adResponseId = adView.getResponseInfo().getResponseId();
            FirebaseCrashlytics.getInstance().setCustomKey(
                    "banner_ad_response_id", adResponseId);
        }
    });

    // Start loading the ad in the background.
    adView.loadAd(new AdRequest.Builder().build());

    // Add a crash button.
    Button crashButton = new Button(this);
    crashButton.setText("Crash!");
    crashButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            throw new RuntimeException("Test Crash"); // Force a crash
        }
    });

    addContentView(crashButton, new ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT));
}

Listo. Ya puedes ver el banner_ad_response_id más reciente. Para ello, accede al panel de control de Crashlytics y ve a la sección de claves de las sesiones de fallos. Ten en cuenta que algunas claves pueden tardar hasta una hora en aparecer en el panel de control.