Задания

Это руководство посвящено заданиям – расширенной функции, которая позволяет настраивать проверку, создание и отправку запросов Measurement Protocol с помощью analytics.js.

Обзор

При каждом вызове команды send скрипт analytics.js выполняет серию заданий по проверке, созданию и отправке запросов протокола передачи статистических данных из браузера пользователя на серверы Google Analytics. В таблице ниже все эти задания перечислены в порядке их выполнения.

Название задания Описание
customTask По умолчанию не делает ничего. Переопределите, чтобы указать нужное действие.
previewTask Прерывает выполнение запроса, если страница отображается только для того, чтобы создать значок Top Sites для браузера Safari.
checkProtocolTask Прерывает выполнение запроса, если на странице не используются протоколы http или https.
validationTask Прерывает выполнение запроса, если обязательные поля отсутствуют или недействительны.
checkStorageTask Прерывает выполнение запроса, если в счетчике настроено использование файлов 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.

Получить доступ к заданиям или заменить их можно с помощью стандартных методов трекера get и set. С помощью этих методов вы можете заменить стандартные задания собственными функциями или же добавить функции, которые нужно выполнить до или после существующего задания.

Реализация

Далее описывается, как добавить новые функции к существующим заданиям, заменить встроенные функции своими собственными или отключить их.

Переопределение задания

Чтобы переопределить задание, присвойте ему другую функцию с помощью метода set. Обычно переопределение используется для замены функции (метод stub) при тестировании реализаций analytics.js.

В приведенном ниже примере sendHitTask заменяется на функцию, которая регистрирует объем данных обращений в консоли.

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

Добавление новых функций к заданиям

Новые функции можно добавить до или после существующего задания. В приведенном ниже примере мы заменяем sendHitTask собственной функцией, которая сначала вызывает исходную функцию sendHitTask, отправляющую маркер запроса в google-analytics.com/collection, а затем выполняет код, посылающий копию запроса протокола на локальный сервер.

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');