如何让Google Analytics v4报告我的应用未捕获的异常(崩溃)?

sna*_*ark 5 android google-analytics

在这个问题上,我一直在墙上撞了好几个小时.Google Analytics 的v4文档指定了两种不同的方式来让您的应用报告未捕获的异常.我无法工作.在这两种情况下,当我在我的应用程序中触发未捕获的异常时(在我自己的代码中使用虚拟名称),我在LogCat中看到这样的行:

08-17 17:33:30.248: V/GAV4(8968): Thread[main,5,main]: Tracking Exception: MyException (@MyClass:myMethod:143) {main}
08-17 17:33:30.248: V/GAV4(8968): Thread[main,5,main]: Dispatch call queued. Dispatch will run once initialization is complete.
08-17 17:33:30.248: V/GAV4(8968): Thread[main,5,main]: Passing exception to original handler.
Run Code Online (Sandbox Code Playgroud)

...然后是我的异常的堆栈跟踪,最后是:

08-17 17:33:44.282: I/Process(8968): Sending signal. PID: 8968 SIG: 9
Run Code Online (Sandbox Code Playgroud)

从LogCat看起来GA似乎从未实际向Google的服务器发送异常!

如果有人设法在他们的Google Analytics控制台中报告未被捕获的异常情况,那么如果他们可以与我们分享他们是如何做到这一点那就太棒了.我已经在SO上看过其他人这样的查询(例如,这里这里),但没有确认报告未捕获的异常.

我已经在GA控制台中显示了屏幕视图,所以我必须做正确的事情.但不是未被捕获的例外.我假设一个人应该在行为>崩溃和异常下寻找它们,并且我已经将结束日期设置为今天(默认情况下似乎设置为昨天).最后,在我的analytics_global_config.xml中,我有:

<integer name="ga_dispatchPeriod">1</integer>
Run Code Online (Sandbox Code Playgroud)

因为否则默认值是1800秒,在这种情况下,我假设在GA控制台出现后至少30分钟内不会看到异常.ga_dryRun也是假的.

sna*_*ark 7

正如@xitx所指出的那样,在人们的设备上安装的Google Play服务库的后续版本中似乎存在一个错误.因为当我在模拟器上为相对较旧的设备(API 9,并且可能运行旧的Google Play Services库)运行现有代码时,崩溃确实会自动报告给GA的控制台.这是崩溃发生时LogCat所说的:

08-31 12:27:59.522: V/GAV4(335): Thread[GAThread,5,main]: Sending hit to store  PATH: https:  PARAMS: ul=en-us,  ht=1409484468454,  sr=480x800,  a=746864705,  sf=100.0,  aid=com.redula.vsavings,  cid=32da19a1-7e15-4c83-aaa9-f3f1d502b775,  av=1.2,  v=1,  t=exception,  an=Savings Organiser,  tid=UA-XXXXXXXX,  exd=NullPointerException (@HomeActivity:connectToInAppBillingService:202) {main},  _u=.2nKKhAAAL,  exf=1,  
08-31 12:27:59.622: V/GAV4(335): Thread[GAThread,5,main]: PowerSaveMode initiated.
08-31 12:27:59.652: V/GAV4(335): Thread[GAThread,5,main]: PowerSaveMode terminated.
08-31 12:27:59.652: V/GAV4(335): Thread[GAThread,5,main]: Dispatch running...
08-31 12:27:59.702: V/GAV4(335): Thread[GAThread,5,main]: User-Agent: GoogleAnalytics/3.0 (Linux; U; Android 2.3.1; en-us; sdk Build/GSI11)
08-31 12:27:59.702: V/GAV4(335): Host: ssl.google-analytics.com
08-31 12:27:59.702: V/GAV4(335): GET /collect?ul=en-us&ht=1409484468454&sr=480x800&a=746864705&sf=100.0&aid=com.redula.vsavings&cid=32da19a1-7e15-4c83-aaa9-f3f1d502b775&av=1.2&v=1&t=exception&an=Savings+Organiser&tid=UA-XXXXXXX&exd=NullPointerException+%28%40HomeActivity%3AconnectToInAppBillingService%3A202%29+%7Bmain%7D&_u=.2nKKhAAAL&_v=ma4.0.2&exf=1&qt=11249&z=2 HTTP/1.1
08-31 12:28:00.482: V/GAV4(335): Thread[GAThread,5,main]: sent 1 of 1 hits
08-31 12:28:00.492: V/GAV4(335): Thread[GAThread,5,main]: PowerSaveMode initiated.
08-31 12:32:48.562: I/Process(335): Sending signal. PID: 335 SIG: 9
Run Code Online (Sandbox Code Playgroud)

这就是GA控制台在一分钟左右的崩溃中显示的内容:

在此输入图像描述

我知道你只能获得堆栈跟踪的第一行,但现在这对我有用.其他各种各样的人都有自己的方法来获取整个堆栈跟踪(参见上面的@ xitx的评论,例如这里).

因此,我计划使用现有代码并等待Google在更高版本的Google Play服务中将修复程序发送到他们的错误.一旦他们的修复程序发布,我的应用程序应该按原样运行.

为了记录,我在我的跟踪器的XML文件(res/xml/app_tracker_config.xml)中使用它:

<bool name="ga_reportUncaughtExceptions">true</bool>
Run Code Online (Sandbox Code Playgroud)

我的getTracker()实现:

public class MyApp extends Application {

 private static Tracker tracker = null;

 synchronized Tracker getTracker() {
    if (tracker == null) {
        GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
        analytics.enableAutoActivityReports(this);
        tracker = analytics.newTracker(R.xml.app_tracker_config);
        tracker.enableAdvertisingIdCollection(true);
    }
    return tracker;
 }
}
Run Code Online (Sandbox Code Playgroud)

然后在onCreate()中为我的主屏幕活动我这样做来初始化GA:

((MyApp) getApplication()).getTracker();
Run Code Online (Sandbox Code Playgroud)

编辑(额外信息):全局配置文件,res/xml/analytics_global_config.xml:

<?xml version="1.0" encoding="utf-8"?>
  <resources>
    <string name="ga_logLevel">verbose</string>
    <integer name="ga_dispatchPeriod">1</integer>
    <bool name="ga_dryRun">false</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

我的应用程序清单引用该application元素的子标记中的此文件:

    <meta-data
        android:name="com.google.android.gms.analytics.globalConfigResource"
        android:resource="@xml/analytics_global_config" />
Run Code Online (Sandbox Code Playgroud)