如何检测Google Analytics是否已加载并且能够跟踪自定义事件

时间:2015-04-29 16:00:45

标签: iframe google-analytics mobile-safari google-analytics-api google-analytics-v4

当我们通过视频播放器加载iframe时,我们遇到了一些问题,该视频播放器将播放事件发送到加载在iframe(在另一个域中)内的Google Universal Analytics(analytics.js)。 GA跟踪器未在iOS设备上加载,因此,没有向GA发送事件跟踪。

在Android和包括桌面在内的其他设备上,它运行得很好,但在iOS上却没有,除非我更改了iOS Safari默认的第三方Cookie设置。

我使用无Cookie方法对Google Analytics(https://github.com/Foture/cookieless-google-analytics)进行了测试,iOS设备能够正确地向GA发送跟踪事件。但是,我想在常规GA方法不起作用时仅使用该方法作为后备,因为通过指纹方法创建的UserId在移动设备上并不是非常独特。

所以我需要一种方法来检测常规GA方法何时能够跟踪事件以及是否因为未加载跟踪器或禁用cookie而无法跟踪事件,然后使用无cookie方法加载GA并跟踪事件。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以尝试在ga对象上使用(看似)未记录的属性:ga.loaded

我在官方文档中可以找到的对此属性的唯一引用是在描述use of hitCallback for E-Commerce tracking的示例中:

// Called when a link to a product is clicked.
function onProductClick() {
   // Truncated Google Analytics example for brevity.
   // [...]
}

<a href="/next-page.html" onclick="onProductClick(); return !ga.loaded;">Android Warhol T-Shirt</a>

你可以尝试类似的东西:

if (typeof ga !== 'undefined' && ga.hasOwnProperty('loaded') && ga.loaded === true) {
   // ga successfully loaded. Custom Events available
   // ...
} else {
   // ga not loaded, fallback to another tracking implementation.
   // ...
}

答案 1 :(得分:0)

在使用ga()方法跟踪事件之前,您应该使用检查JavaScript window.ga && ga.loaded变量:

if(window.ga && ga.loaded) { {
    // if yes, rely on GA to follow link
    ga('send', 'event', 'outbound', 'click', url, {
        'transport': 'beacon',
        'hitCallback': function(){document.location = url;}
    });
} else {
    // if not, follow link ourselves
    document.location = url;
}

https://hacks.mozilla.org/2016/01/google-analytics-privacy-and-event-tracking/

上查看更多内容