Firebase Crashlytics es un generador de informes de fallas ligero y en tiempo real que te permite gestionar los problemas de estabilidad de tu app con facilidad. Crashlytics te ahorra tiempo en la solución de problemas, ya que agrupa las fallas de forma inteligente y destaca las circunstancias que las generan.
En esta guía, se describe cómo integrar Crashlytics en tu proyecto de Android Studio para que puedas registrar los IDs de respuesta de anuncios. Más adelante, cuando soluciones los problemas de fallas en tu app, puedes buscar el ID de respuesta de anuncios y usar el Centro de revisión de anuncios en AdMob para encontrar y bloquear los anuncios.
Paso 1: Agrega Firebase a una aplicación para Android
Si quieres probar el acceso con Firebase desde una app sin modificaciones, puedes descargar o clonar los ejemplos del repositorio del SDK de anuncios de Google para dispositivos móviles para Android en GitHub. En esta guía, se usa específicamente el ejemplo de banner de.
Si ya tienes una app, deberías poder continuar con los otros pasos con el nombre de paquete de tu app. Los mismos pasos también se pueden aplicar a otros ejemplos del repositorio con pequeñas adaptaciones.
Para usar Firebase Crashlytics, debes crear un proyecto de Firebase y añadirle tu app. Si aún no lo hiciste, crea un proyecto de Firebase. Asegúrate de registrar tu app en ella.
En la página de Crashlytics de Firebase console, haz clic en Configurar Crashlytics.
En la pantalla que aparece, haz clic en No > Configurar una app de Firebase nueva.
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:23.5.0' // Add the Firebase Crashlytics dependency. implementation 'com.google.firebase:firebase-crashlytics:19.2.1' }
project/build.gradle
buildscript { repositories { // ... // Add Google's Maven repository. google() } dependencies { // ... classpath 'com.google.gms:google-services:4.4.2' // Add the Fabric Crashlytics plugin. classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2' } } allprojects { // ... repositories { // Check that Google's Maven repository is included (if not, add it). google() // ... } }
Compila y ejecuta tu app para asegurarte de que Crashlytics esté configurado correctamente. Una vez que se complete correctamente, podrás acceder al panel de control de Crashlytics.
(Opcional): Prueba tu configuración
Si agregas un botón de falla, puedes forzar una falla para que una app falle con cada vez que se presiona un botón.
En este 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 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)); }
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(AdRequest.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 dispositivo conectado. Después de que se cargue la app, puedes hacer clic en el botón Fallar. Vuelve a iniciar la app desde el dispositivo o Android Studio para que el registro de fallas se cargue en Crashlytics.
Paso 2: Registra el ID de respuesta del anuncio
Si cargas varios anuncios y los muestras en diferentes momentos, es conveniente registrar cada ID de respuesta de anuncio con una clave independiente. Por ejemplo, en esta guía, se usa un ejemplo que solo tiene un 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 de anuncios (consulta
AdListener
para
conocer el ciclo de vida del anuncio). Consulta Personaliza los 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 asegurarse de que se haya cargado el anuncio 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 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)); }
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(AdRequest.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 de claves de las sesiones de fallas en el panel de Crashlytics. Ten en cuenta que algunas claves pueden tardar hasta una hora en aparecer en tu panel.