Personaliza tus informes de fallos de Firebase Crashlytics

Esta guía describe cómo personalizar sus informes de fallas usando el SDK de Firebase Crashlytics. De forma predeterminada, Crashlytics recopila automáticamente informes de fallos para todos los usuarios de su aplicación (puede desactivar los informes de fallos automáticos y habilitar los informes de suscripción voluntaria para sus usuarios). Crashlytics proporciona cuatro mecanismos de registro listos para usar: claves personalizadas , registros personalizados , identificadores de usuario y excepciones detectadas .

Agregar claves personalizadas

Las claves personalizadas lo ayudan a obtener el estado específico de su aplicación antes de fallar. Puede asociar pares clave/valor arbitrarios con sus informes de fallos y luego usar las claves personalizadas para buscar y filtrar informes de fallos en Firebase console.

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

  • Cuando revisa un problema específico en la consola, puede ver las claves personalizadas asociadas para cada evento (subpestaña Claves ) e incluso filtrar los eventos por claves personalizadas (menú Filtro en la parte superior de la página).

Utilice el método de instancia setCustomKey para establecer pares clave/valor. Tenga en cuenta que setCustomKey está sobrecargado para que el parámetro value acepte cualquier argumento primitivo o String . Aquí hay unos 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 puede modificar el valor de una clave existente llamando a la clave y configurándola en 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");

Agregue pares clave/valor de forma masiva pasando una instancia de CustomKeysAndValues ​​al método de instancia setCustomKeys :

Kotlin+KTX

Para Kotlin, la funcionalidad existente es más sencilla que utilizar el generador 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);

Agregar mensajes de registro personalizados

Para tener más contexto sobre los eventos que conducen a un bloqueo, puede agregar registros personalizados de Crashlytics a su aplicación. Crashlytics asocia los registros con sus datos de fallas y los muestra en la página Crashlytics de Firebase console , en la pestaña Registros .

Utilice log para ayudar a identificar problemas. Por ejemplo:

Kotlin+KTX

Firebase.crashlytics.log("message")

Java

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

Establecer identificadores de usuario

Para diagnosticar un problema, suele ser útil saber cuál de sus usuarios experimentó un bloqueo determinado. Crashlytics incluye una forma de identificar usuarios de forma anónima en sus informes de fallos.

Para agregar ID de usuario a sus informes, asigne a cada usuario un identificador único en forma de número de ID, token o valor hash:

Kotlin+KTX

Firebase.crashlytics.setUserId("user123456789")

Java

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

Si alguna vez necesita borrar un identificador de usuario después de configurarlo, restablezca el valor a una cadena en blanco. Borrar un identificador de usuario no elimina los registros de Crashlytics existentes. Si necesita eliminar registros asociados con una ID de usuario, comuníquese con el soporte de Firebase .

(Solo Android NDK) Agregar metadatos a los informes de fallos del NDK

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

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

Lea los comentarios en el archivo de encabezado para obtener instrucciones sobre cómo usar las API de NDK C++.

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

Crashlytics puede ayudarle a depurar fallos causados ​​por errores de memoria nativa mediante la recopilación de informes de GWP-ASan. Estos errores relacionados con la memoria pueden estar asociados con daños en la memoria dentro de su aplicación, que es la causa principal de las vulnerabilidades de seguridad de las aplicaciones.

  • Puede ver estos datos en una nueva pestaña "Seguimientos de la pila de memoria" cuando hace clic en los detalles de un problema en el panel de Crashlytics .

  • También puede utilizar la nueva señal y filtro "Informe GWP-ASan" para ver rápidamente todos los problemas con estos datos.

Puede obtener informes de memoria de GWP-ASan si habilita explícitamente GWP-ASan en su aplicación y usa el SDK de Crashlytics para NDK v18.3.6+ (Firebase BoM v31.3.0+). Puede probar su configuración de GWP-ASan utilizando el código nativo de ejemplo en la documentación de Android .

Informar excepciones no fatales

Además de informar automáticamente los fallos de tu aplicación, Crashlytics te permite registrar excepciones no fatales y te las envía la próxima vez que se inicie tu aplicación.

Utilice el método recordException para registrar excepciones no fatales en los bloques catch de su aplicación. 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 no graves en Firebase console. El resumen del problema contiene toda la información sobre el estado que normalmente se obtiene de los fallos, junto con desgloses por versión de Android y dispositivo de hardware.

Crashlytics procesa excepciones en un subproceso en segundo plano dedicado para minimizar el impacto en el rendimiento de su aplicación. Para reducir el tráfico de red de sus usuarios, Crashlytics registra por lotes las excepciones y las envía la próxima vez que se inicia la aplicación.

Habilitar informes de suscripción voluntaria

De forma predeterminada, Crashlytics recopila automáticamente informes de fallos para todos los usuarios de su aplicación. Para brindarles a los usuarios más control sobre los datos que envían, puede habilitar los informes de suscripción deshabilitando los informes automáticos y solo enviando datos a Crashlytics cuando así lo elija en su código:

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

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
    
  2. Habilite la recopilación para usuarios seleccionados llamando a la anulación de la recopilación de datos de Crashlytics en tiempo de ejecución. El valor de anulación persiste durante los lanzamientos de su aplicación para que Crashlytics pueda recopilar informes automáticamente. Para optar por no recibir informes automáticos de fallos, pase false como valor de anulación. Cuando se establece en false , el nuevo valor no se aplica hasta la siguiente ejecución de la aplicación.

    Kotlin+KTX

    Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)

    Java

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

Administrar datos de Crash Insights

Crash Insights te ayuda a resolver problemas al comparar tus seguimientos de pila anónimos con los de otras aplicaciones de Firebase y te permite saber si tu problema es parte de una tendencia más amplia. Para muchos problemas, Crash Insights incluso proporciona recursos para ayudarle a depurar el fallo.

Crash Insights utiliza datos agregados sobre accidentes para identificar tendencias de estabilidad comunes. Si prefieres no compartir los datos de tu aplicación, puedes optar por no participar en Crash Insights desde el menú Crash Insights en la parte superior de tu lista de problemas de Crashlytics en Firebase console .