С# Категория событий Google Analytics пуста

Я пытаюсь добавить отслеживание событий через свой код С#.

Вот мой код:

Класс GoogleТрекер:

public class GoogleTracker
{
    private string googleURL = "www.google-analytics.com";
    private string googleVersion = "1";
    private string googleTrackingID = "UA-73897840-1";
    private string googleClientID = "efb9a302-9712-40c1-acd2-590764526665";

    public GoogleTracker() { }

    public void trackEvent(string category, string action, string label, string value)
    {
        Hashtable ht = baseValues();

        ht.Add("t", "event");                   // Event hit type
        ht.Add("ec", category);                 // Event Category. Required.
        ht.Add("ea", action);                   // Event Action. Required.
        if (label != null) ht.Add("el", label); // Event label.
        if (value != null) ht.Add("ev", value); // Event value.

        postData(ht);
    }
    public void trackPage(string hostname, string page, string title)
    {
        Hashtable ht = baseValues();

        ht.Add("t", "pageview");                // Pageview hit type.
        ht.Add("dh", hostname);                 // Document hostname.
        ht.Add("dp", page);                     // Page.
        ht.Add("dt", title);                    // Title.

        postData(ht);
    }

    public void ecommerceTransaction(string id, string affiliation, string revenue, string shipping, string tax, string currency)
    {
        Hashtable ht = baseValues();

        ht.Add("t", "transaction");       // Transaction hit type.
        ht.Add("ti", id);                 // transaction ID.            Required.
        ht.Add("ta", affiliation);        // Transaction affiliation.
        ht.Add("tr", revenue);            // Transaction revenue.
        ht.Add("ts", shipping);           // Transaction shipping.
        ht.Add("tt", tax);                // Transaction tax.
        ht.Add("cu", currency);           // Currency code.

        postData(ht);
    }
    public void ecommerceItem(string id, string name, string price, string quantity, string code, string category, string currency)
    {
        Hashtable ht = baseValues();

        ht.Add("t", "item");              // Item hit type.
        ht.Add("ti", id);                 // transaction ID.            Required.
        ht.Add("in", name);               // Item name.                 Required.
        ht.Add("ip", price);              // Item price.
        ht.Add("iq", quantity);           // Item quantity.
        ht.Add("ic", code);               // Item code / SKU.
        ht.Add("iv", category);           // Item variation / category.
        ht.Add("cu", currency);           // Currency code.

        postData(ht);
    }

    public void trackSocial(string action, string network, string target)
    {
        Hashtable ht = baseValues();

        ht.Add("t", "social");                // Social hit type.
        ht.Add("dh", action);                 // Social Action.         Required.
        ht.Add("dp", network);                // Social Network.        Required.
        ht.Add("dt", target);                 // Social Target.         Required.

        postData(ht);
    }

    public void trackException(string description, bool fatal)
    {
        Hashtable ht = baseValues();

        ht.Add("t", "exception");             // Exception hit type.
        ht.Add("dh", description);            // Exception description.         Required.
        ht.Add("dp", fatal ? "1" : "0");      // Exception is fatal?            Required.

        postData(ht);
    }

    private Hashtable baseValues()
    {
        Hashtable ht = new Hashtable();
        ht.Add("v", googleVersion);         // Version.
        ht.Add("tid", googleTrackingID);    // Tracking ID / Web property / Property ID.
        ht.Add("cid", googleClientID);      // Anonymous Client ID.
        return ht;
    }
    private bool postData(Hashtable values)
    {
        string data = "";
        foreach (var key in values.Keys)
        {
            if (data != "") data += "&";
            if (values[key] != null) data += key.ToString() + "=" + HttpUtility.UrlEncode(values[key].ToString());
        }

        using (var client = new WebClient())
        {
            var result = client.UploadString(googleURL, "POST", data);
        }

        return true;
    }
}

Мой класс программы:

static class Program
{
    static void Main()
    {
        GoogleTracker ga = new GoogleTracker();
        ga.trackEvent("Event", "Click", "", "5");
    }
}

Код работает без исключения. Однако, когда я вижу на своей странице отчета (https://analytics.google.com/analytics/ ), моя категория события и действие события все еще пусты. введите здесь описание изображения

Не понимаю, почему нет данных. Есть ли ошибка?


person anhtv13    schedule 17.02.2016    source источник
comment
Как долго вы ждали, чтобы данные отображались в стандартных отчетах, требуется от 24 до 48 часов. Вы пробовали отчеты в реальном времени?   -  person DaImTo    schedule 17.02.2016
comment
Вы пытались проверить попадание перед отправкой? developers.google.com/analytics/devguides/collection/protocol/   -  person DaImTo    schedule 17.02.2016
comment
@DaImTo правда? это так долго. Я ждал несколько минут. Как делать отчеты в реальном времени? У вас есть ссылка?   -  person anhtv13    schedule 17.02.2016
comment
в левом меню прокрутите вверх и найдите в реальном времени -> события   -  person DaImTo    schedule 17.02.2016
comment
@DaImTo Я нашел ссылку с использованием C# только для получения данных и их отображения (daimto.com/googleAnalytics -realtime-csharp). Я хочу отправить (опубликовать) данные в реальном времени. Есть ли пример кода?   -  person anhtv13    schedule 17.02.2016
comment
@DaImTo, как проверить данные перед отправкой? (код С#, пожалуйста). У меня нет опыта в javascript.   -  person anhtv13    schedule 17.02.2016
comment
возможно, отредактировав метод postData() и добавив отладку к вызову и проверив, что он возвращает. Это просто изменение конечной точки вызова.   -  person DaImTo    schedule 17.02.2016
comment
@DaImTo Сегодня я вижу данные в отчете. Да, это занимает так много времени, чтобы показать данные.   -  person anhtv13    schedule 18.02.2016


Ответы (1)


Помните, что для отображения данных в стандартных отчетах может потребоваться от 24 до 48 часов. Для отладки вы можете проверить отчеты в реальном времени, которые покажут вам, получены ли ваши запросы.

Мой метод проверки проверки.

  public static object send(string postData, bool isValidate)
        {
            string url = "http://www.google-analytics.com/collect";
            if (isValidate)
            {
                url = "https://www.google-analytics.com/debug/collect";
            }

            // Create a request using a URL that can receive a post. 
            WebRequest request = WebRequest.Create(url);
            // Set the Method property of the request to POST.

            request.Method = "POST";

            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            // Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length;
            // Get the request stream.
            Stream dataStream = request.GetRequestStream();
            // Write the data to the request stream.
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Close the Stream object.
            dataStream.Close();
            // Get the response.
            WebResponse response = request.GetResponse();
            // Display the status.
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Clean up the streams.
            reader.Close();
            dataStream.Close();
            response.Close();
            try
            {
                return JsonConvert.DeserializeObject<ValidateResponse>(responseFromServer);                
            }
            catch (Exception ex)
            {
                throw new Exception("SendHitFailed",ex);
            }          
        }

Проверить класс ответа

 public class ValidateResponse
    {
        public List<HitParsingResult> hitParsingResult { get; set; }
        public List<ParserMessage2> parserMessage { get; set; }

        public class ParserMessage
        {
            public string messageType { get; set; }
            public string description { get; set; }
            public string messageCode { get; set; }
            public string parameter { get; set; }
        }

        public class HitParsingResult
        {
            public bool valid { get; set; }
            public List<ParserMessage> parserMessage { get; set; }
            public string hit { get; set; }
        }

        public class ParserMessage2
        {
            public string messageType { get; set; }
            public string description { get; set; }
        }
    }
person DaImTo    schedule 17.02.2016
comment
Мой код возвращает true в методе postData; значит ошибки нет, проблема в проводке? А что такое googleURL? Мой googleURL www.google-analytics.com правильный? googleClientID может быть случайным символом? Я вижу, что в примере кода используется 555. - person anhtv13; 17.02.2016
comment
Публикация на google-analytics.com/collect – это фактическая публикация на google-analytics.com/debug/collect — результат отладки. collect всегда возвращает true, он не возвращает ошибок, он просто пытается съесть то, что вы ему отправляете. - person DaImTo; 17.02.2016
comment
cid может быть тем, что вы действительно хотите developers.google.com/ аналитика/руководства разработчика/коллекция/протокол/ - person DaImTo; 17.02.2016