Cómo registrar el ID de la respuesta del anuncio con Firebase Crashlytics

Firebase Crashlytics es una herramienta liviana para informar fallas en tiempo real que te permite administrar fácilmente los problemas de estabilidad de tu app. Crashlytics te ahorra tiempo en la solución de problemas agrupando las fallas de forma inteligente y destacando las circunstancias que las llevaron a resolver.

En esta guía, se describe cómo integrar Crashlytics en tu proyecto de Android Studio para que puedas registrar los ID de respuesta de los anuncios. Más adelante, cuando soluciones problemas de fallas en tu app, puedes buscar el ID de respuesta del anuncio y usar el Centro de revisión de anuncios en Ad Manager para encontrar y bloquear los anuncios.

Paso 1: Agrega Firebase a una aplicación para Android

  1. Si quieres intentar acceder con Firebase desde una app limpia, puedes descargar o clonar los ejemplos del SDK de anuncios de Google para dispositivos móviles del repositorio de Android en GitHub. En esta guía, se usa específicamente el ejemplo de banner Ejemplo de banner.

    Si ya tienes una app, deberías poder continuar con otros pasos con el nombre del paquete de la app. Los mismos pasos también se pueden aplicar a otros ejemplos en el repositorio con adaptaciones menores.

  2. Para usar Firebase Crashlytics, debes crear un proyecto de Firebase y agregarle tu app. Si aún no lo has hecho, crea un proyecto de Firebase. Asegúrate de registrar tu app en ella.

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

    2. En la pantalla que aparece, haz clic en No > Configurar una nueva app de Firebase.

  3. En tu archivo build.gradle, agrega 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:22.4.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:18.4.1'
    }
    

    proyecto/build.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.3.15'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
    
  4. Compila y ejecuta tu app para asegurarte de que Crashlytics esté configurado correctamente. Una vez que lo hagas, podrás acceder al panel de Crashlytics.

(Opcional): Prueba tu configuración

Si agregas un botón para bloquear, puedes forzar una falla para que esta ocurra con cada presión sobre el botón.

En el siguiente ejemplo, se muestra cómo agregar un botón de falla en el método onCreate() de un Activity:

MainActivity (extracto)

Java

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 AdManagerAdRequest.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));
}

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  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(AdManagerAdRequest.Builder().build())

  // Add a crash button.
  val crashButton = Button(this)
  crashButton.text = "Crash!"
  crashButton.setOnClickListener {
    throw RuntimeException("Test Crash") // Force a crash
  }

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

En Android Studio, compila y ejecuta tu app en un emulador o un dispositivo conectado. Después de que se cargue la app, puedes hacer clic en el botón Crash. Reinicia la app desde el dispositivo o Android Studio para subir el registro de fallas a Crashlyics.

Paso 2: Registre el ID de respuesta del anuncio

Si cargas varios anuncios y los muestras en diferentes momentos, te recomendamos registrar cada ID de respuesta del anuncio con una clave diferente. Por ejemplo, en esta guía se usa un ejemplo que tiene un solo anuncio de banner. Por lo tanto, registramos el ID de respuesta del anuncio como la clave banner_ad_response_id en el siguiente fragmento. De hecho, puedes crear varios pares clave-valor personalizados en Firebase Crashlytics para diferentes tipos de anuncios y eventos (consulta AdListener para conocer el ciclo de vida del anuncio). Consulta Personaliza tus informes de fallas de Firebase Crashlytics para obtener más información sobre el registro personalizado.

Agrega el siguiente código a tu MyActivity.java. En esencia, usa la función FirebaseCrashlytics.setCustomKey() en la función de devolución de llamada onAdLoaded() para garantizar que el anuncio se haya cargado antes de intentar llamar a getResponseInfo().

Java

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);

  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 AdManagerAdRequest.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));
}

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  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)

  adView.adListener = object : AdListener() {
    override fun onAdLoaded() {
      mAdView.responseInfo?.responseId?.let { adResponseId ->
          FirebaseCrashlytics.getInstance().setCustomKey(
              "banner_ad_response_id", adResponseId)
      }
    }
  }

  // Start loading the ad in the background.
  adView.loadAd(AdManagerAdRequest.Builder().build())

  // Add a crash button.
  val crashButton = Button(this)
  crashButton.text = "Crash!"
  crashButton.setOnClickListener {
    throw RuntimeException("Test Crash") // Force a crash
  }

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

Felicitaciones Ahora verás el banner_ad_response_id más reciente en la sección clave de las sesiones de fallas del panel de Crashlytics. Ten en cuenta que algunas claves pueden tardar hasta una hora en aparecer en el panel.