/// <summary> /// Track a activity in analytics. /// </summary> /// <param name="activity">Activity to track in analytics.</param> /// <param name="endSession">True if this tracking event should end the session.</param> public void Track(IMeasurementActivity activity, bool endSession = false) { if (activity is AutoTimedEventActivity) { ((AutoTimedEventActivity)activity).End(); } OnTrack(this, activity); var entry = new MeasurementActivityEntry(activity) { CustomDimensions = customDimensions.ToArray(), CustomMetrics = customMetrics.ToArray(), EndSession = endSession }; customDimensions.Clear(); customMetrics.Clear(); if (tracker == null) { queue.Enqueue(entry); } else { tracker.Track(entry); } }
/// <summary> /// Turn an IMeasurementActivity into the key/value pairs necessary for building /// the URI to track with Measurement Protocol. /// </summary> /// <param name="activity">Activity to turn into key/value pairs.</param> /// <returns>Enumerable of key/value pairs representing the activity.</returns> internal IEnumerable<KeyValuePair<string, string>> GetActivityParameters(IMeasurementActivity activity) { if (activity is AppViewActivity) return GetParameters((AppViewActivity)activity); if (activity is ContentViewActivity) return GetParameters((ContentViewActivity)activity); if (activity is CampaignActivity) return GetParameters((CampaignActivity)activity); if (activity is ExceptionActivity) return GetParameters((ExceptionActivity)activity); if (activity is EventActivity) return GetParameters((EventActivity)activity); if (activity is TimedEventActivity) return GetParameters((TimedEventActivity)activity); if (activity is SocialActivity) return GetParameters((SocialActivity)activity); if (activity is TransactionActivity) { var transaction = (TransactionActivity) activity; lastTransaction = transaction; return GetParameters(transaction); } if (activity is TransactionItemActivity) return GetParameters((TransactionItemActivity)activity); Debug.Assert(false, "Unknown Activity type"); return Enumerable.Empty<KeyValuePair<string, string>>(); }
/// <summary> /// Preserves the last transaction seen and carries it forward to subsequent /// transaction items. /// </summary> /// <param name="activity">Current activity being tracked.</param> private void CarryForwardLastTransaction(IMeasurementActivity activity) { if (activity is TransactionActivity) lastTransaction = (TransactionActivity) activity; if (activity is TransactionItemActivity) ((TransactionItemActivity) activity).Transaction = lastTransaction; }
/// <summary> /// Track a activity in analytics. /// </summary> /// <param name="activity">Activity to track in analytics.</param> public void Track(IMeasurementActivity activity) { if (activity is AutoTimedEventActivity) ((AutoTimedEventActivity)activity).End(); sessionManager.Hit(); var trackingUri = tracker.CreateUri(activity); sender(trackingUri); }
/// <summary> /// Carry forward the cd parameter value to future event & timing activities to know which page they occurred on. /// </summary> /// <param name="activity">Current activity being processed.</param> /// <param name="parameters">Current parameters for this request.</param> private void CarryForwardParameters(IMeasurementActivity activity, ICollection <KeyValuePair <string, string> > parameters) { if ((activity is EventActivity || activity is TimedEventActivity) && lastCdParameterValue != null) { parameters.Add(KeyValuePair.Create("cd", lastCdParameterValue)); } if (parameters.Any(k => k.Key == "cd")) { lastCdParameterValue = parameters.First(p => p.Key == "cd").Value; } }
/// <summary> /// Preserves the last transaction seen and carries it forward to subsequent /// transaction items. /// </summary> /// <param name="activity">Current activity being tracked.</param> private void CarryForwardLastTransaction(IMeasurementActivity activity) { if (activity is TransactionActivity) { lastTransaction = (TransactionActivity)activity; } if (activity is TransactionItemActivity) { ((TransactionItemActivity)activity).Transaction = lastTransaction; } }
/// <summary> /// Track a activity in analytics. /// </summary> /// <param name="activity">Activity to track in analytics.</param> /// <param name="endSession">True if this tracking event should end the session.</param> public void Track(IMeasurementActivity activity, bool endSession = false) { if (activity is AutoTimedEventActivity) ((AutoTimedEventActivity)activity).End(); OnTrack(this, activity); var entry = new MeasurementActivityEntry(activity) { CustomDimensions = customDimensions.ToArray(), CustomMetrics = customMetrics.ToArray(), EndSession = endSession }; customDimensions.Clear(); customMetrics.Clear(); if (tracker == null) queue.Enqueue(entry); else tracker.Track(entry); }
/// <summary> /// Carry forward the cd parameter value to future event & timing activities to know which page they occurred on. /// </summary> /// <param name="activity">Current activity being processed.</param> /// <param name="parameters">Current parameters for this request.</param> private void CarryForwardParameters(IMeasurementActivity activity, ICollection<KeyValuePair<string, string>> parameters) { if ((activity is EventActivity || activity is TimedEventActivity) && lastCdParameterValue != null) parameters.Add(KeyValuePair.Create("cd", lastCdParameterValue)); if (parameters.Any(k => k.Key == "cd")) lastCdParameterValue = parameters.First(p => p.Key == "cd").Value; }
/// <summary> /// Turn an IMeasurementActivity into the key/value pairs necessary for building /// the URI to track with Measurement Protocol. /// </summary> /// <param name="activity">Activity to turn into key/value pairs.</param> /// <returns>Enumerable of key/value pairs representing the activity.</returns> internal static IEnumerable <KeyValuePair <string, string> > GetActivityParameters(IMeasurementActivity activity) { if (activity is AppViewActivity) { return(GetParameters((AppViewActivity)activity)); } if (activity is ContentViewActivity) { return(GetParameters((ContentViewActivity)activity)); } if (activity is CampaignActivity) { return(GetParameters((CampaignActivity)activity)); } if (activity is ExceptionActivity) { return(GetParameters((ExceptionActivity)activity)); } if (activity is EventActivity) { return(GetParameters((EventActivity)activity)); } if (activity is TimedEventActivity) { return(GetParameters((TimedEventActivity)activity)); } if (activity is SocialActivity) { return(GetParameters((SocialActivity)activity)); } if (activity is TransactionActivity) { return(GetParameters((TransactionActivity)activity)); } if (activity is TransactionItemActivity) { return(GetParameters((TransactionItemActivity)activity)); } Debug.Assert(false, "Unknown Activity type"); return(Enumerable.Empty <KeyValuePair <string, string> >()); }
/// <summary> /// Create an Measurement Protocol URI from an activity and custom variables. /// </summary> /// <param name="activity">Activity to create a URI for.</param> /// <returns>URI that when requested will track this activity.</returns> public Uri CreateUri(IMeasurementActivity activity) { var parameters = BuildParameterList(activity); var uriBuilder = new UriBuilder(configuration.UseSsl ? secureTrackingEndpoint : trackingEndpoint) { Query = CreateQueryString(parameters) }; return uriBuilder.Uri; }
/// <summary> /// Build a list of the parameters required based on configuration, environment, activity, session, custom variables and state. /// </summary> /// <param name="activity">Activity to include in the parameter list.</param> /// <returns>Enumeration of key/value pairs containing the parameters necessary for this request.</returns> private IEnumerable<KeyValuePair<string, string>> BuildParameterList(IMeasurementActivity activity) { return GetParameters() .Concat(GetParameters(environment)) .Concat(GetParameters(configuration)) .Concat(GetParameters(sessionManager)) .Concat(activityTracker.GetActivityParameters(activity)) .ToList(); }
/// <summary> /// Create a new MeasurementActivityEntry given an activity to capture. /// </summary> /// <param name="activity">Measurement activity to capture.</param> public MeasurementActivityEntry(IMeasurementActivity activity) { Activity = activity; }