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

В этом документе представлен общий обзор измерения сбоев и исключений с помощью Google Analytics SDK v4 для Android.

Обзор

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

Имя поля Тип Необходимый Описание
Описание 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 .

Автоматическая конфигурация

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

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

После отправки исключения с использованием автоматического измерения исключений оно будет передано обработчику исключений Thread по умолчанию.

Использование расширенной реализации

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

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

Следующий код создает новый объект 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 считаются фатальными.
  • По умолчанию поле описания автоматически задается с использованием типа исключения, имени класса, имени метода и имени потока.

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

SDK предоставляет StandardExceptionParser для упрощения процесса получения и отправки описаний исключений в 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.