logoImagina
iconCurso
Te recomendamos nuestro curso de Firebase
Descubre el curso de Firebase
Ir al curso
Tabla de contenido
¿Qué es Firebase Crashlytics?
Características de Crashlytics
Principales Funciones de Crashlytics
Características
Consideraciones de rendimiento
Integraciones
Eventos
Atributos de Issue
¿Por qué utilizar Firebase Crashlytics?
Aprender más sobre Firebase Crashlytics
Descubre la formación a tu medida
Rellena el formulario para obtener más información sobre los cursos.
Tamaño de la empresa *
Términos y condiciones *

Firebase Crashlytics: gestión de errores en Firebase

iconImage
Publicado 2024-03-07
Actualizado el 2024-03-21

¿Qué es Firebase Crashlytics?

Crashlytics es la herramienta de gestión de errores y logging de Firebase. Fue creada en 2011 y posteriormente, en 2013, fue adquirida por Twitter por 100 millones de dólares.

En 2017, Google adquirió Crashlytics y lo incluyó en su suite, junto a Fabric y Answers. Fabric dejará de utilizarse en 2019 y será sustituido por Google Anayltics. Por lo tanto, Google está realizando una migración del producto, manteniendo Crashlytics, pero integrando el resto de productos.

Si usamos Crashlytics de manera independiente a Firebase, deberemos plantearnos la migración durante el año 2019. Por lo tanto, vamos a analizar el producto que sigue integrado dentro de la suite de Crashlytics para ver todo su potencial.

Características de Crashlytics

Hay dos características que hicieron famoso Crashlytics en sus comienzos:

  • Sencillez de integración
  • Amplio reporte de errores

Cuando se creó Crashlytics, había un gap bastante importante que cubrir en el mundo del desarrollo móvil: el reporting de errores proveniente de los usuarios de nuestras aplicaciones.

Hasta ese momento, se creaban grupos de testeo para las aplicaciones, pero era insuficiente, ya que las configuraciones locales (idiomas, franjas horarias) y la segmentación de los móviles llevaba a errores muy difíciles de reproducir en la fase de testing.

Ese problema generó una solución que nos permitía conocer los motivos de los crashes en todas las instalaciones de nuestra app.

A partir de ahí, la solución fue creciendo, permitiendo emitir informes agrupados por errores, tracking de errores por versiones y una serie de herramientas clave, sobre todo cuando nuestra aplicación era descargada de manera masiva.

Principales Funciones de Crashlytics

Los pilares fundamentales de Crashlytics son:

  • Informe de fallos completo
  • Propuesta de soluciones para un fallo generalizado
  • Integración con Analytics
  • Alertas en tiempo real

Informe de fallos completo

Crashlytics aglutina toda la información relativa a los fallos de nuestra aplicación y analiza cada uno de ellos.

Podremos obtener la gravedad de cada fallo y si se han corregido con el cambio de versiones o siguen ocurriendo con el paso del tiempo.

Propuesta de soluciones para un fallo generalizado

Crashlytics ofrece Crash Insights, sugerencias útiles que destacan problemas de estabilidad comunes y proporcionan recursos que los hacen más fáciles de solucionar, priorizar o resolver.

Integración con Analytics

Crashlytics permite capturar los errores de tu app como eventos app_exception en Analytics. Los eventos simplifican la depuración, ya que te brindan acceso a una lista de otros eventos que causan cada falla. Además, proporcionan estadísticas de público, debido a que te permiten extraer informes de Analytics de los usuarios que experimentaron fallas.

Alertas en tiempo real

Recibe alertas en tiempo real sobre problemas nuevos, recurrentes y crecientes que podrían requerir tu atención inmediata.

Implementación de Firebase Crashlytics

Estos son los siguientes pasos para integrar Crashlytics en nuestra app:

  • Conecta a la app a la consola de Firebase
  • Integra el SDK
  • Verificación de informes
Descubre la formación a tu medida
Rellena el formulario para obtener más información sobre los cursos.
Tamaño de la empresa *
Términos y condiciones *

Características

Personalización de informes

Podemos conseguir más estadísticas sobre los errores, a través de cuatro mecanismos ofrecidos por Crashlytics:

  • Claves personalizadas
  • Registros personalizados
  • Identificadores de usuarios
  • Excepciones no fatales

Claves personalizadas

Las claves personalizadas sirven para obtener el estado concreto de la app en el momento del error. Para ello, podemos asociar claves-valor definidos por nosotros y verlos en los reportes.

1Crashlytics.sharedInstance().setIntValue(42, forKey: "MeaningOfLife")Crashlytics.sharedInstance().setObjectValue("Test value", forKey: "last_UI_action")

Se admiten hasta 64 pares clave-valor. A partir de ese límite, los valores adicionales no se guardarán. Además, cada clave-valor puede tener un tamaño máximo de 1 KB.

Mensajes de registro personalizados

Si necesitamos más detalle sobre los eventos previos a un error o crash, podemos agregarlos mediante las funciones de Crashlytics CLS_LOG.

Por ejemplo, podríamos mostrar un conjunto de parámetros, un diccionario de configuración o lo que pensemos que puede ser de utilidad para realizar una traza sobre el error.

Además, podremos ver la información de lo que estamos registrando en la consola del simulador, ya que pasa por el framework de logging del dispositivo.

Identificadores de usuarios

Podemos asignar un identificador anónimo para vincular los errores con los dispositivos en los que se han generado.

Para agregar los identificadores, debemos asignar un identificador único con un número, un token o un valor de hash.

Si es necesario borrar un identificador, debemos pasar la cadena vacía para reiniciarlo.

Excepciones no fatales

Además de las excepciones que genera el sistema, Crashlytics permite registrar excepciones no fatales.

Para hacer esto, debemos utilizar:

1Crashlytics.sharedInstance().recordError(error)

El método recordError requiere conocer la estructura con detalle, ya que el uso incorrecto puede provocar comportamientos indeseados y debido a esto Crashlytics puede limitar la creación de informes de errores registrados en la app.

El objeto NSError tiene tres argumentos:

1domain: Stringcode: IntuserInfo: [AnyHashable: Any]? = nil
1NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: NSLocalizedString(@"The request failed.", nil), NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The response returned a 404.", nil), NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Does this page exist?", nil), ProductID: @"123456"; UserID: @"Jane Smith"};NSError *error = [NSError domain:NSSomeErrorDomain code:-1001 userInfo:userInfo];

Al hacer esto, creamos un problema nuevo y se agrupa por NSSomeErrorDomain, con código -1001. Todos los errores adicionales que tengan el mismo valor de dominio y código, se agruparán en este problema.

Consideraciones de rendimiento

Ten en cuenta que registrar un NSError puede ser bastante caro. Cuando haces la llamada, Crashlytics captura la pila de llamadas del subproceso actual con un proceso llamado "liberación de pila".

Este proceso puede consumir una gran cantidad de recursos de CPU y E/S, en particular en arquitecturas que admiten la liberación de DWARF (arm64 y x86).

Cuando se completa la liberación, la información se escribe en el disco de manera asíncrona. Esto evita perder los datos si se produce un bloqueo en la línea siguiente.

Si bien es seguro llamar a esta API en un subproceso en segundo plano, recuerda que si despachas esta llamada a otra fila se perderá el contexto del seguimiento de pila actual.

Integraciones

Gracias a Cloud Functions, podemos agilizar la notificación de errores ocurridos en nuestra app.

Algunas de las cosas que podemos hacer son:

  • Envío de correos electrónicos
  • Notificar a un canal de Slack
  • Crear un problema de Jira

Eventos

Para poder enlazar los eventos de errores con Cloud Functions, disponemos de IssueBuilder, que nos permite registrar 3 tipos de eventos:

  • onNew. Cuando aparece un error nuevo.
  • onRegressed. Cuando reaparece un error que supuestamente ya se había resuelto.
  • onVelocityAlert. Cuando un error ocurre de una forma más frecuente que en compilaciones anteriores.

Atributos de Issue

Cuando ocurre un problema, se encapsula en la interfaz Issue, que cuenta con los siguientes atributos:

  • issueId. ID proporcionado por Crashlytics.
  • issueTitle. Título de la issue.
  • appInfo. Detalles de la app.
  • createTime. Fecha de creación de la issue.
  • resolvedTime. Fecha de cierre de la issue.
  • velocityAlert. Información sobre la alerta, como número de crashes y número de usuarios afectados.

¿Por qué utilizar Firebase Crashlytics?

La integración de Crashlytics en tu app te permite obtener valiosos datos sobre las fallas y problemas que puedan surgir durante su funcionamiento. Con esta herramienta, puedes registrar y analizar los app crashes, lo que te brinda una visión clara del impacto que tienen en tus usuarios.

Crashlytics utiliza técnicas de agrupación inteligente para agrupar los errores similares y proporcionar informes detallados sobre cada problema. Esto te permite identificar rápidamente las áreas problemáticas de tu app y tomar medidas para solucionar los errores.

Además, con la integración de Crashlytics en Android Studio, puedes hacer clic directamente en los informes de errores para ver el código fuente relacionado y facilitar el proceso de depuración.

En resumen, Crashlytics es una función esencial para garantizar la estabilidad y calidad de tu app, brindándote los datos necesarios para mejorar continuamente su rendimiento y la experiencia de tus usuarios.

Aprender más sobre Firebase Crashlytics

Si deseas obtener más información sobre Firebase Crashlytics y aprender a utilizar esta poderosa herramienta de gestión de errores en tus aplicaciones, te invitamos a visitar nuestra página del curso especializado en Firebase. En ella encontrarás recursos y materiales que te guiarán paso a paso en la integración de Crashlytics, la configuración de informes personalizados, la solución de problemas y mucho más. No pierdas la oportunidad de optimizar la estabilidad y calidad de tu app con Firebase Crashlytics. ¡Explora nuestro curso ahora mismo y lleva tu desarrollo de aplicaciones móviles al siguiente nivel!

Descubre la formación a tu medida
Rellena el formulario para obtener más información sobre los cursos.
Tamaño de la empresa *
Términos y condiciones *
iconClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClient