谷歌分析发送事件回调函数

时间:2014-05-20 13:00:40

标签: javascript jquery google-analytics google-tag-manager

我正在尝试在用户注册后发送事件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%的所有活动,所有其他活动都丢失了。我不知道在将对象添加到dataLayer之后是否以及何时将事件发送给Google,我认为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')再没有任何回调函数!

如何使用dataLayer或ga('send')确保事件实际发送到Google?

3 个答案:

答案 0 :(得分:31)

终于明白了。它非常复杂,在文档中没有描述。 在我的情况下,我使用Google跟踪代码管理器,因此我需要做一些变通方法才能成功触发事件并获得回调。

首先,我们必须获得ClientId,这是发送到Google服务器的任何事件所必需的。实际上它保存在cookie中,但谷歌不建议直接从那里拿它。

以下是Google建议如何获取它,但如果您使用的是Google跟踪代码管理器,则此无效

 ga(function(tracker) {
       var clientId = tracker.get('clientId');
 });

相反,您必须从getAll方法获取ClientId。

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

答案 1 :(得分:6)

来自Google Analytic doc https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#hitCallback News

// Alerts the user when a hit is sent.
ga('send', 'pageview', {
  'hitCallback': function() {
    alert('hit sent');
  }
});

您可以为您编辑hitCallback功能。

OR

// 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 Analytic,然后使用您的代码。

为了更好地理解分析的api,fyr: https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference

答案 2 :(得分:1)

来自文档: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用于事件,页面浏览等。