我对 crash tracking with Analytics 有点困惑. AFIK 只能存储在不再超过 200 字节(每个属性)的 Analytics 字符串中。所以不可能看到完整的堆栈跟踪,因为它们通常比 200 个字符长得多。
然而,使用 Analytics v2 API,这可以通过 EasyTracker 实现,如 described here .还有一些使用 ga_reportUncaughtExceptions
属性的半重复,如下所示:Google Analytics crash report only shows first line of stack trace或 Exception stack trace lost in Google Analytics v2 for Android?
由于我使用的是 Tag-Manager,所以我无法使用这些解决方案,我已经想出了如何使用 Tag-Manager 正确跟踪前 200 字节的崩溃,但是完整的堆栈跟踪是什么?
我还使用 ACRA 为用户提供一种直接与我们联系的方式(以堆栈跟踪作为附件),因此与 Google 崩溃报告器的直接连接停止并且 Google Play 控制台没有显示崩溃。
最佳答案
对于 Android 中所有未捕获的异常,可以在 Google Analytics v4 中发送完整的堆栈跟踪。
在您的 Application 类中将自动 Activity 跟踪设置为 true。
// Enable automatic activity tracking for your app
tracker.enableAutoActivityTracking(true);
进一步覆盖StandardExceptionParser 类的getDescription 方法。 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 控制台上的行为 > 崩溃和异常中查看您的崩溃报告。
关于android - 通过标签管理器在 Google Analytics v4 中的完整堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28827838/