Офлайн-аналитика Google стала проще

Итак, у вас есть прогрессивное веб-приложение с сервис-воркером , позволяющим ему работать в автономном режиме. Большой! У вас также есть существующая настройка 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:

  • Параметр qt , для которого установлено количество времени, прошедшее с момента первоначальной попытки запроса, чтобы гарантировать правильное присвоение исходного времени.
  • Любые дополнительные параметры и значения, указанные в parameterOverrides объекта конфигурации, передаваемого в goog.offlineGoogleAnalytics.initialize() . Например, вы можете включить специальный параметр, чтобы отличать запросы, отправленные работником службы повторно, от запросов, отправленных немедленно.

Если повторная отправка запроса увенчалась успехом, то отлично! Запрос удален из IndexedDB. Если повторная попытка не удалась и первоначальный запрос был сделан менее 24 часов назад, он будет сохранен в IndexedDB , чтобы его можно было повторить при следующем запуске сервисного работника. Обратите внимание, что обращения Google Analytics старше четырех часов не гарантированно будут обработаны, но повторная отправка более старых обращений «на всякий случай» не должна повредить.

sw-offline-google-analytics также реализует стратегию «сначала сеть, возврат к кешу» для фактического кода JavaScript analytics.js , необходимого для загрузки Google Analytics.

Это еще не все!

sw-offline-google-analytics является частью более крупного проекта sw-helpers , который представляет собой набор библиотек , предназначенных для внесения дополнительных усовершенствований в существующие реализации сервис-воркеров.

Также частью этого проекта является sw-appcache-behavior — библиотека, реализующая стратегии кэширования, определенные в существующем манифесте AppCache внутри сервис-воркера. Он предназначен для того, чтобы помочь вам перейти с AppCache на Service Workers, сохраняя при этом согласованную стратегию кэширования, по крайней мере, на начальном этапе.

Если у вас есть другие идеи по созданию библиотеки, мы будем рады услышать ваше мнение. Поэтому, пожалуйста, отправьте запрос в систему отслеживания проблем !