Сбои и исключения

Этот документ посвящен отслеживанию сбоев и исключений с помощью SDK Google Analytics для Android версии 4.

Обзор

Вы можете получать данные о количестве и типе сбоев и исключений, произошедших в вашем приложении. Исключение имеет следующие поля:

Название поля Тип Обязательно? Описание
Description String Нет Описание исключения (до 100 символов). Принимает значение null.
isFatal boolean Да Указывает, была ли ошибка неустранимой (значение true).

Данные о сбоях и исключениях доступны преимущественно в одноименном отчете.

Перехваченные исключения

Такие исключения, как тайм-аут сетевого соединения во время запроса данных или ошибки в коде приложения.

Для отслеживания перехваченных исключений задайте значения полей исключения в счетчике и отправьте обращение, как показано ниже.

// Get tracker.
Tracker t =
    ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(TrackerName.APP_TRACKER);

// Build and send exception.
t.send(new HitBuilders.ExceptionBuilder()
    .setDescription(getExceptionMethod() + ":" + getExceptionLocation())
    .setFatal(getExceptionFatal())
    .build());

Подробнее о методе getTracker читайте в разделе Расширенная настройка.

Неперехваченные исключения

Так называются непредусмотренные ошибки, чаще всего неустранимые, которые приводят к аварийному закрытию приложения. Неперехваченные исключения можно отправлять в Google Analytics автоматически. Для этого задайте значение конфигурации ga_reportUncaughtExceptions или используйте класс ExceptionReporter.

Автоматическое отслеживание исключений

Чтобы автоматически передавать данные обо всех неперехваченных исключениях в приложении, добавьте в XML-файл конфигурации следующую строку:

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

Автоматически переданное исключение поступит в обработчик исключений, используемый для потока (Thread) по умолчанию.

Расширенная настройка

Используйте класс ExceptionReporter, чтобы включить автоматическое отслеживание неперехваченных исключений, если вы не применяете значение конфигурации ga_reportUncaughtExceptions.

ExceptionReporter может служить обработчиком неперехваченных исключений по умолчанию – как для определенного потока, так и для всех потоков в приложении. Этот класс ExceptionReporter также может передавать исключения, отправляемые в Google Analytics, другому указанному вами обработчику.

Следующий код создает объект класса ExceptionReporter и назначает его новым обработчиком неперехваченных исключений по умолчанию. В результате каждое неперехваченное исключение будет отправляться в Google Analytics, а затем передаваться предыдущему обработчику. Для большинства приложений обработчик по умолчанию заносит ошибку в журнал и закрывает приложение.

Thread.UncaughtExceptionHandler myHandler = new ExceptionReporter(
    myTracker,
    Thread.getDefaultUncaughtExceptionHandler(),
    context);

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

О чем следует помнить, если вы используете автоматическое отслеживание исключений:

  • Все автоматически передаваемые ошибки рассматриваются Google Analytics как неустранимые.
  • Поле описания задается автоматически с использованием типа исключения и названий класса, метода и потока.

Анализ описаний исключений

StandardExceptionParser, входящий в этот SDK, позволяет с легкостью получать описания исключений и отправлять их в Google Analytics:

// Get tracker.
Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(
    TrackerName.APP_TRACKER);

// Using StandardExceptionParser to get an Exception description.
try {
    // Request some scores from the network.
    ArrayList<Integer> highScores = getHighScoresFromCloud();
} catch (IOException e) {
    t.send(new HitBuilders.ExceptionBuilder()
        .setDescription(new StandardExceptionParser(this, null)
            .getDescription(Thread.currentThread().getName(), e))
        .setFatal(false)
        .build()
    );

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

Вы также можете реализовать собственный синтаксический анализатор. Для этого используйте интерфейс ExceptionParser и вызовите метод setDescription при отправке исключения в Google Analytics.