Sitecore Analytics 中营销活动的默认行为是,仅当活动应用于访问的第一页时,它们才会应用于访问。这可能是使用该营销活动或通过sc_camp
查询字符串参数标记的登录页面。
我发现这种行为在某些商业场景中有些问题。它也不同于 Google Analytics 处理营销活动的方式。如果用户通过不同的营销活动重新进入网站, Google Analytics 将为用户开始新的访问。
我想在我正在处理的 POC 中模拟 Sitecore Analytics 中的这种行为。我已经通过initializeTracker
管道尝试过这个。我可以成功检测到访问的营销活动的变化,但我无法结束并重新开始访问。我已经尝试过使用Tracker.EndVisit()
和简单地更改访问 ID。两者似乎都没有导致与营销活动相关的新访问。
有谁知道我如何在同一个请求中成功结束上一次访问并开始新的访问?
我正在使用 CMS/DMS 7.1 rev 140130。我当前的代码如下。
using System;
using System.Web;
using Sitecore.Analytics;
using Sitecore.Analytics.Pipelines.InitializeTracker;
using Sitecore.Analytics.Web;
using Sitecore.Configuration;
using Sitecore.Data;
using Sitecore.Web;
namespace ActiveCommerce.Training.PriceTesting.Analytics
{
public class RestartVisitOnNewCampaign : InitializeTrackerProcessor
{
public override void Process(InitializeTrackerArgs args)
{
if (HttpContext.Current == null)
{
args.AbortPipeline();
}
//no need to restart visit if visit is new
if (Tracker.CurrentVisit.VisitPageCount < 1)
{
return;
}
//look for campaign id in query string
Guid campaign;
var campaignStr = WebUtil.GetQueryString(Settings.GetSetting("Analytics.CampaignQueryStringKey")).Trim();
if (string.IsNullOrEmpty(campaignStr) || !Guid.TryParse(campaignStr, out campaign))
{
return;
}
//don't restart if the campaign isn't changing
if (!Tracker.CurrentVisit.IsCampaignIdNull() && Tracker.CurrentVisit.CampaignId == campaign)
{
return;
}
//Tracker.EndVisit(false);
//restart visit by setting new ID
var visitCookie = new VisitCookie();
visitCookie.VisitId = ID.NewID.Guid;
visitCookie.Save();
}
}
}