Google Analytics hors connexion en toute simplicité

Vous disposez donc d'une application Web progressive, dotée d'un service worker qui lui permet de fonctionner hors connexion. Parfait. Vous avez également configuré Google Analytics pour votre application Web et vous ne voulez pas passer à côté des insights analytiques provenant de votre utilisation hors connexion. Toutefois, si vous essayez d'envoyer des données à Google Analytics hors connexion, ces requêtes échoueront et les données seront perdues.

La solution, les service workers, ne devraient pas vous surprendre. Plus précisément, elle consiste à ajouter du code à votre service worker pour stocker les requêtes Google Analytics (à l'aide de IndexedDB) et les relancer lorsqu'un réseau sera, espérons-le, disponible. Nous avons partagé du code pour gérer cette logique dans l'application Web Google I/O Open Source, mais nous avons réalisé qu'il s'agissait d'un modèle utile, et que copier et coller du code pouvait s'avérer fragile.

Aujourd'hui, nous avons le plaisir de vous annoncer que tous les éléments dont vous avez besoin pour gérer les requêtes Google Analytics hors connexion de votre service worker ont été regroupés dans un package npm: npm install --save-dev sw-offline-google-analytics.

Utiliser SW-offline-google-analytics

À partir de votre code de service worker existant, ajoutez les éléments suivants:

// 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.

Le plus important !

Que se passe-t-il sous le capot ?

sw-offline-google-analytics configure un nouveau gestionnaire d'événements fetch dans votre service worker, qui répond aux requêtes envoyées au domaine Google Analytics. (La bibliothèque ignore les requêtes autres que Google Analytics, ce qui permet aux autres gestionnaires d'événements fetch de votre service worker d'implémenter des stratégies appropriées pour ces ressources.) Il tente d'abord de traiter la requête sur le réseau. Si l'utilisateur est en ligne, la procédure se déroule normalement.

Si la requête réseau échoue, la bibliothèque stocke automatiquement les informations sur la requête envoyée à IndexedDB, ainsi qu'un horodatage indiquant le moment où la requête a été effectuée initialement. Chaque fois que votre service worker démarre, la bibliothèque recherche les demandes en file d'attente et essaye de les renvoyer, ainsi que certains paramètres Google Analytics supplémentaires:

Si le renvoi de la requête aboutit, c'est parfait. La requête est supprimée de IndexedDB. Si la nouvelle tentative échoue et que la requête initiale a été effectuée il y a moins de 24 heures, elle sera conservée dans IndexedDB pour être réessayée au prochain démarrage du service worker. Sachez que le traitement des appels Google Analytics datant de plus de quatre heures n'est pas garanti. Toutefois, renvoyer des appels plus anciens"au cas où" ne devrait pas avoir de problème.

sw-offline-google-analytics implements également une stratégie de type "réseau d'abord, retour au cache" pour le code JavaScript analytics.js nécessaire à l'amorçage de Google Analytics.

Et ce n'est pas tout !

sw-offline-google-analytics fait partie du projet sw-helpers, qui est un ensemble de bibliothèques destiné à apporter des améliorations prêtes à l'emploi aux implémentations de service worker existantes.

Ce projet fait également partie de sw-appcache-behavior, une bibliothèque qui implémente les stratégies de mise en cache définies dans un fichier manifeste AppCache existant au sein d'un service worker. Elle est conçue pour vous aider à migrer d'AppCache vers les service workers tout en conservant une stratégie de mise en cache cohérente, au moins dans un premier temps.

Si vous avez d'autres idées pour une bibliothèque, n'hésitez pas à nous en faire part. Veuillez donc soumettre une demande dans l'outil de suivi des problèmes.