(+34) 673 566 782 - (+34) 960 653 052 formacion@imaginagroup.com

Firebase Crashlytics: Te presentamos la plataforma de gestión de errores de Firebase

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.

Motivación

Por lo tanto, vamos a analizar el producto que sigue integrado dentro de la suite de Crashlytics para ver todo su potencial.

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

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

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

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.

Crashlytics.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:

Crashlytics.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:

domain: String
code: Int
userInfo: [AnyHashable: Any]? = nil

 

NSDictionary *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.

Uso de cookies: Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies