Błędy i wyjątki

Ten dokument zawiera ogólny opis metod pomiaru awarii i wyjątków za pomocą pakietu SDK Google Analytics w wersji 4 na Androida.

Przegląd

Pomiary awarii i wyjątków pozwalają mierzyć liczbę i rodzaj wykrytych i niewykrytych awarii oraz wyjątków, które występują w aplikacji. Wyjątkiem są te pola:

Nazwa pola Typ Wymagane Opis
Opis String Nie Opis wyjątku (maksymalnie 100 znaków). Akceptuje null.
isFatal boolean Tak Wskazuje, czy wyjątek był krytyczny. true oznacza błąd krytyczny.

Dane o awariach i wyjątkach są dostępne przede wszystkim w raporcie o awariach i wyjątkach.

Złapane wyjątki

Wyjątkiem są błędy w aplikacji, w której masz zaimplementowany kod.

Aby określić zarejestrowany wyjątek, ustaw wartości pól wyjątków w narzędziu do śledzenia i wyślij działanie, jak w tym przykładzie:

// 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());

Więcej informacji o metodzie getTracker znajdziesz w sekcji Konfiguracja zaawansowana.

Pomiar niewykrytych wyjątków

Nieobsłużone wyjątki to przypadki, w których aplikacja napotkała nieoczekiwane warunki w czasie działania i często są krytyczne, powodując awarię aplikacji. Niewykryte wyjątki mogą być wysyłane do Google Analytics automatycznie po ustawieniu wartości konfiguracji ga_reportUncaughtExceptions lub za pomocą klasy ExceptionReporter.

Automatyczna konfiguracja

Aby automatycznie wysyłać do Google Analytics wszystkie niewykryte wyjątki w aplikacji, dodaj ten wiersz do pliku konfiguracji XML:

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

Po wysłaniu wyjątku za pomocą automatycznego pomiaru wyjątków zostanie on przekazany do domyślnego modułu obsługi wyjątków Thread.

Korzystanie z implementacji zaawansowanej

Jeśli korzystasz z implementacji zaawansowanej i nie używasz wartości konfiguracji ga_reportUncaughtExceptions, użyj klasy ExceptionReporter, aby wdrożyć automatyczny pomiar niewykrytych wyjątków.

ExceptionReporter może służyć jako domyślny moduł obsługi niewykrytych wyjątków dla określonego wątku lub wszystkich wątków w aplikacji. Po wysłaniu wyjątku do Google Analytics klasa ExceptionReporter może go opcjonalnie przekazać do podanego przez Ciebie modułu obsługi niewykrytych wyjątków.

Poniższy kod tworzy nowy obiekt ExceptionReporter i ustawia go jako nowy domyślny moduł obsługi niewykrytych wyjątków. W efekcie każdy niewykryty wyjątek będzie wysyłany do Google Analytics, a następnie przekazywany do poprzedniego modułu obsługi niewykrytych wyjątków. W przypadku większości aplikacji domyślny moduł obsługi zarejestruje wyjątek w dzienniku i zamknie aplikację.

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

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

Jeśli korzystasz z automatycznego pomiaru wyjątków, pamiętaj o tych kwestiach:

  • Wszystkie wyjątki wysłane za pomocą automatycznego pomiaru wyjątków są zgłaszane w Google Analytics jako krytyczne.
  • Domyślnie pole opisu jest ustawiane automatycznie z użyciem typu wyjątku, nazwy klasy, nazwy metody i nazwy wątku.

Analizowanie opisów wyjątków

Pakiet SDK udostępnia funkcję StandardExceptionParser, która upraszcza proces pobierania i wysyłania opisów wyjątków do 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.
}

Możesz też wdrożyć własny parser, implementując interfejs ExceptionParser i wywołując jego metodę setDescription podczas wysyłania wyjątku do Google Analytics.