Google analytics посылает функцию обратного вызова события
Я пытаюсь отправить событие go google analytics после регистрации пользователя и до, он перенаправил.
Я использую Диспетчер тегов Google и univerasl js.
Во-первых, я пытался использовать объект dataLayer, как описано здесь: developers.google
То, что моя функция выглядела так:
//Registering new user via ajax
$.ajax('/register/', {
success: function() {
//Pushing event to dataLayer
dataLayer.push({
'Category': 'Registration Process',
'event': 'Registration Submit Btn'
});
//Logging in new user and redirecting the page with a timeout
setTimeout(function(){
loginAction();
}, 500)
}
})
Проблема в том, что я получал около 25% всех событий, все остальные потеряны. Я не знаю, когда и когда событие действительно отправлено в Google после добавления объекта в dataLayer, и я думаю, что 75% событий вообще не отправлялись.
Теперь я пытаюсь реализовать другой подход:
//Registering new user via ajax
$.ajax('/register/', {
success: function() {
//Sending event through ga('send')
parent.ga('send', 'event', 'Registration Process', 'Registration Submit Btn');
//Logging in new user and redirecting the page with a timeout
setTimeout(function(){
loginAction();
}, 500)
}
})
Но ga ('send') снова не имеет функции обратного вызова!
Как я могу убедиться, что событие действительно отправлено в Google, используя dataLayer или ga ('send')?
Ответы
Ответ 1
Наконец-то понял. Это довольно сложно и не описано в документах.
В моем случае я использую Диспетчер тегов Google, поэтому некоторые способы обхода, которые я должен был сделать, чтобы успешно запустить событие и получить обратный вызов.
Во-первых, мы должны получить ClientId, который требуется при любом событии, отправленном на серверы Google. Фактически он хранится в файлах cookie, но Google не рекомендует брать их прямо оттуда.
Вот как Google рекомендует его получить, но этот не работает, если вы используете Диспетчер тегов Google.
ga(function(tracker) {
var clientId = tracker.get('clientId');
});
Вместо этого вы должны получить ClientId из метода getAll.
var clientId = ga.getAll()[0].get('clientId');
После этого вам нужно создать новый трекер
ga('create', 'UA-XXX-YYY', {
'clientId': clientId
});
И после этого мы можем отправить событие:
ga('send', 'event', {
'eventCategory': 'YOUR Category Name', //required
'eventAction': 'YOUR Action name', //required
'eventLabel': 'YOUR Label',
'eventValue': 1,
'hitCallback': function() {
console.log('Sent!!');
//callback function
},
'hitCallbackFail' : function () {
console.log("Unable to send Google Analytics data");
//callback function
}
});
Ответ 2
Из документа Google Analytics
https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#hitCallback Новости
// Alerts the user when a hit is sent.
ga('send', 'pageview', {
'hitCallback': function() {
alert('hit sent');
}
});
Вы можете отредактировать функцию hitCallback
для вашей.
ИЛИ
// Use a timeout to ensure the execution of critical application code.
ga('send', 'pageview', {'hitCallback': criticalCode});
setTimeout(criticalCode, 2000);
// Only run the critical code once.
var alreadyCalled = false;
function criticalCode() {
if (alreadyCalled) return;
alreadyCalled = true;
// Run critical code here...
}
Здесь вы можете определить свою функцию (criticalCode
) в приведенном выше примере, который может обеспечить отправку данных в Google Analytics, а затем работать с вашим кодом.
Для многозначности api аналитического, fyr:
https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference
Ответ 3
Из документов: https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced#hitCallback
ga('send', 'pageview', {
'page': '/my-new-page',
'hitCallback': function() {
alert('analytics.js done sending data');
}
});
В этом примере объект имени поля настраивает как параметр страницы, так и установку hitCallback. Как только трекер завершит отправку данных, пользователю будет показано окно с предупреждением.
Вы можете использовать hitCallback для событий, просмотров страниц и т.д.