使用Google跟踪代码管理器时触发Angular App的Google Analytics综合浏览量

时间:2014-11-11 20:20:57

标签: angularjs google-analytics single-page-application google-tag-manager

我正在使用SPA构建Angular.js。我们使用Google Tag Manager加载我们的大多数分析/营销脚本,其中包括Google Analytics。我还使用ui-router来管理状态/视图。

每当用户浏览我的应用中的其他state时,我都希望将pageview个事件发送给Google Analytics。使用GTM执行此操作的部分复杂性是GTM创建了named tracker。这意味着所有GA事件都需要添加跟踪器名称。通常看起来像这样:

 ga('trackerName.send', 'pageview', {page: '/a/path/', title: 'A Title'});

GTM使用随机生成的跟踪器名称,​​因此需要在运行时抓取跟踪器名称。这可以通过GA getAll函数相当简单地完成。如果您想将网页浏览事件发送给所有跟踪器,您只需执行以下操作:

 var allTrackers = ga.getAll();
 for(var i=0; i<allTrackers.length; i++) {
   ga.send(allTrackers[i].getName()+".send", "pageview", {page: '/a/path', title: 'A Title'});
 }

这适用于我的网页浏览事件的大多数。但是,当ui-router激活初始视图$stateChangeSuccess(我触发GA网页浏览的位置)和加载analytics.js之间存在竞争条件。

在加载analytics.js之前,Google Analytic的代码段会创建一个可以发送事件的虚假ga对象。这个虚假对象上没有其余的ga函数,因此您无法运行getAll。没有getAll功能,我无法获取跟踪器名称,​​也无法发送网页浏览事件。

据我所知,Google Analytics不会为analytics.js加载完成时提供任何回调或事件,因此无法确定何时能够开始发送事件。现在我使用$interval来检查ga.getAll是否存在,但这不是一个非常高效或理想的解决方案。这就是我所拥有的:

 gaCheckInterval = setInterval(function() {
   if(typeof(ga) !== 'undefined' && typeof(ga.getAll) == 'function') {
     clearInterval(gaCheckInterval);
     sendBackloggedEvents();
   }
 }, 200);

还有其他方法可以识别analytics.js何时完成加载?或者任何其他方式将事件发送到指定的跟踪器,而无法访问getAll

1 个答案:

答案 0 :(得分:3)

尝试配置和触发单个跟踪器会绕过使用标记管理器的目的。而是做:

dataLayer.push({event:'spa.pageView', page:..., title:...});

其中:

  • dataLayer可选地在gtm片段中重命名

  • spa是您的app / project / company /的便捷缩写,以防您以后需要区分其操作。

  • pagetitle可以是您喜欢的任何内容,您可以通过在GTM容器中添加dataLayer宏来引用它们。

然后,在标签管理器中配置:

  1. rule {{event}} ends with pageView
  2. dataLayer macros代表pagetitle您正在推进dataLayer。
  3. UA Tag(以及其他任何其他)要触发(1)并使用(2)中的宏来覆盖它们的TAG参数。
  4. 根据需要,对不同的UA属性重复(3)次数,并根据需要使用其他阻止规则,备用宏或更多粒度触发规则。
  5. 现在,您可以配置细节并添加其他重用规则和宏的标记类型,而无需为每次更改修改应用程序。