Вручную отправка данных в 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");
}