如果您启用 Google Analytics 日志记录,您可以看到,当您调用 setAppOptOut(true) 时,Google Analytics 将清除自上次向 Google Analytics 服务器发送命中后所有排队的命中:
V/GAV4﹕ Thread[GAThread,5,main]: clearHits called
正如您注意到的那样,您自己dispatchLocalHits()
并没有帮助,因为它对已安装的 Google Play Services 没有任何作用。您需要做的是等待调用setAppOptOut(true)
,直到您的点击被发送。但是,由于您不知道点击何时发送,这不是一件容易的事。
您可以使用该设置指定您的应用程序应具有的调度周期ga_dispatchPeriod
(默认值为 30 分钟)。如果您等待的时间超过了配置的调度周期,您应该相当确定您的事件已发送,但这不能保证,因为如果您目前没有任何网络连接,GA 可能会等待更长时间发送数据。
如果您采用这种方法,则必须确保等待跨会话有效,因为 Google Play 服务是设备上的一项单独服务,即使您重新启动应用程序,它也会保留您的点击。因此,在您的应用程序的下一次启动时选择退出也将不起作用。
然而,等待超过 30 分钟的选择退出对您的用户来说可能不是很好,因为在用户认为他们已经选择退出之后,这会为收集和提交数据提供大量时间。
更好的方法可能是拥有自己的内部 Google Analytics 包装类,应用程序的所有部分都调用它来报告数据。然后每个报告方法都可以检查是否启用了 Google Analytics,永远不要调用任何真正的 Google Analytics 方法。
通过这种方式,您可以确保您的最终事件已发送到 Google Analytics,而在此之后即使您不调用,也不会再发送任何事件setAppOptOut(true)
。
请注意,这仅在您不依赖任何自动跟踪(如未捕获异常的自动报告或自动屏幕测量)时才有效。