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

Pro*_*der 25 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)
    }
})
Run Code Online (Sandbox Code Playgroud)

问题是我收到了大约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)
    }
})
Run Code Online (Sandbox Code Playgroud)

但ga('send')再没有任何回调函数!

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

Pro*_*der 33

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

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

以下是Google建议您使用此功能的方法,但如果您使用的是Google跟踪代码管理器,则无法使用此功能.

 ga(function(tracker) {
       var clientId = tracker.get('clientId');
 });
Run Code Online (Sandbox Code Playgroud)

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

 var clientId = ga.getAll()[0].get('clientId');
Run Code Online (Sandbox Code Playgroud)

之后,您必须创建新的跟踪器

    ga('create', 'UA-XXX-YYY', {
        'clientId': clientId
    });
Run Code Online (Sandbox Code Playgroud)

之后我们可以发送一个事件:

 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
   }
});
Run Code Online (Sandbox Code Playgroud)


小智 6

来自Google Analytic doc 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');
  }
});
Run Code Online (Sandbox Code Playgroud)

您可以编辑您的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...
}
Run Code Online (Sandbox Code Playgroud)

在这里,您可以criticalCode在上面的示例中定义您的函数(),该函数可以确保将数据发送到Google Analytic,然后使用您的代码.

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