Google 分析在 setAppOptOut(true) 之前不发送事件

Google analytics doesn't send event before setAppOptOut(true)

我尝试在 android 中禁用 Google 分析之前发送一个事件。但是,该事件没有显示在实时 GA 控制台中。

    tracker.send(new HitBuilders.EventBuilder()
                    .setCategory(category)
                    .setAction(action)
                    .setLabel(label)
                    .build());
    //disable GA
    GoogleAnalytics.getInstance(this).setAppOptOut(true);

感谢任何建议。

如果启用 Google Analytics 日志记录,您可以看到当您调用 setAppOptOut(true) 时 Google Analytics 将清除自上次向 Google Analytics 发送点击后排队的所有点击服务器:

V/GAV4﹕ Thread[GAThread,5,main]: clearHits called

如您所见,dispatchLocalHits() 没有帮助,因为它 does nothing with Google Play Services installed。您需要做的是等待调用 setAppOptOut(true) 直到您的点击被发送。然而,由于您不知道匹配项何时发送,因此这并非易事。

您可以使用 ga_dispatchPeriod 设置指定您的应用程序应具有的调度周期(默认值为 30 分钟)。如果您等待的时间超过配置的发送周期,您应该相当确定您的事件已经发送,但是这不能保证,因为如果您此时没有任何网络连接,GA 可能会等待更长时间发送数据。

如果您采用这种方法,您必须确保等待跨会话有效,因为 GooglePlay 服务是设备上的一项单独服务,即使您重新启动应用程序,它也会保留您的点击.因此,在您的应用下次启动时选择退出也不会起作用。

然而,选择退出等待超过 30 分钟对您的用户来说可能不是很好,因为在用户认为他们已经选择退出后,这会为收集和提交数据提供大量时间。

更好的方法可能是拥有自己的内部 Google 分析包装器 class,应用程序的所有部分都会调用它来报告数据。然后每个报告方法都可以检查 Google 分析是否已启用,永远不要调用任何真正的 Google 分析方法。

通过这种方式,您可以确保将最终事件发送到 Google Analytics,而之后不会再发送任何事件,即使您没有调用 setAppOptOut(true)

请注意,这仅在您不依赖任何自动跟踪时才有效,例如 automatic reporting of uncaught exceptions or automatic screen measurement