אז יש לכם אפליקציית אינטרנט מתקדמת עם קובץ שירות (service worker) שמאפשר לה לפעול במצב אופליין. נהדר! בנוסף, כבר הגדרתם את Google Analytics לאפליקציית האינטרנט שלכם, ואתם לא רוצים לפספס תובנות אנליטיות שמגיעות מהשימוש שמתרחש במצב אופליין. עם זאת, אם תנסו לשלוח נתונים ל-Google Analytics במצב אופליין, הבקשות האלה ייכשל והנתונים יאבדו.
הפתרון, לא מפתיע, הוא קובצי שירות (service workers)! באופן ספציפי, הקוד מוסיף ל-service worker כדי לאחסן בקשות של Google Analytics (באמצעות IndexedDB
) ולנסות שוב מאוחר יותר, כשהרשת תהיה זמינה. שתפנו קוד כדי לטפל בלוגיקה הזו כחלק מאפליקציית האינטרנט של Google I/O בקוד פתוח, אבל הבנו שזהו דפוס שימושי, ושכפייה והדבקה של קוד יכולות להיות חלשות.
היום אנחנו שמחים להודיע שכל מה שדרוש כדי לטפל בבקשות של Google Analytics במצב אופליין בתוך ה-service worker שלכם נכלל בחבילת npm: npm install --save-dev sw-offline-google-analytics
שימוש ב-sw-offline-google-analytics
בקוד הקיים של ה-service worker, מוסיפים את הקטע הבא:
// 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
ב-service worker, שמגיב לבקשות שנשלחות אל הדומיין של Google Analytics. (הספרייה מתעלמת מבקשות שאינן של Google Analytics, ומאפשרת למטפלי האירועים האחרים של ה-service worker להטמיע אסטרטגיות מתאימות למשאבים האלה).fetch
קודם כל, המערכת תנסה למלא את הבקשה מול הרשת. אם המשתמש מחובר לאינטרנט, התהליך יתבצע כרגיל.
אם הבקשה לרשת נכשלת, הספרייה תשמור באופן אוטומטי מידע על הבקשה ל-IndexedDB
, יחד עם חותמת זמן שמציינת מתי הבקשה נשלחה לראשונה. בכל פעם ש-service worker מתחיל לפעול, הספרייה בודקת אם יש בקשות בתור ומנסים לשלוח אותן מחדש, יחד עם כמה פרמטרים נוספים של Google Analytics:
- פרמטר
qt
, שמוגדר לפי משך הזמן שחלף מאז הניסיון הראשון לשלוח את הבקשה, כדי לוודא שהזמן המקורי ישויך כראוי. - כל הפרמטרים הנוספים והערכים שסופקו במאפיין
parameterOverrides
של אובייקט התצורה מועברים אלgoog.offlineGoogleAnalytics.initialize()
. לדוגמה, אפשר לכלול מאפיין מותאם אישית כדי להבדיל בין בקשות שנשלחו מחדש מה-service worker לבין בקשות שנשלחו באופן מיידי.
אם שליחת הבקשה מחדש תצליח, מצוין. הבקשה תוסר מ-IndexedDB. אם הניסיון החוזר נכשל והבקשה הראשונית נשלחה לפני פחות מ-24 שעות, היא תישמר ב-IndexedDB
כדי לנסות אותה שוב בפעם הבאה שבה שירות העבודה יתחיל. חשוב לזכור שלא בטוח שתתבצע עיבוד של היטים ב-Google Analytics שנוצרו לפני יותר מארבע שעות, אבל שום נזק לא יקרה אם תשלחו מחדש היטים קצת ישנים יותר "רק למקרה".
sw-offline-google-analytics
implements גם אסטרטגיה של 'רשת קודם, חזרה למטמון' לקוד JavaScript של analytics.js
שנחוץ כדי להפעיל את Google Analytics.
בקרוב יתווספו עוד תכונות.
sw-offline-google-analytics
הוא חלק מהפרויקט הגדול יותר sw-helpers
, שהוא אוסף ספריות שנועדו לספק שיפורים שאפשר להוסיף ללא מאמץ להטמעות קיימות של שירותי עבודה.
חלק מהפרויקט הזה הוא גם sw-appcache-behavior
, ספרייה שמטמיעה אסטרטגיות של שמירת נתונים במטמון שמוגדרות במניפסט קיים של AppCache בתוך שירות לעבודה ברקע. המטרה שלו היא לעזור לכם לעבור מ-AppCache ל-Service Workers תוך שמירה על אסטרטגיית אחסון קבועה, לפחות בהתחלה.
אם יש לך רעיונות נוספים לספרייה, נשמח לשמוע ממך. לכן, יש לשלוח בקשה בכלי למעקב אחר בעיות.