AnalyticsTracker是一种实用程序,旨在使从ASP.NET应用程序和Google Analytics和Google Tag Manager跟踪数据变得更加容易
安装AnalyticsTracker很简单。将其从Nuget安装到您的项目中。
在模板中,添加以下<body>以后呈现跟踪脚本
@using Vertica.AnalyticsTracker
...
<body>
@AnalyticsTracker.Render("UA-xxxxxx-1")
...
</body>
<%@ Import Namespace="Vertica.AnalyticsTracker" %>
...
<body>
<%= AnalyticsTracker.Render("UA-xxxxxx-1") %>
...
</body>
您可以使用Render()方法的过载来调整跟踪器的设置。
@AnalyticsTracker.Render(
account: "UA-xxxxxx-1",
trackDefaultPageview: true,
displayFeatures: false,
trackerConfiguration: new Dictionary<string, object>
{
{"cookieDomain", "foo.example.com"},
{"cookieName", "myNewName"},
{"cookieExpires", 20000}
});
AnalyticsTracker还可以从AJAX请求跟踪数据。为了激活此功能,将Vertica.AnalyticsTracker.Modules.AnalyticsHttpModule添加到您的应用程序中。然后,对于您要跟踪的请求, AnalyticsTracker-Enabled HTTP请求标头设置为true 。
然后,响应将包括跟踪JS代码作为基本64编码标头。
我们在文件 /scripts /Scripts/analyticstracker.adapters.js中包括了jQuery和angular的Ajax拦截器,您可以将其包含在您的网站中。确保在框架之后包含它。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.12/angular.min.js"></script>
<script src="/Scripts/analyticstracker.adapters.js"></script>
AnalyticsTracker旨在提供SOM明智的默认值,并让您在需要的情况下覆盖一些高级设置。
如果要跟踪与浏览器中的浏览量的网址不同的网址,则可以通过设置当前跟踪器的页面来覆盖它
AnalyticsTracker.Current.SetPage("/my/custom/url");
默认情况下,AnalyticsTracker将输出基本的跟踪代码,并跟踪标准页面浏览量。当您想跟踪其他数据时,您将commands添加到当前跟踪器。
在这里,我们正在跟踪控制器的活动
public ActionResult About()
{
AnalyticsTracker.Current.Track(new EventCommand("category", "action", "label"));
ViewBag.Message = "Your application description page.";
return View();
}
跟踪电子商务交易的命令可以像这样使用:
var transaction = new TransactionInfo(
id: "order1001",
affiliation: string.Empty,
revenue: 100,
shipping: 10,
tax: 5,
currency: AnalyticsCurrency.USD);
transaction.AddItem(
name: "Black shirt",
sku: "sh001",
category: "Shirts",
price: 50,
quantity: 2);
AnalyticsTracker.Current.Track(new TransactionCommand(transaction));
如果您在帐户中启用了增强的电子商务跟踪,则应使用这些命令来跟踪您的交易:
var purchaseAction = new PurchaseActionFieldObject(
id: "order1001",
affiliation: string.Empty,
revenue: 100,
shipping: 10,
tax: 5,
coupon: null);
var lineItems = new []
{
new ProductFieldObject(
id: "sh001",
name: "Black shirt",
brand: "Northwind",
category: "Shirts",
variant: null,
price: 50,
quantity: 2,
coupon: null,
position: 1)
};
AnalyticsTracker.Current.Track(new PurchaseCommand(purchaseAction, lineItems));
跟踪电子商务时,您可能还想在跟踪器上设置货币
增强的电子商务还可以让您跟踪许多其他内容。这些命令位于Vertica.AnalyticsTracker.Commands.EnhancedEcommerce名称空间:
AddToBasketCommand(...)
RemoveFromBasketCommand(...)
CheckoutCommand(...)
CheckoutOptionCommand(...)
ProductClickCommand(...)
ProductDetailCommand(...)
ProductListCommand(...)
您要做的一个典型的事情是确保例如,即使用户重新加载页面,交易也只能跟踪一次。您应该从服务器中跟踪这一点,但是通常还会出现用户使用返回按钮的问题,或者浏览没有实际服务器交互的页面等。
输入CookieGuardedCommand :
AnalyticsTracker.Current.Track(new CookieGuardedCommand(innerCommand, "order12345"));
将您的命令包裹在CookieGuardedCommand中会在这样的if中呈现内部命令:
if (document.cookie.search(/AnalyticsTrackerGuardorder12345=true/) === -1) {
ga('send', {'hitType': 'event','eventCategory': 'cat','eventAction': 'act','eventLabel': ''});
document.cookie = 'AnalyticsTrackerGuardorder12345=true; Expires=' + new Date(2016, 05, 02).toUTCString();
}
如果同一JavaScript执行两次,这将确保命令不会再次执行。例如,用户将订单ID作为命令ID,以确保Cookie仅针对该特定顺序设置。
有时,您没有任何服务器交互的事件。例如,单击图像将其缩小。在这种情况下,您可以使用AnalityCstracker生成所需的脚本:
<a href="#" onmousedown="@AnalyticsTracker.ClientCommand(new EventCommand("category", "action", "label"))">
<img src="..."/>
</a>
在模板中,添加以下<body>以后呈现跟踪脚本
@using Vertica.AnalyticsTracker
...
<body>
@TagManager.Render("GTM-XXYYY")
...
</body>
<%@ Import Namespace="Vertica.AnalyticsTracker" %>
...
<body>
<%= TagManager.Render("GTM-XXYYY") %>
...
</body>
如果需要,您可以使用以下方式渲染Google标签管理器(脚本,NoScript和Datalayer)的各个部分:
TagManager.RenderScript()TagManager.RenderNoScript()TagManager.RenderDataLayer()您可以使用Render()方法的过载来调整标签的设置。
@TagManager.Render(account:"GTM-XXYYY", dataLayerName: "myLayer");
使用TagManager可让您轻松地向dataLayer变量进行信息。
TagManager.Current.AddMessage(new Variable("myVariable", "myValue"));
这将生成以下datalayer
<script>
var dataLayer = dataLayer || [];
dataLayer.push({'myVariable': 'myValue'});
</script>
有时您可能需要在数据层中添加更多复杂的对象,并且使用字典来支持
var dict = new Dictionary<string, object>
{
{"myProp", "myValue"},
{"yourProp", 12345}
};
TagManager.Current.AddMessage(new Variable("myVariable", dict));
然后,词典将被渲染为一个深对象
<script>
var dataLayer = dataLayer || [];
dataLayer.push({'myVariable': {'myProp': 'myValue','yourProp': 12345}});
</script>
使用TransactionMessage,可以通过Datalayer发送订单信息:
var items = new[]
{
new TransactionItemInfo(
name: "Black shirt",
sku: "sh001",
category: "Shirts",
price: 50,
quantity: 2)
};
var message = new TransactionMessage(
transactionId: "order1001",
affiliation: string.Empty,
total: 100,
tax: 5,
shipping: 10,
items: items);
TagManager.Current.AddMessage(message);
该订单将根据GTM规格渲染:
<script>
var dataLayer = dataLayer || [];
dataLayer.push(
{
'transactionId': 'order1001',
'transactionAffiliation': '',
'transactionTotal': 100,
'transactionTax': 5,
'transactionShipping': 10,
'transactionProducts': [
{
'name': 'Black shirt',
'sku': 'sh001',
'category': 'Shirts',
'price': 50,
'quantity': 2
}
]
});
</script>