Вручную отправка данных в Google Analytics

Мне было интересно, могу ли я отправить данные отслеживания Google Analytics в Google, отправив пользовательские URL-запросы. Я предположил, что могу создавать свои собственные URL-адреса и запускать запрос на получение событий, отслеживающих что-то вроде этого: http://google.com/analytics-endpoint?id=UA-34900236-1&event=some_event, я не нашел никакой документации об этом, хотя и задавался вопросом, возможно ли это вообще? Если да, может ли кто-нибудь указать мне нужные документы?

Фон для всех, кто заинтересован: в настоящее время я пытаюсь добавить поддержку Google Analytics в приложение Mono для Android. Я не смог собрать любую из библиотек аналитики С# google, потому что в Mono для Android отсутствуют требуемые .net-библиотеки.

Ответы

Ответ 1

В качестве дополнения к @P.T. Ответ Хочу отметить, что Google опубликовал официальный API для отправки данных в Google Analytics. Это Протокол измерения Google Analytics. Это, вероятно, самое безопасное решение, потому что оно является "официальным" и документированным API.

Ответ 2

Вдохновленный @i.amniels answer, я написал небольшую обертку вокруг Google Analytics Протокол измерений для отслеживания событий на стороне сервера нашего веб-приложения.

Вот суть с классом, с которого вы можете начать. Он просто обертывает код плиты котла для отправки запроса POST в конечную точку протокола измерения Google Analytics.

Используя эту оболочку, вы сможете написать следующее:

GoogleAnalyticsApi.TrackEvent("Video", "Play", "Vacation 2014")

Ответ 3

Да, вы можете выполнять HTTP-запросы непосредственно в Google Analytics для отслеживания произвольных приложений. Это то, что делает существующая библиотека GA для Android, например (она выдает запросы HTTP_GET с очень определенным набором параметров URL).

Нет официальной документации для использования базового HTTP API в качестве клиента, но вы можете полагаться на то, что она довольно стабильна, учитывая количество древних фрагментов javascript, лежащих в Интернете, и код фиксированной библиотеки, который скомпилирован в существующую Приложения для Android. Устранение неполадок параметров GIF doc объясняет, как кодируются данные аналитики.

Вот существующий проект, который предоставляет клиентскую библиотеку для чистых приложений Java: http://code.google.com/p/jgoogleanalytics/

Если вы хотите повторно реализовать это на С#, все кажется, что все здесь будет: http://code.google.com/p/jgoogleanalytics/source/browse/trunk/src/main/java/com/boxysystems/jgoogleanalytics/GoogleAnalytics_v1_URLBuildingStrategy.java

Ответ 4

Да, это возможно. Поскольку Google Analytics будет хранить каждый запрос URL-адреса, он включен. Они отображаются на вкладке "Содержимое" в меню слева, затем найдите URL-адрес или содержание страницы. Вы можете просмотреть список всех запрошенных страниц. Поэтому, если вы уволили это из-за ссылки типа <a href="more.php?id=8&event=sales">LINK</a>, Google Analytics сохранит полный URL.

Однако нет прямого маршрута к вашей учетной записи Google Analytics через URL-адрес, который вы предоставили, надеясь получить аналогичный ответ: это лучшее, что вы можете сделать, я думаю.

Вы можете сделать страницу, на которой буквально есть код отслеживания на каждой странице. Таким образом, Google Analytics захватит все происходящее. Затем вы можете добавить свое "событие" в конец КАЖДОЙ ссылки на странице, так что, когда пользователь нажмет на ссылку, она перенаправится на соответствующую страницу вашего сайта, но она также будет записывать (в URL-адресе из href ссылки) в Google Analytics, потому что GA видит все, что происходит внутри страницы, ВКЛЮЧАЯ полный URL-адрес значения href ссылки. Итак, если ваша ссылка выглядит так, Google Analytics будет записывать весь URL-адрес, который вы позже можете получить:

<a href="page2.php?id=4492&event=clickedCatalog&preference=yellow">Link!</a>

... будет записывать полный URL-адрес (page2.php?id=4492&event=clickedCatalog&preference=yellow) в GA, который вы можете увидеть в списке URL-адресов, посещенных на вашем сайте, щелкнув меню "Контекст" в левой части главной страницы Google Analytics,

Ответ 5

Вдохновленный ответом @Oliver, я обновил код С#, чтобы быть более актуальным при отправке данных POST:

namespace Helpers
{
    using System.Collections.Generic;
    using System.Net.Http;
    using System.Threading.Tasks;

    // More information about API - see https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide
    public class GoogleAnalyticsHelper
    {
        private readonly string endpoint = "http://www.google-analytics.com/collect";
        private readonly string googleVersion = "1";
        private readonly string googleTrackingId; // UA-XXXXXXXXX-XX
        private readonly string googleClientId; // 555 - any user identifier

        public GoogleAnalyticsHelper(string trackingId, string clientId)
        {
            this.googleTrackingId = trackingId;
            this.googleClientId = clientId;
        }

        public async Task<HttpResponseMessage> TrackEvent(string category, string action, string label, int? value = null)
        {
            if (string.IsNullOrEmpty(category))
              throw new ArgumentNullException(nameof(category));

            if (string.IsNullOrEmpty(action))
              throw new ArgumentNullException(nameof(action));

            using (var httpClient = new HttpClient())
            {
                var postData = new List<KeyValuePair<string, string>>()
                {
                    new KeyValuePair<string, string>("v", googleVersion),
                    new KeyValuePair<string, string>("tid", googleTrackingId),
                    new KeyValuePair<string, string>("cid", googleClientId),
                    new KeyValuePair<string, string>("t", "event"),
                    new KeyValuePair<string, string>("ec", category),
                    new KeyValuePair<string, string>("ea", action)
                };

                if (label != null)
                {
                    postData.Add(new KeyValuePair<string, string>("el", label));
                }

                if (value != null)
                {
                    postData.Add(new KeyValuePair<string, string>("ev", value.ToString()));
                }


                return await httpClient.PostAsync(endpoint, new FormUrlEncodedContent(postData)).ConfigureAwait(false);
            }
        }
    }
}

Можно найти на GitHub Gist

Использование:

var helper = new GoogleAnalyticsHelper("UA-XXXXXXXXX-XX", "555");
var result = helper.TrackEvent("Orders", "Order Checkout", "OrderId #31337").Result;
if (!result.IsSuccessStatusCode)
{
    new Exception("something went wrong");
}