Полные трассировки стека в Google Analytics v4 через Tag-Manager
Меня немного смущает отслеживание сбоев в Google Analytics. AFIK можно хранить только в строках Analytics, длина которых не превышает 200 байт (для каждого свойства). Таким образом, невозможно увидеть трассировки с полным стеком, поскольку они обычно намного длиннее 200 символов.
Однако с помощью Analytics v2 API это возможно с EasyTracker, как описано здесь. Есть также некоторые полудублированные, которые используют ga_reportUncaughtExceptions
свойство, подобное этому: отчет о сбое Google Analytics показывает только первую строку трассировки стека или трассировки стека исключений, потерянную в Google Analytics v2 для Android?
Поскольку я использую Tag-Manager, я не могу использовать эти решения, я уже понял, как правильно отследить сбой для первых 200 байт с помощью Tag-Manager, но как насчет полной трассировки стека?
Я также использую ACRA, чтобы предоставить пользователю способ связаться с нами напрямую (с трассировкой стека в качестве вложения), поэтому прямое подключение к репортеру сбоев Google прервано, а в консоли Google Play нет сбоев.
2 ответа
В Google Analytics v4 можно отправить полную трассировку стека для всех необработанных исключений в Android.
Установите для автоматического отслеживания активности значение true в своем классе приложений.
// Enable automatic activity tracking for your app
tracker.enableAutoActivityTracking(true);
Далее переопределите метод getDescription класса StandardExceptionParser. Throwable содержит массив элементов трассировки стека, которые при преобразовании в формат строки будут вашей трассировкой стека, как мы видим в журналах.
public class AnalyticsExceptionParser extends StandardExceptionParser {
public AnalyticsExceptionParser(Context context, Collection<String> additionalPackages) {
super(context, additionalPackages);
}
@Override
protected String getDescription(Throwable cause,
StackTraceElement element, String threadName) {
StringBuilder descriptionBuilder = new StringBuilder();
final Writer writer = new StringWriter();
final PrintWriter printWriter = new PrintWriter(writer);
cause.printStackTrace(printWriter);
descriptionBuilder.append(writer.toString());
printWriter.close();
return descriptionBuilder.toString();
}
}
Наконец, предоставьте свой AnalyticsExceptionParser экземпляру ExceptionReporter.
public class MyApplication extends Application {
@Override
public void onCreate() {
...
ExceptionReporter reporter = new ExceptionReporter(getTracker(), Thread.getDefaultUncaughtExceptionHandler(), this);
reporter.setExceptionParser(new AnalyticsExceptionParser(this, packages));
Thread.setDefaultUncaughtExceptionHandler(reporter);
}
}
Это оно. Смотрите отчеты о сбоях на консоли GA в разделе " Поведение> Сбои и исключения".
Вы можете переопределить ExceptionParser
это используется основным потоком, чтобы настроить его, чтобы сообщить о полной трассировке стека:
final Thread.UncaughtExceptionHandler uncaughtExceptionHandler =
Thread.getDefaultUncaughtExceptionHandler();
if (uncaughtExceptionHandler instanceof ExceptionReporter) {
ExceptionReporter exceptionReporter = (ExceptionReporter) uncaughtExceptionHandler;
exceptionReporter.setExceptionParser(new ExceptionParser() {
@Override
public String getDescription(String s, Throwable throwable) {
return "Thread: " + s + ", Stacktrace: " + ExceptionUtils.getStackTrace(throwable);
}
});
}
Поместите это туда, где вы создаете экземпляр своего экземпляра Google Analytics. ExceptionUtils
Я использую класс из библиотеки apache common-lang3.