ניתוח נתונים אופליין של Google בקלות

כך תוכלו להשתמש ב-Progressive Web App בשילוב עם service worker שמאפשר לה לפעול אופליין. נהדר! יש לך גם הגדרה של Google Analytics לאפליקציית האינטרנט שלך, ולא רוצה לפספס תובנות ניתוח נתונים שנובעות מהשימוש שמתרחש במצב אופליין. אבל אם תנסו לשלוח נתונים ל-Google Analytics במצב אופליין, הבקשות האלה ייכשלו והנתונים יאבדו.

זה לא מפתיע אתכם לגלות, כי הפתרון הוא Service Worker! באופן ספציפי, יש להוסיף קוד ל-Service Worker כדי לאחסן בקשות מ-Google Analytics (באמצעות IndexedDB) ולנסות שוב מאוחר יותר כשיהיה חיבור זמין לרשת. שיתפנו קוד כך שיטפל בלוגיקה הזו כחלק מאפליקציית האינטרנט Google I/O של הקוד הפתוח, אבל הבנו שמדובר בדפוס שימושי ושהעתקה והדבקה של קוד יכולה להיות הרבה פחות פשוטה.

היום אנחנו שמחים להודיע שכל מה שאתם צריכים כדי לטפל בבקשות אופליין של Google Analytics בתוך קובץ השירות (service worker) שלכם ארוז בחבילת NPM: npm install --save-dev sw-offline-google-analytics

שימוש ב-sw-online-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 מגדיר handler חדש של אירועים של fetch ב-Service Worker, שמגיב לבקשות שנשלחות לדומיין Google Analytics. (הספרייה מתעלמת מבקשות שאינן של Google Analytics, וכך מאפשרת למטפלים האחרים באירועים של fetch של ה-Service Worker שלכם ליישם אסטרטגיות מתאימות עבור המשאבים האלה). הוא ינסה תחילה למלא את הבקשה כנגד הרשת. אם המשתמש מחובר לאינטרנט, הפעולה תמשיך כרגיל.

אם בקשת הרשת נכשלה, הספרייה תאחסן אוטומטית מידע על הבקשה ב-IndexedDB, יחד עם חותמת זמן שמציינת מתי הבקשה בוצעה לראשונה. בכל פעם שה-Service Worker מופעל, הספרייה תחפש בקשות בתור ותנסה לשלוח אותן מחדש, יחד עם כמה פרמטרים נוספים של Google Analytics:

  • פרמטר qt, שמוגדר למשך הזמן שעבר מאז הניסיון הראשוני של הבקשה, כדי להבטיח שהשעה המקורית משויכת כראוי.
  • כל פרמטרים וערכים נוספים שצוינו במאפיין parameterOverrides של אובייקט התצורה שהועברו אל goog.offlineGoogleAnalytics.initialize(). לדוגמה, ניתן לכלול מאפיין מותאם אישית כדי להבחין בין בקשות שנשלחו מחדש מה-Service Worker לבין בקשות שנשלחו באופן מיידי.

אם שליחת הבקשה מחדש תסתיים בהצלחה, נהדר! הבקשה תוסר מ-IndexedDB. אם הניסיון החוזר נכשל והבקשה הראשונית נשלחה לפני פחות מ-24 שעות, היא תישמר ב-IndexedDB לצורך ניסיון חוזר בפעם הבאה שה-Service Worker יתחיל. שים לב: לא בטוח שהמערכת תעבד את היטים שגילם יותר מ-ארבע שעות ב-Google Analytics, אבל שליחה מחדש של היטים ישנים קצת יותר "למקרה הצורך" לא אמורה להיפגע.

sw-offline-google-analytics גם implements אסטרטגיית 'רשת תחילה, המערכת עוברת חזרה למטמון' עבור קוד ה-JavaScript של analytics.js שנדרש כדי לאתחל את Google Analytics.

יש עוד למה לצפות!

sw-offline-google-analytics הוא חלק מפרויקט sw-helpers הגדול יותר, שהוא אוסף ספריות שנועד לספק שיפורים נוספים להטמעות קיימות של קובץ השירות (service worker).

בנוסף, חלק מהפרויקט הוא sw-appcache-behavior, ספרייה שמטמיעה אסטרטגיות שמירה במטמון שמוגדרות במניפסט AppCache קיים בתוך קובץ שירות (service worker). מטרתו היא לעזור לך לעבור מ-AppCache ל-Service Workers תוך שמירה על אסטרטגיה עקבית של שמירה במטמון, לפחות בפעם הראשונה.

אם יש לכם רעיונות נוספים לספרייה, נשמח לשמוע מכם. לכן, שלחו בקשה באתר המעקב אחר בעיות.