metro Analytics

只实现了TrackEvent 其他的同理
string CommitUrl = "http://www.google-analytics.com/__utm.gif";
const string UAID = "UA-00000000-0";

public static void TrackEvent(string category, string action, string label)
        {
            //存 提交数据的集合
            Dictionary<string, string> parameters = new Dictionary<string, string>();

            //定义请求的类型,为其中之一:event、transaction、item、custom variable。如果GIF请求中不包含这些值,则请求类型为page。
            parameters.Add("utmt", "event");

            //扩展参数
            parameters.Add("utme", string.Format("5({0}*{1}*{2})", category, action, label));

            //用于区别不同帐号的字串,所有请求中都有  uid
            parameters.Add("utmac", UAID);

            //用来生成cookie
            int tmp = (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;

            //拼接Cookie字符串
            string temp = string.Format("__utma=1.{0}.{1}.{2}.{3}.{4};+__utmz=1.{3}.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);",
                   tmp, tmp, tmp, tmp, 1); ;

            //Cookie 值,这个请求参数发送所有的cookie请求
            parameters.Add("utmcc", temp);

            //提交数据
            SendData(CommitUrl, parameters);
        }

private static void SendData(string url, Dictionary<string, string> parameters)
        {
            //用来存放GET提交的数据
            StringBuilder data = new StringBuilder();

            //遍历parameters 赋值data
            foreach (var parameter in parameters)
            {
                data.Append(string.Format("{0}={1}&", parameter.Key, Uri.EscapeDataString(parameter.Value)));
            }

            //创建实例
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("{0}?{1}", url, data));

            //异步提交数据
            request.GetResponseAsync().ContinueWith(task =>
            {
                try
                {
                    if (task.IsFaulted && task.Exception != null)
                    {
                        throw task.Exception;
                    }
                    else if (task.IsFaulted)
                    {
                        //TODO
                    }
                }
                catch (Exception)
                {
                }
                finally
                {
                    //释放资源
                    if (!task.IsFaulted && task.Result != null)
                    {
                        var disposableResult = task.Result as IDisposable;
                        if (disposableResult != null)
                        {
                            disposableResult.Dispose();
                        }
                    }
                }
            });
        }

猜你喜欢

转载自baron-unsafe.iteye.com/blog/1851346