Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Personaliza tus informes de fallas de Firebase Crashlytics

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Esta guía describe cómo personalizar sus informes de fallas usando las API de Crashlytics. De forma predeterminada, Crashlytics recopila automáticamente informes de fallas nativos de la plataforma para todos los usuarios de su aplicación (también puede desactivar los informes automáticos de fallas y habilitar la opción de informes para sus usuarios en su lugar). Crashlytics proporciona cinco mecanismos de registro listos para usar: claves personalizadas, registros personalizados , identificadores de usuario , excepciones detectadas y no detectadas.

Para las aplicaciones Flutter, los informes fatales se envían a Crashlytics en tiempo real sin necesidad de que el usuario reinicie la aplicación. Los informes no fatales se escriben en el disco para enviarse junto con el siguiente informe fatal o cuando se reinicia la aplicación.

Reportar excepciones no detectadas

Puede capturar automáticamente todos los errores "fatales" que se generan dentro del marco de trabajo de Flutter al anular FlutterError.onError con FirebaseCrashlytics.instance.recordFlutterFatalError . Alternativamente, para detectar también excepciones "no fatales", anule FlutterError.onError con FirebaseCrashlytics.instance.recordFlutterError :

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Firebase.initializeApp();
  bool weWantFatalErrorRecording = true;
  FlutterError.onError = (errorDetails) {
    if(weWantFatalErrorRecording){
      FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
    } else {
      FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
    }
  };

  runApp(MyApp());
}

Errores asíncronos

El marco Flutter no detecta los errores asincrónicos:

ElevatedButton(
  onPressed: () async {
    throw Error();
  }
  ...
)

Para detectar tales errores, puede usar el controlador PlatformDispatcher.instance.onError :

Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    FlutterError.onError = (errorDetails) {
      FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
    };
    // Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
    PlatformDispatcher.instance.onError = (error, stack) {
      FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
      return true;
    };
    runApp(MyApp());

}

Errores fuera de Flutter

Para detectar errores que ocurren fuera del contexto de Flutter, instala un detector de errores en el Isolate actual:

Isolate.current.addErrorListener(RawReceivePort((pair) async {
  final List<dynamic> errorAndStacktrace = pair;
  await FirebaseCrashlytics.instance.recordError(
    errorAndStacktrace.first,
    errorAndStacktrace.last,
    fatal: true,
  );
}).sendPort);

Informar excepciones detectadas

Además de informar automáticamente los bloqueos de su aplicación, Crashlytics le permite registrar excepciones no fatales y se las envía la próxima vez que se informe un evento fatal o cuando la aplicación se reinicie.

Usa el método recordError para registrar excepciones no fatales en los bloques catch de tu aplicación. Por ejemplo:

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a non-fatal error'
);

// Or you can use:
await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);

También es posible que desee registrar más información sobre el error que es posible utilizando la propiedad de information :

await FirebaseCrashlytics.instance.recordError(
  error,
  stackTrace,
  reason: 'a non-fatal error',
  information: ['further diagnostic information about the error', 'version 2.0'],
);

Estas excepciones aparecen como problemas no fatales en Firebase console. El resumen del problema contiene toda la información de estado que normalmente obtiene de los bloqueos, junto con desgloses por versión y dispositivo de hardware.

Crashlytics procesa las 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 limitará la cantidad de informes enviados desde el dispositivo, si es necesario.

Añadir claves personalizadas

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

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

  • Cuando está revisando 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. Aquí hay unos ejemplos:

// Set a key to a string.
FirebaseCrashlytics.instance.setCustomKey('str_key', 'hello');

// Set a key to a boolean.
FirebaseCrashlytics.instance.setCustomKey("bool_key", true);

// Set a key to an int.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1);

// Set a key to a long.
FirebaseCrashlytics.instance.setCustomKey("int_key", 1L);

// Set a key to a float.
FirebaseCrashlytics.instance.setCustomKey("float_key", 1.0f);

// Set a key to a double.
FirebaseCrashlytics.instance.setCustomKey("double_key", 1.0);

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 bloqueo y los muestra en la consola de Firebase , en la pestaña Registros de Crashlytics.

Use log para ayudar a identificar problemas. Por ejemplo:

FirebaseCrashlytics.instance.log("Higgs-Boson detected! Bailing out");

Establecer identificadores de usuario

Para diagnosticar un problema, a menudo es útil saber cuál de sus usuarios experimentó un bloqueo determinado. Crashlytics incluye una forma de identificar de forma anónima a los usuarios 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:

FirebaseCrashlytics.instance.setUserIdentifier("12345");

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 identificación de usuario, comuníquese con el soporte de Firebase .

Habilitar informes de suscripción

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

  1. Desactive la recopilación automática de forma nativa:

    plataformas de manzana

    Agregue una nueva clave a su archivo Info.plist :

    • Clave: FirebaseCrashlyticsCollectionEnabled
    • Valor: false

    Androide

    En el bloque de application de su archivo AndroidManifest.xml , agregue una etiqueta de 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 recopilación de datos de Crashlytics en tiempo de ejecución.

    El valor de anulación persiste entre los lanzamientos de su aplicación para que Crashlytics pueda recopilar informes automáticamente. Para optar por no recibir informes automáticos de fallas, pase false como valor de anulación. Cuando se establece en false , el nuevo valor no se aplica hasta la próxima ejecución de la aplicación.

    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
    

Administrar datos de Crash Insights

Crash Insights lo ayuda a resolver problemas comparando sus seguimientos de pila anónimos con los de otras aplicaciones de Firebase y permitiéndole saber si su problema es parte de una tendencia más amplia. Para muchos problemas, Crash Insights incluso proporciona recursos para ayudarlo a depurar el bloqueo.

Crash Insights utiliza datos de fallas agregados para identificar tendencias de estabilidad comunes. Si prefiere no compartir los datos de su aplicación, puede excluirse de Crash Insights desde el menú Crash Insights en la parte superior de su lista de problemas de Crashlytics en la consola de Firebase .