Comienza a usar Firebase Crashlytics


En esta guía de inicio rápido, se describe cómo configurar Firebase Crashlytics en tu app con el complemento de Flutter de Crashlytics para que puedas obtener informes de fallas completos en Firebase console.

La configuración de Crashlytics implica usar una herramienta de línea de comandos y el IDE. Para finalizar la configuración, deberás forzar una excepción de prueba a fin de enviar el primer informe de fallas a Firebase.

Antes de comenzar

  1. Si aún no lo has hecho, configura y, luego, inicializa Firebase en tu proyecto de Flutter.

  2. Recomendación: Para obtener automáticamente registros de rutas de navegación y comprender las acciones del usuario que conducen a una falla, un evento recuperable o de ANR, debes habilitar Google Analytics en tu proyecto de Firebase.

    • Si tu proyecto de Firebase existente no tiene habilitado Google Analytics, puedes habilitar Google Analytics en la pestaña Integraciones de > Configuración del proyecto en Firebase console.

    • Si quieres crear un nuevo proyecto de Firebase, habilita Google Analytics durante el flujo de trabajo de creación del proyecto.

    Ten en cuenta que los registros de rutas están disponibles para todas las plataformas de Android y Apple que son compatibles con Crashlytics (excepto watchOS).

Paso 1: Agrega Crashlytics a tu proyecto de Flutter

  1. Desde la raíz de tu proyecto de Flutter, ejecuta el siguiente comando para instalar el complemento de Flutter para Crashlytics.

    Para aprovechar los registros de rutas de navegación, también agrega el complemento de Flutter para Google Analytics a tu app. Asegúrate de que Google Analytics esté habilitado en tu proyecto de Firebase.

    flutter pub add firebase_crashlytics && flutter pub add firebase_analytics
    
  2. En el directorio raíz de tu proyecto de Flutter, ejecuta el siguiente comando:

    flutterfire configure
    

    Ejecutar este comando garantiza que la configuración de Firebase de tu app de Flutter esté actualizada y, en el caso de Android, agrega el complemento de Gradle de Crashlytics necesario a tu app.

  3. Cuando termines, vuelve a crear el proyecto de Flutter:

    flutter run
    
  4. (Opcional) Si tu proyecto de Flutter usa la marca --split-debug-info y, de forma opcional, también la marca --obfuscate, se requieren pasos adicionales para mostrar seguimientos de pila legibles de tus aplicaciones.

    • Plataformas de Apple: Asegúrate de que tu proyecto use la configuración de versión recomendada (Flutter 3.12.0 o una versión posterior y el complemento de Flutter de Crashlytics 3.3.4 o una versión posterior) para que genere y suba automáticamente símbolos de Flutter (archivos dSYM) a Crashlytics.

    • Android: Usa Firebase CLI (v.11.9.0+) para subir símbolos de depuración de Flutter. Debes subir los símbolos de depuración antes de informar una falla de una compilación de código ofuscada.

      En el directorio raíz de tu proyecto de Flutter, ejecuta el siguiente comando:

      firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/symbols
      • FIREBASE_APP_ID: El ID de la app para Android de Firebase (no el nombre del paquete)
        ID de ejemplo de la app para Android de Firebase: 1:567383003300:android:17104a2ced0c9b9b

      • PATH/TO/symbols: Es el mismo directorio que pasas a la marca --split-debug-info cuando compilas la aplicación.

Paso 2: Configura controladores de fallas

Puedes detectar automáticamente todos los errores que se producen dentro del framework de Flutter anulando FlutterError.onError con FirebaseCrashlytics.instance.recordFlutterFatalError:

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

  await Firebase.initializeApp();

  // Pass all uncaught "fatal" errors from the framework to Crashlytics
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;

  runApp(MyApp());
}

Para detectar errores asíncronos que no administra el framework de Flutter, usa 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());

}

Para ver ejemplos de cómo controlar otros tipos de errores, consulta Personaliza los informes de fallas.

Paso 3: Fuerza una falla de prueba para finalizar la configuración

Para finalizar la configuración de Crashlytics y ver los datos iniciales en el panel de Crashlytics de Firebase console, debes forzar el lanzamiento de una excepción de prueba.

  1. Agrega código a tu app para forzar el lanzamiento de una excepción de prueba.

    Si agregaste un controlador de errores que llama a FirebaseCrashlytics.instance.recordError(error, stack, fatal: true) a la Zone de nivel superior, puedes usar el siguiente código para agregar a tu app un botón que, cuando se presione, arroje una excepción de prueba:

    TextButton(
        onPressed: () => throw Exception(),
        child: const Text("Throw Test Exception"),
    ),
    
  2. Compila y ejecuta tu app.

  3. Fuerza el lanzamiento de una excepción de prueba para enviar el primer informe de tu app:

    1. Abre la app desde tu emulador o dispositivo de prueba.

    2. En tu app, presiona el botón de excepción de prueba que agregaste con el código anterior.

  4. Ve al panel de Crashlytics de Firebase console para ver la falla de prueba.

    Si actualizaste la consola y sigues sin poder ver la falla de prueba después de cinco minutos, habilita el registro de depuración para confirmar si tu app está enviando informes de fallas.


Eso es todo. Crashlytics ahora supervisa la app para detectar fallas y, en Android, para detectar errores recuperables y de ANR. Visita el panel de Crashlytics para ver y analizar todos los informes y estadísticas.

Próximos pasos