ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript-将文件下载事件从服务器发送到Google Analytics(分析)

2019-11-11 05:34:01  阅读:218  来源: 互联网

标签:apache google-analytics javascript php analytics-js


这个问题已经在这里有了答案:            >            How can I track downloads of files from remote websites                                    1个
通过电子邮件将下载链接发送给客户:

Hello,
Please find your product here: 07001

我想在Google Analytics(分析)中跟踪此下载,以实现目标转化.

不幸的是,当用户单击链接时,该文件是由Web服务器直接传递的,而没有经过.html页面.

如何在Google Analytics(分析)中跟踪此类直接文件下载?

>我应该在中间添加一个虚拟HTML页面,该页面将使用analytics.js跟踪代码段,并使用ga.send(…)将下载事件发送到GA,然后在500毫秒后重定向到实际文件与setTimeout(redirect,500)?真的是一种干净安全的解决方案吗?我看到许多潜在的小问题:500毫秒可以吗?应该使用哪种重定向?同样,禁用了JS的用户将永远无法获取其文件…或使用< noscript>无法记录目标转换.
>有没有办法让Apache(谁将yourfile.zip提供给客户端)或PHP在提供此文件后将跟踪事件发送给GoogleAnalytics?
>另一个解决方案?

无论客户端是否启用JS,解决方案2似乎都具有100%可靠的优势.

但另一方面,我不想使用很少使用的hack.对于这种非常常见的情况,通常的解决方案是什么?

解决方法:

Google Analytics(分析)实际上有一个协议,可以从任意来源发送分析数据.看到这里:https://developers.google.com/analytics/devguides/collection/protocol/v1/

因此,让您的网络服务器将分析事件发送给Google并不像看起来那样困难.我不确定是否可以直接挂接到Apache来生成这些事件.但是,我确实至少看到了两种解决方案.

1)将所有下载重定向到服务器端脚本,该脚本将发送数据并生成所需的分析事件.
2)解析服务器日志并从中生成分析事件.

解决方案1的编辑示例:
确保确保标签之前或之后没有空格,因为这将是发送给客户端的实际响应的一部分.

download.php:

<?php
    // Read ?file=xxx URL parameter
    $requestedFile = $_GET["file"];

    // Read Google Analytics cookie
    $rawCookie = $_COOKIE["_ga"];
    $splitCookie = explode('.', $rawCookie);
    $trackingId = $splitCookie[2] . '.' . $splitCookie[3];

    // Create Google Analytics request data (see here https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide)
    $data = array('v' => 1, 
                  'tid' => 'UA-XXXXX-Y', 
                  'cid' => $trackingId, 
                  't' => 'event', 
                  'ec' => 'download', 
                  'ea' => 'download', 
                  'el' => $requestedFile);

    // Create the request options
    $options = array(
        'http' => array(
            'method' => 'POST',
            'content' => http_build_query($data)
        )
    );

    $context = stream_context_create($options);

    // Send GA request
    $result = file_get_contents('https://www.google-analytics.com/collect', false, $context);

    // GA request failed
    if($result === FALSE) { /* Error */ }

    // Requested file does not exist
    if(!file_exists($requestedFile)) { /* Error */ }

    // Set response headers for binary data
    header('Content-Type: application/octet-stream');
    header('Content-Length: ' . filesize($requestedFile));

    // Open the requested file
    $fileHandle = fopen($requestedFile, 'r');

    // Write the requested file to stdout (which is what the client receives)
    print fread($fileHandle, filesize($requestedFile));
    flush();

    // Close the requested file again
    fclose($fileHandle);

    exit;
?>

.htaccess / mod_rewrite规则:

RewriteEngine on
RewriteUrl ^/download/(.*)$download.php?file=$1 [L]

自从我编写了最后一个PHP代码以来,已经很久了,而且我没有对此进行测试.但这应该为如何实施选项1提供一个很好的要点.

编辑2:如果您将跟踪请求发送到www.google-analytics.com/debug/collect,您将收到一些验证信息,告诉您请求是否有效(不过,它不会跟踪事件).

编辑3:
好的,所以我检查了使用analytics.js的页面.该脚本设置以下cookie:

_ga=GA1.3.1788966449.1501761573
_gid=GA1.3.1010429060.1501761573

稍后在收集请求中设置

cid:1788966449.1501761573
_gid:1010429060.1501761573

因此,似乎您需要对_ga cookie中的内容进行一些字符串拆分. (我已经更新了上面的代码)

编辑4:如果有人想知道,这是analytics.js脚本使用上述cookie值生成的请求.

GET https://www.google-analytics.com/collect?v=1&_v=j56&a=1178408574&t=pageview&_s=1&dl=https%3A%2F%2Fdevelopers.google.com%2Fanalytics%2Fdevguides%2Fcollection%2Fanalyticsjs%2Fcommand-queue-reference&ul=de&de=UTF-8&dt=The%20ga%20Command%20Queue%20Reference%20%C2%A0%7C%C2%A0%20Analytics%20for%20Web%20(analytics.js)%20%C2%A0%7C%C2%A0%20Google%20Developers&sd=24-bit&sr=1920x1200&vp=1899x1072&je=0&_u=QDCAAAIhI~&jid=&gjid=&cid=1788966449.1501761573&tid=UA-41425441-2&_gid=1010429060.1501761573&z=1116872044

标签:apache,google-analytics,javascript,php,analytics-js
来源: https://codeday.me/bug/20191111/2017412.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有