輕鬆使用離線 Google Analytics (分析)

因此,您擁有一個漸進式網頁應用程式,並搭配Service Worker,可讓應用程式離線運作。太好了!您也已為網頁應用程式設定 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 中,以便在服務工作者下次啟動時重試。請注意,Google Analytics 不會保證處理 四小時前觸發的命中記錄,但「以防萬一」重傳較舊的命中記錄應該不會造成問題。

sw-offline-google-analyticsimplements「網路優先,備用快取」策略,用於啟動 Google Analytics 所需的實際 analytics.js JavaScript 程式碼

我們還會推出更多功能!

sw-offline-google-analytics 是較大規模的 sw-helpers 專案的一部分,該專案是一系列程式庫,旨在為現有的服務工作者實作提供即插即用功能強化。

sw-appcache-behavior 也是該專案的一部分,這個程式庫會實作服務工作站中現有 AppCache 資訊清單中定義的快取策略。這項工具旨在協助您從 AppCache 遷移至服務工作者,同時維持一致的快取策略 (至少在初期)。

如果你有其他媒體庫的想法,歡迎與我們分享。因此,請在問題追蹤工具中提出要求!