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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谷歌分析发送事件回调函数相关的知识,希望对你有一定的参考价值。

我正在尝试在用户注册之后和重定向之前发送事件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跟踪代码管理器,因此我需要做一些变通方法才能成功触发事件并获得回调。

首先,我们必须获得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
   }
});
另一答案

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

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

非常了解分析的api,fyr:https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference

另一答案

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

以上是关于谷歌分析发送事件回调函数的主要内容,如果未能解决你的问题,请参考以下文章

向 JSF a4j:jsFunction oncomplete 事件发送回调

在承诺回调中发送数组响应,但响应为空白

Java设计模式补充:回调模式事件监听器模式观察者模式(转)

将活动回调发送到片段

如何避免对标记点击事件监听器使用匿名回调函数?

Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段