משימות

במדריך הזה מתוארות משימות, תכונה מתקדמת שמשמשת להתאמה אישית של האופן שבו מערכת analytics.js מאמתת, בונה ושולחת בקשות של Measurement Protocol.

סקירה

בכל קריאה לפקודה send, analytics.js מבצע רצף של משימות כדי לאמת, לבנות ולשלוח בקשת Measurement Protocol מהדפדפן של המשתמש אל Google Analytics. בטבלה הבאה מתוארים כל אחת מהמשימות האלה, לפי הסדר שבו הן מתבצעות:

שם המשימה תיאור
customTask כברירת מחדל, המשימה הזו לא עושה כלום. יש לשנות אותו כדי לספק התנהגות מותאמת אישית.
previewTask הבקשה מתבטלת אם הדף מעובד רק כדי ליצור תמונה ממוזערת של 'אתרים מובילים' ב-Safari.
checkProtocolTask מבטל את הבקשה אם פרוטוקול הדף אינו http או https.
validationTask מבטל את הבקשה אם שדות החובה חסרים או לא חוקיים.
checkStorageTask מבטל את הבקשה אם מכשיר המעקב מוגדר לשימוש בקובצי cookie, אבל קובצי ה-cookie מושבתים בדפדפן של המשתמש.
historyImportTask מייבאת מידע מקובצי cookie ga.js ו-urchin.js כדי לשמור את היסטוריית המבקרים כאשר אתר עובר ל-Universal Analytics.
samplerTask דוגמים מבקרים על סמך ההגדרה sampleRate של מכשיר המעקב הזה.
buildHitTask יוצר מחרוזת בקשה של Measurement Protocol ושומר אותה בשדה hitPayload.
sendHitTask מעביר לשרתים של Google Analytics את הבקשה של Measurement Protocol ששמורה בשדה hitPayload.
timingTask המערכת יוצרת באופן אוטומטי היט תזמון של מהירות האתר על סמך ההגדרה siteSpeedSampleRate לכלי המעקב הזה.
displayFeaturesTask שולחת היט נוסף אם תכונות התצוגה מופעלות והיט קודם לא נשלח במהלך פרק הזמן הקצוב לתפוגה שהוגדר על ידי קובץ ה-Cookie של תכונות הפרסום (_gat).

כל אחת מהמשימות האלו מוטמעת כפונקציית JavaScript, שמקבלת פרמטר יחיד של מודל כקלט. המודל הוא אובייקט פשוט שמספק גישה לכל אחד מהשדות המוגדרים בחומר העזר בנושא שדות של Analytics.js.

אפשר לגשת ל-Tasks או להחליף אותן באמצעות השיטות הרגילות למעקב get ו-set. בשיטות האלה, ניתן להחליף משימות בפונקציות מותאמות אישית משלכם, או להרחיב את הפונקציונליות הקיימת על ידי שרשור הפונקציות המותאמות אישית כך שיופעלו לפני או אחרי משימה קיימת.

הטמעה

בקטע הזה נסביר איך להוסיף פונקציונליות חדשה למשימות קיימות, להחליף את הפונקציות המובנות בקוד מותאם אישית או להשבית לגמרי פונקציה של משימה.

ביטול משימה

כדי לשנות משימה, אפשר set להגדיר את הערך שלה לפונקציה שמבצעת פעולה אחרת. אחת הסיבות הנפוצות לביטול משימות היא לסרוק את הפונקציונליות במהלך בדיקת ההטמעות של analytics.js.

הקוד הבא מחליף את sendHitTask בפונקציה שמתעדת את המטען הייעודי (payload) של ההיט במסוף:

ga('create', 'UA-XXXXX-Y', 'auto');
ga('set', 'sendHitTask', function(model) {
  console.log(model.get('hitPayload'));
});

הוספה למשימה

כדי להוסיף פונקציונליות חדשה, אפשר לשרשר את פונקציית המשימה המותאמת אישית לביצוע לפני או אחרי משימה קיימת. בדוגמה הבאה, sendHitTask מוחלף בפונקציית משימה בהתאמה אישית שקוראת קודם לפונקציה sendHitTask המקורית כדי לשלוח את חיישן הבקשה הרגיל אל google-analytics.com/collection, ולאחר מכן מריצה קוד מותאם אישית כדי לשלוח עותק של הבקשה ל-Measurement Protocol לשרת מקומי.

ga('create', 'UA-XXXXX-Y', 'auto');

ga(function(tracker) {

  // Grab a reference to the default sendHitTask function.
  var originalSendHitTask = tracker.get('sendHitTask');

  // Modifies sendHitTask to send a copy of the request to a local server after
  // sending the normal request to www.google-analytics.com/collect.
  tracker.set('sendHitTask', function(model) {
    originalSendHitTask(model);
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/localhits', true);
    xhr.send(model.get('hitPayload'));
  });
});

ga('send', 'pageview');

מבטל את עיבוד המשימה

משימה יכולה לבטל את עיבוד המשימות הבאות על ידי הטלת חריגה. אם המשימה של החריגה מבוצעת לפני sendHitTask, התוצאה היא מניעת השליחה של הבקשה של פרוטוקול המדידה לשרתים של Google Analytics. בדוגמה הבאה, אנחנו מבטלים את הבקשה בכל פעם שהדפדפן של המשתמש מכיל קובץ cookie בשם 'testing' עם הערך true.

ga('create', 'UA-XXXXX-Y', 'auto');

ga(function(tracker) {
  var originalBuildHitTask = tracker.get('buildHitTask');
  tracker.set('buildHitTask', function(model) {
    if (document.cookie.match(/testing=true/)) {
      throw 'Aborted tracking for test user.';
    }
    originalBuildHitTask(model);
  });
});

ga('send', 'pageview');

השבתה של משימה

כדי להשבית פונקציות משימה מובנות, צריך להחליף אותה ב-null.

ga('create', 'UA-XXXXX-Y', 'auto');
ga('set', 'checkProtocolTask', null); // Disables file protocol checking.
ga('send', 'pageview');