轻松使用离线 Google Analytics(分析)

现在,您已经拥有了一个 Progressive Web App,并配备了允许其在离线状态下运行的 Service Worker。太棒了!您还为自己的 Web 应用设置了 Google Analytics,并且不想错过任何与离线使用情况相关的分析洞见。但是,如果您在离线状态下尝试向 Google Analytics 发送数据,这些请求将会失败,并且数据也会丢失。

解决方案是服务工作线程,这应该不会让您感到意外!具体而言,它会向您的服务工件添加代码,以便存储 Google Analytics 请求(使用 IndexedDB),并在网络可用时稍后重试这些请求。我们在开源 Google I/O 网站应用共享了代码来处理此逻辑,但后来发现这是一种有用的模式,而复制和粘贴代码可能会很脆弱。

今天,我们很高兴地宣布,您在服务工件中处理离线 Google Analytics 请求所需的一切都已打包到一个 npm 软件包中:npm install --save-dev sw-offline-google-analytics

使用 sw-offline-google-analytics

在现有的服务工作器代码中,添加以下代码:

// This code should live inside your service worker JavaScript, ideally
// before any other 'fetch' event handlers are defined:

// First, import the library into the service worker global scope:
importScripts('path/to/offline-google-analytics-import.js');

// Then, call goog.offlineGoogleAnalytics.initialize():
// See https://github.com/GoogleChrome/workbox/tree/main/packages/workbox-google-analytics
goog.offlineGoogleAnalytics.initialize();

// At this point, implement any other service worker caching strategies
// appropriate for your web app.

就是这么简单!

内部发生了什么?

sw-offline-google-analytics 会在您的服务工作器中设置新的 fetch 事件处理脚本,该脚本会响应对 Google Analytics 网域发出的请求。(该库会忽略非 Google Analytics 请求,让您的服务工件的其他 fetch 事件处理脚本有机会针对这些资源实现适当的策略。)它会先尝试通过网络来执行请求。如果用户在线,则会照常进行。

如果网络请求失败,该库会自动将与请求相关的信息存储到 IndexedDB,以及一个表示最初发出请求的时间戳。每次您的服务工件启动时,该库都会检查队列中的请求,并尝试重新发送这些请求,以及一些其他 Google Analytics 参数:

如果重新发送请求成功,那就太棒了!系统会从 IndexedDB 中移除该请求。如果重试失败,并且初始请求发出的时间不到 24 小时,该请求将保留在 IndexedDB 中,以便在下次启动 Service Worker 时重试。请注意,我们不保证会处理超过 4 小时的 Google Analytics 命中数据,但“以防万一”重新发送稍旧的命中数据应该不会有坏处。

sw-offline-google-analytics 还会针对引导启动 Google Analytics 所需的实际 analytics.js JavaScript 代码implements“网络优先,回退到缓存”策略

我们还将推出更多功能!

sw-offline-google-analytics 是更大的 sw-helpers 项目的一部分,该项目是一组,旨在为现有的 Service Worker 实现提供即插即用的增强功能。

该项目还包含 sw-appcache-behavior,这是一个库,用于在 Service Worker 中实现现有 AppCache 清单中定义的缓存策略。它旨在帮助您从 AppCache 迁移到服务工作线程,同时至少在最初阶段保持一致的缓存策略。

如果您有其他媒体库方面的想法,欢迎与我们分享。因此,请在问题跟踪器中提交请求!