手动将数据发送到Google Analytics

时间:2012-09-29 13:48:57

标签: c# google-analytics

我想知道是否可以通过发送自定义网址请求将谷歌分析跟踪数据发送到谷歌。我假设我可以构建自己的URL并触发一个请求来跟踪事件跟踪:http://google.com/analytics-endpoint?id=UA-34900236-1&event=some_event,我还没有找到任何关于此的文档,并且想知道这是否可能?如果是这样,有人可以指出我正确的文件吗?

感兴趣的人的背景:我目前正在尝试将谷歌分析支持添加到Mono for Android应用程序中。我无法编译任何c#google分析库,因为Mono for Android缺少必需的.net库。

6 个答案:

答案 0 :(得分:20)

作为@ P.T.回答的补充,我想要注意谷歌发布了一个官方API,用于立即向Google Analytics发送数据。这是Google Analytics Measurement Protocol。这可能是最安全的解决方案,因为它是一个“官方”和文档化的API。

答案 1 :(得分:7)

@i.amniels answer的启发,我在Google Analytics Measurement Protocol周围写了一个小包装来跟踪我们网络应用程序服务器端的事件。

Here's a gist您可以开始上课。它只是将发送POST请求的锅炉板代码包装到Google Analytics测量协议端点。

使用该包装器,您将能够写出:

GoogleAnalyticsApi.TrackEvent("Video", "Play", "Vacation 2014")

答案 2 :(得分:4)

是的,您可以直接向Google Analytics执行HTTP请求以跟踪任意应用程序。这就是Android现有的GA库所做的事情(它使用一组非常具体的URL参数发出HTTP_GET请求)。

没有关于使用底层HTTP API作为客户端的官方文档,但是考虑到Web上存在的古老javascript片段的数量以及编译成现有的固定库代码,您可以依赖它非常稳定Android应用程序。 GIF parameter troubleshooting文档解释了分析数据的编码方式。

这是一个为纯Java应用程序提供客户端库的现有项目: http://code.google.com/p/jgoogleanalytics/

如果你想在C#中重新实现它,那么魔术似乎都在这里:http://code.google.com/p/jgoogleanalytics/source/browse/trunk/src/main/java/com/boxysystems/jgoogleanalytics/GoogleAnalytics_v1_URLBuildingStrategy.java

答案 3 :(得分:2)

受到@Oliver回答的启发,我更新了C#代码以更新发送POST数据:

namespace Helpers
{
    using System.Collections.Generic;
    using System.Net.Http;
    using System.Threading.Tasks;

    // More information about API - see https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide
    public class GoogleAnalyticsHelper
    {
        private readonly string endpoint = "https://www.google-analytics.com/collect";
        private readonly string googleVersion = "1";
        private readonly string googleTrackingId; // UA-XXXXXXXXX-XX
        private readonly string googleClientId; // 555 - any user identifier

        public GoogleAnalyticsHelper(string trackingId, string clientId)
        {
            this.googleTrackingId = trackingId;
            this.googleClientId = clientId;
        }

        public async Task<HttpResponseMessage> TrackEvent(string category, string action, string label, int? value = null)
        {
            if (string.IsNullOrEmpty(category))
              throw new ArgumentNullException(nameof(category));

            if (string.IsNullOrEmpty(action))
              throw new ArgumentNullException(nameof(action));

            using (var httpClient = new HttpClient())
            {
                var postData = new List<KeyValuePair<string, string>>()
                {
                    new KeyValuePair<string, string>("v", googleVersion),
                    new KeyValuePair<string, string>("tid", googleTrackingId),
                    new KeyValuePair<string, string>("cid", googleClientId),
                    new KeyValuePair<string, string>("t", "event"),
                    new KeyValuePair<string, string>("ec", category),
                    new KeyValuePair<string, string>("ea", action)
                };

                if (label != null)
                {
                    postData.Add(new KeyValuePair<string, string>("el", label));
                }

                if (value != null)
                {
                    postData.Add(new KeyValuePair<string, string>("ev", value.ToString()));
                }


                return await httpClient.PostAsync(endpoint, new FormUrlEncodedContent(postData)).ConfigureAwait(false);
            }
        }
    }
}

可以在GitHub Gist

找到

用法:

var helper = new GoogleAnalyticsHelper("UA-XXXXXXXXX-XX", "555");
var result = helper.TrackEvent("Orders", "Order Checkout", "OrderId #31337").Result;
if (!result.IsSuccessStatusCode)
{
    new Exception("something went wrong");
}

答案 4 :(得分:1)

是的,这是可能的。因为Google Analytics会存储其所在的每个网页页面请求。这些在左侧菜单的“内容”选项卡下可见,然后查找URL或页面内容。您可以看到列出的每个页面请求。因此,如果您因<a href="more.php?id=8&event=sales">LINK</a>之类的链接而将其解雇,则Google Analytics会存储完整的网址。

但是,您所提供的网址没有指向您的Google Analytics帐户的直接路径,希望得到类似的答案:我认为这是您可以做的最好的。

您可以在每个页面上创建一个字面上都有跟踪代码的页面。这样,Google Analytics就会捕获所有正在发生的事情。然后,您可以将“事件”添加到页面上每个链接的末尾,这样当用户点击链接时,它会重定向到您网站上的相应页面,但它也会记录(在GA Analytics上的链接的href,因为GA会查看页面内的所有内容,包括链接的href值的完整URL。因此,如果您的链接看起来像这样,Google Analytics会记录整个网址,您可以在以后检索该网址:

<a href="page2.php?id=4492&event=clickedCatalog&preference=yellow">Link!</a>

...将在GA中记录完整的网址(page2.php?id=4492&event=clickedCatalog&preference=yellow),您可以在Google Analytics左侧的“上下文”菜单中看到您在网站上访问的网址列表中看到的网址主页。

答案 5 :(得分:0)

除了@ pavel-morshenyuk回答之外,如果您想将该事件与对其进行操作的用户相关联,则下面的代码会将请求映射到Google客户端ID。

 string clientId = Guid.NewGuid().ToString();

 if (Request != null && Request.Cookies != null && Request.Cookies.Get("_ga") != null && Request.Cookies.Get("_ga").Value != null)
 {
    clientId = Request.Cookies.Get("_ga").Value;
    clientId = clientId.Replace("GA1.2.", "");
    clientId = clientId.Replace("GA1.1.", "");
 }

请注意,如果GA更改了内部Cookie跟踪,可能需要进行调整。