Fallas y excepciones: SDK de Android

En este documento, se proporciona una descripción general de alto nivel de la medición de fallas y excepciones con el SDK de Google Analytics para Android versión 3.

Descripción general

La medición de fallas y excepciones te permite medir la cantidad y el tipo de fallas detectadas y no detectadas, y las excepciones que se producen en tu app. Las excepciones tienen los siguientes campos:

Nombre del campo Monitor de campo Tipo Obligatorio Descripción
Descripción Fields.EX_DESCRIPTION String No Una descripción de la excepción (hasta 100 caracteres). Acepta null .
isFatal Fields.EX_FATAL boolean Indica si la excepción fue irrecuperable. true indica irrecuperable.

Los datos de fallas y excepciones están disponibles, principalmente, en el informe de fallas y excepciones.

Excepciones detectadas

Las excepciones capturadas son errores en tu app para los que definiste un código de control de excepciones, como el tiempo de espera ocasional de una conexión de red durante una solicitud de datos.

Para medir una excepción detectada, configura los valores del campo de excepción en el rastreador y envía el hit, como en este ejemplo:

/*
 * An app tries to load a list of high scores from the cloud. If the request
 * times out, an exception is sent to Google Analytics
 */
try {

  // Request some scores from the network.
  ArrayList highScores = getHighScoresFromCloud();

} catch (IOException e) {

  // May return null if EasyTracker has not yet been initialized with a
  // property ID.
  EasyTracker easyTracker = EasyTracker.getInstance(this);

  // StandardExceptionParser is provided to help get meaningful Exception descriptions.
 	easyTracker.send(MapBuilder
      .createException(new StandardExceptionParser(this, null)              // Context and optional collection of package names
                                                                            // to be used in reporting the exception.
                       .getDescription(Thread.currentThread().getName(),    // The name of the thread on which the exception occurred.
                                       e),                                  // The exception.
                       false)                                               // False indicates a nonfatal exception
      .build()
  );


  ... // Display alert to user that high scores are currently unavailable.
}

Medición de excepciones no detectadas

Las excepciones sin detectar representan instancias en las que la app detectó condiciones inesperadas durante el tiempo de ejecución y, a menudo, son irrecuperables y provocaron que la app falle. Las excepciones sin detectar se pueden enviar automáticamente a Google Analytics a través de EasyTracker o la clase ExceptionReporter.

Cómo usar EasyTracker

Para enviar automáticamente todas las excepciones no detectadas en tu app con EasyTracker, agrega esta línea a tu archivo analytics.xml:

<bool name="ga_reportUncaughtExceptions">true</bool>

Después de enviar una excepción con la medición automática de excepciones, EasyTracker pasará la excepción al controlador de excepciones predeterminado de Thread.

Cómo usar una implementación avanzada

Usa la clase ExceptionReporter para implementar la medición automática de excepciones no detectadas si usas una implementación avanzada y no EasyTracker.

ExceptionReporter puede funcionar como el controlador predeterminado de excepciones no detectadas para un subproceso específico o todos los subprocesos de tu app. Después de enviar una excepción a Google Analytics, la clase ExceptionReporter puede, de manera opcional, pasar la excepción a un controlador de excepciones no detectadas que proporciones.

Con el siguiente código, se crea un objeto ExceptionReporter nuevo y se establece como el nuevo controlador de excepciones no detectadas predeterminado. Como resultado, cada excepción no detectada se enviará a Google Analytics y, luego, se pasará al controlador de excepciones no detectadas anterior. Para la mayoría de las aplicaciones, el controlador predeterminado registrará la excepción en el registro y finalizará la aplicación.

UncaughtExceptionHandler myHandler = new ExceptionReporter(
    GoogleAnalytics.getInstance(this).getDefaultTracker(), // Tracker, may return null if not yet initialized.
    GAServiceManager.getInstance(),                        // GAServiceManager singleton.
    Thread.getDefaultUncaughtExceptionHandler());          // Current default uncaught exception handler.

// Make myHandler the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(myHandler);

Cuando utilices la medición automática de excepciones, ten en cuenta lo siguiente:

  • Todas las excepciones que se envían con la medición automática de excepciones se informan como irrecuperables en Google Analytics.
  • De forma predeterminada, el campo de descripción se configura automáticamente con el tipo de excepción, el nombre de clase, el nombre del método y el nombre del subproceso.

Análisis de descripciones de excepciones

El SDK proporciona un StandardExceptionParser para simplificar el proceso de obtener y enviar descripciones de excepciones a Google Analytics:

// Using StandardExceptionParser to get an Exception description.
try {

  // Request some scores from the network.
  ArrayList highScores = getHighScoresFromCloud();

} catch (IOException e) {

  // May return null if EasyTracker has not yet been initialized with a
  // property ID.
  EasyTracker easyTracker = EasyTracker.getInstance(this);

 	easyTracker.send(MapBuilder
      .createException(new StandardExceptionParser(this, null)              // Context and optional collection of package names
                                                                            // to be used in reporting the exception.
                       .getDescription(Thread.currentThread().getName(),    // The name of the thread on which the exception occurred.
                                       e),                                  // The exception.
	                     false)                                               // False indicates a fatal exception
      .build()
  );

  ... // Display alert to user that high scores are currently unavailable.
}

También puedes implementar tu propio analizador. Para ello, implementa la interfaz ExceptionParser y llama a su método setDescription cuando envíes una excepción a Google Analytics.