workbox-google-analytics — это модуль библиотеки
Workbox, предназначенный для обеспечения корректной отправки данных
Google Analytics даже при отсутствии интернет-соединения. Он
автоматически перехватывает запросы к GA и кеширует их, чтобы отправить,
когда соединение будет восстановлено.
Для использования модуля необходимо установить Workbox через npm:
npm install workbox-google-analytics workbox-core workbox-routing workbox-strategies
В Service Worker подключение осуществляется так:
import {initialize} from 'workbox-google-analytics';
После этого инициализируется модуль:
initialize();
Эта простая строка включает перехват всех запросов к Google Analytics
(collect endpoint) и обеспечивает их буферизацию при
офлайн-режиме.
Перехват запросов Любые события Google
Analytics, отправляемые через gtag.js или
analytics.js, направляются в collect endpoint.
workbox-google-analytics регистрирует свой собственный
fetch-обработчик для этих запросов.
Буферизация данных Если устройство офлайн, события сохраняются в IndexedDB. Это позволяет не терять ни одного события, даже если пользователь не подключен к сети длительное время.
Повторная отправка Когда соединение восстанавливается, модуль автоматически отправляет все накопленные события в GA. Отправка происходит пакетами, что снижает нагрузку на сеть и минимизирует задержки.
Функция initialize поддерживает несколько ключевых
параметров:
initialize({
hitFilter: (params) => {
// Можно модифицировать параметры события перед отправкой
params.set('cd1', 'offline');
},
parameterOverrides: {
// Позволяет задать дополнительные поля GA
cd1: 'offline'
},
cacheName: 'ga-offline-cache',
maxRetentionTime: 24 * 60 * 60 // Максимальное время хранения офлайн-событий в секундах
});
params (экземпляр URLSearchParams) для каждого
события. Позволяет добавлять или изменять параметры перед
отправкой.'workbox-google-analytics'.workbox-google-analytics идеально подходит для
Progressive Web App (PWA), где пользователи могут находиться в офлайне
продолжительное время. Обычно его используют совместно с другими
стратегиями Workbox, например:
import {registerRoute} from 'workbox-routing';
import {NetworkFirst} from 'workbox-strategies';
// Стратегия для основных API приложения
registerRoute(
({url}) => url.pathname.startsWith('/api/'),
new NetworkFirst()
);
При этом GA-события не будут потеряны, даже если NetworkFirst не смог вернуть данные.
analytics.js — стандартная библиотека классической
версии GA. Все события, отправляемые через
ga('send', 'event', ...), будут автоматически
перехвачены.gtag.js — современная версия GA. События
gtag('event', ...) также поддерживаются без дополнительной
конфигурации.Для отладки можно включить вывод информации в консоль:
import {setConfig} from 'workbox-core';
setConfig({debug: true});
При включенном режиме debug видно:
maxRetentionTime, чтобы не переполнять IndexedDB на
устройствах пользователей.import {registerRoute} from 'workbox-routing';
import {NetworkFirst, StaleWhileRevalidate} from 'workbox-strategies';
import {initialize} from 'workbox-google-analytics';
// Инициализация офлайн-аналитики
initialize({
cacheName: 'ga-offline-cache',
maxRetentionTime: 24 * 60 * 60
});
// Кеширование статических ресурсов
registerRoute(
({request}) => request.destination === 'script' || request.destination === 'style',
new StaleWhileRevalidate()
);
// Кеширование API-запросов
registerRoute(
({url}) => url.pathname.startsWith('/api/'),
new NetworkFirst()
);
Этот код обеспечивает: