Personaliza los informes de fallas de Firebase Crashlytics

En esta guía, se describe cómo personalizar tus informes de fallas con el SDK de Firebase Crashlytics. De forma predeterminada, Crashlytics recopila informes de fallas de todos los usuarios de tu app automáticamente (puedes desactivar los informes de fallas automáticos y habilitar los informes de aceptación para tus usuarios en su lugar). Crashlytics proporciona cuatro mecanismos de registro desde el primer momento: claves personalizadas, registros personalizados, identificadores de usuario y excepciones capturadas.

Agrega claves personalizadas

Las claves personalizadas te ayudan a obtener el estado específico de la app hasta el momento de la falla. Puedes asociar pares clave-valor arbitrarios con tus informes de fallas y, luego, usar las claves personalizadas para buscar y filtrar informes de fallas en Firebase console.

  • En el panel de Crashlytics, puedes buscar problemas que coincidan con una clave personalizada.

  • Cuando revises un problema específico en la consola, podrás ver las claves personalizadas asociadas a cada evento (pestaña secundaria Claves) y filtrar los eventos por claves personalizadas (menú Filtrar en la parte superior de la página).

Usa el método de instancia setCustomKey para establecer pares clave-valor. Ten en cuenta que setCustomKey se sobrecarga para que el parámetro value acepte cualquier argumento básico o String. Estos son algunos ejemplos:

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("my_string_key", "foo") // String value
    key("my_bool_key", true)    // boolean value
    key("my_double_key", 1.0)   // double value
    key("my_float_key", 1.0f)   // float value
    key("my_int_key", 1)        // int value
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

crashlytics.setCustomKey("my_int_key", 1 /* int value */);

También puedes modificar el valor de una clave existente llamando a la clave y configurándola con un valor diferente. Por ejemplo:

Kotlin+KTX

val crashlytics = Firebase.crashlytics
crashlytics.setCustomKeys {
    key("current_level", 3)
    key("last_UI_action", "logged_in")
}

Java

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("current_level", 3);
crashlytics.setCustomKey("last_UI_action", "logged_in");

Para agregar pares clave-valor de forma masiva, pasa una instancia de CustomKeysAndValues al método de instancia setCustomKeys:

Kotlin+KTX

Para Kotlin, la funcionalidad existente es más simple que usar el compilador CustomKeysAndValues:

crashlytics.setCustomKeys {
  key("str_key", "hello")
  key("bool_key", true)
  key("int_key", 1)
  key("long_key", 1L)
  key("float_key", 1.0f)
  key("double_key", 1.0)
}

Java

CustomKeysAndValues keysAndValues = new CustomKeysAndValues.Builder()
.putString("string key", "string value")
.putString("string key 2", "string  value 2")
.putBoolean("boolean key", True)
.putBoolean("boolean key 2", False)
.putFloat("float key", 1.01)
.putFloat("float key 2", 2.02)
.build();

FirebaseCrashlytics.getInstance().setCustomKeys(keysAndValues);

Agrega mensajes de registro personalizados

Para darte más contexto sobre los eventos que se produjeron antes de una falla, puedes agregar registros personalizados de Crashlytics a la app. Crashlytics asocia los registros con los datos de fallas y los hace visibles en la página de Crashlytics de Firebase console, en la pestaña Registros.

Usa log para identificar problemas. Por ejemplo:

Kotlin+KTX

Firebase.crashlytics.log("message")

Java

FirebaseCrashlytics.getInstance().log("message");

Configura identificadores de usuarios

Para diagnosticar un problema, resulta útil saber cuáles de tus usuarios sufrieron una falla. Crashlytics incluye una manera de identificar usuarios de forma anónima en los informes de fallas.

Para agregar los ID de usuario a tus informes, asigna a cada usuario un identificador único con el formato de un número de ID, un token o un valor de hash:

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

Java

FirebaseCrashlytics.getInstance().setUserId("user123456789");

Si en algún momento necesitas borrar un identificador de usuario después de configurarlo, restablece el valor a una string en blanco. Borrar un identificador de usuario no quita los registros de Crashlytics existentes. Si necesitas borrar los registros asociados con un ID de usuario, comunícate con el equipo de asistencia de Firebase.

(Solo para el NDK de Android) Agrega metadatos a los informes de fallas del NDK

De manera opcional, puedes incluir el encabezado crashlytics.h en tu código de C++ para agregar metadatos a los informes de fallas del NDK, como claves personalizadas, registros personalizados e identificadores de usuario. Todas estas opciones se describieron más arriba en esta página.

crashlytics.h está disponible como una biblioteca C++ de solo encabezado en el repositorio de GitHub del SDK de Firebase Android.

Lee los comentarios del archivo de encabezado para obtener instrucciones sobre el uso de las APIs de C++ del NDK.

Incluye informes de GWP-ASan para depurar problemas de corrupción de memoria

Crashlytics puede ayudarte a depurar fallas causadas por errores de la memoria nativa mediante la recopilación de informes de GWP-ASan. Estos errores relacionados con la memoria se pueden asociar con la corrupción de la memoria dentro de tu app, lo que es la causa principal de las vulnerabilidades de seguridad de las apps.

  • Puedes ver estos datos en la nueva pestaña “Seguimientos de pila de memoria” haciendo clic en los detalles de un problema en el panel de Crashlytics.

  • También puedes usar el nuevo indicador “Informe de GWP-ASan” y filtrar el contenido para ver rápidamente todos los problemas relacionados con estos datos.

Puedes obtener informes de memoria de GWP-ASan si habilitas GWP-ASan explícitamente en tu app y usas el SDK de Crashlytics para la versión 18.3.6 o posterior del NDK (BoM de Firebase v31.3.0 o versiones posteriores). Puedes probar tu configuración de GWP-ASan con el código nativo de ejemplo en la documentación de Android.

Informa excepciones recuperables

Además de informar las fallas de la app automáticamente, Crashlytics te permite registrar excepciones recuperables y te las envía la próxima vez que se inicie la app.

Usa el método recordException para registrar excepciones recuperables en los bloques catch de tu app. Por ejemplo:

Kotlin+KTX

try {
    methodThatThrows()
} catch (e: Exception) {
    Firebase.crashlytics.recordException(e)
    // handle your exception here
}

Java

try {
    methodThatThrows();
} catch (Exception e) {
    FirebaseCrashlytics.getInstance().recordException(e);
    // handle your exception here
}

Todas las excepciones registradas aparecen como problemas recuperables en Firebase console. Este resumen de problemas contiene toda la información de estado que se obtiene normalmente a partir de las fallas, junto con desgloses por versión de Android y dispositivo de hardware.

Crashlytics procesa las excepciones en un subproceso dedicado en segundo plano para minimizar el impacto en el rendimiento de tu app. A fin de reducir el tráfico de red de tus usuarios, Crashlytics agrupa las excepciones registradas y las envía la próxima vez que se inicie la app.

Habilita los informes de aceptación

Según la configuración predeterminada, Crashlytics recopila informes de fallas de todos los usuarios de la app automáticamente. Para permitir que los usuarios tengan más control sobre los datos que envían, puedes habilitar los informes opcionales si inhabilitas los informes automáticos y solo envías datos a Crashlytics cuando lo decidas en tu código:

  1. En el bloque application del archivo AndroidManifest.xml, agrega una etiqueta meta-data para desactivar la recopilación automática:

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Habilita la recopilación para usuarios específicos llamando a la anulación de recopilación de datos de Crashlytics durante el tiempo de ejecución. El valor de anulación persiste en todos los lanzamientos de tu app para que Crashlytics pueda recopilar informes automáticamente. Si quieres inhabilitar los informes automáticos de fallas, pasa false como el valor de anulación. Cuando se configura en false, el valor nuevo no se aplica hasta la próxima ejecución de la app.

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

Administra los datos de Crash Insights

Crash Insights te ayuda a resolver problemas a través de la comparación de tus seguimientos de pila anonimizados con seguimientos de otras apps de Firebase y te permite saber si tu problema es parte de una tendencia mayor. En muchos casos, Crash Insights incluso proporciona recursos para ayudarte a depurar la falla.

Crash Insights usa datos de fallas globales para identificar las tendencias de estabilidad comunes. Si prefieres no compartir los datos de la app, puedes inhabilitar esta función en el menú Crash Insights ubicado en la parte superior de la lista de problemas de Crashlytics de Firebase console.