【问题标题】:How to detect if Google Analytics is loaded and able to track custom Events如何检测 Google Analytics 是否已加载并能够跟踪自定义事件
【发布时间】:2015-04-29 16:00:44
【问题描述】:

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

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

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

所以我需要一种方法来检测常规 GA 方法何时能够跟踪事件,如果不能,要么是因为未加载跟踪器或 cookie 被禁用,然后使用 cookie-less 方法来加载 GA 和跟踪事件。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    在使用 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/

    【讨论】:

    • 有趣的是 ga.loaded 没有正式记录,但谷歌也在示例中使用它,例如这里developers.google.com/analytics/devguides/collection/…
    • 我宁愿使用自定义解决方案不依赖于未记录的ga.loaded。我已经更新了 JS 分析代码...(function(i,s,o,g,r,a,m){ ... a.onload = function(){ i[r].isLoaded = true } ... } 然后我可以测试ga.isLoaded
    【解决方案2】:

    您可以尝试在 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.
       // ...
    }
    

    【讨论】:

    • 虽然 Google 的电子商务跟踪文档仍然包含引用 ga.loaded 的代码的花絮,但它似乎并不是真正的事情(或者至少不是在使用通用分析的所有配置中)。测试typeof window.ga == "function" 似乎就足够了
    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 2022-01-09
    • 2023-03-23
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2022-11-15
    相关资源
    最近更新 更多