Причина. Журнал Google Analytics из не-веб-приложения (например, через WebClient)

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

/app/v1.0/debug

Это позволит мне увидеть, как часто мое приложение запускается (или что-то еще).

Я посмотрел онлайн и нашел несколько примеров того, как люди занимаются подобными вещами (некоторые из них работают, а Javascript отключается, а другие делают то же, что и я), но ни один из них в С#. Я перевел код как можно лучше, но я несколько раз его вызывал пару дней назад, и ничего не появилось в журналах: (

// Send a hit to Google Analytics so we can track which versions are being used
Random rnd = new Random();
int cookie = rnd.Next(10000000, 99999999);
string statsRequest = "http://www.google-analytics.com/__utm.gif" +
    "?utmwv=4.3" +
    "&utmn=" + rnd.Next(10000) + // Used only to stop browser caching
    "&utmhn=myhost.com" + // Hostname
    //"&utmhid=<random#>" +
    "&utmr=-" + // Referer
    "&utmp=/app/v0.4/DEBUG/Test" + // Requested page
    "&utmac=UA-123456-7" + // Google Analytics ID
    "&utmcc=__utma%3D" + cookie + "3B%2B__utmz%3D" + cookie + "%3B";

using (var client = new WebClient())
{
    client.DownloadData(statsRequest);
}

Кто-нибудь знает, что делать, чтобы сделать эту работу? Было бы еще лучше, если бы я мог каким-то образом сохранить файл cookie, чтобы люди считались "возвращающимися посетителями", когда они запускали приложение несколько раз, но это менее важно.

Ответ 1

Мне удалось заставить это работать в объявлении с множеством возиться:)

IT также помогает, если вы удалите фильтр, который заставляет аналитику не регистрировать ваши собственные запросы (по IP) при тестировании;)

Random rnd = new Random();

long timestampFirstRun, timestampLastRun, timestampCurrentRun, numberOfRuns;

// Get the first run time
timestampFirstRun = Settings.Default.FirstRun;
timestampLastRun = Settings.Default.LastRun;
timestampCurrentRun = GetEpochTime();
numberOfRuns = Settings.Default.NumberOfRuns + 1;

// If we've never run before, we need to set the same values
if (numberOfRuns == 1)
{
    timestampFirstRun = timestampCurrentRun;
    timestampLastRun = timestampCurrentRun;
}

// Some values we need
string domainHash = "123456789"; // This can be calcualted for your domain online
int uniqueVisitorId = rnd.Next(100000000, 999999999); // Random
string source = "source";
string medium = "medium";
string sessionNumber = "1";
string campaignNumber = "1";
string culture = Thread.CurrentThread.CurrentCulture.Name;
string screenRes = Screen.PrimaryScreen.Bounds.Width + "x" + Screen.PrimaryScreen.Bounds.Height;

#if DEBUG
string requestPath = "%2FAppStartup%2FDEBUG%2F" + SettingsWrapper.CurrentVersion.ToString(2);
string requestName = "AppStartup%20(Debug)%20v" + SettingsWrapper.CurrentVersion.ToString(2);
#else
string requestPath = "%2FAppStartup%2FRELEASE%2F" + SettingsWrapper.CurrentVersion.ToString(2);
string requestName = "AppStartup%20v" + SettingsWrapper.CurrentVersion.ToString(2);
#endif

string statsRequest = "http://www.google-analytics.com/__utm.gif" +
    "?utmwv=4.6.5" +
    "&utmn=" + rnd.Next(100000000, 999999999) +
    "&utmhn=hostname.mydomain.com" +
    "&utmcs=-" +
    "&utmsr=" + screenRes +
    "&utmsc=-" +
    "&utmul=" + culture +
    "&utmje=-" +
    "&utmfl=-" +
    "&utmdt=" + requestName +
    "&utmhid=1943799692" +
    "&utmr=0" +
    "&utmp=" + requestPath +
    "&utmac=UA-123656-7" + // Account number
    "&utmcc=" +
        "__utma%3D" + domainHash + "." + uniqueVisitorId + "." + timestampFirstRun + "." + timestampLastRun + "." + timestampCurrentRun + "." + numberOfRuns +
        "%3B%2B__utmz%3D" + domainHash + "." + timestampCurrentRun + "." + sessionNumber + "." + campaignNumber + ".utmcsr%3D" + source + "%7Cutmccn%3D(" + medium + ")%7Cutmcmd%3D" + medium + "%7Cutmcct%3D%2Fd31AaOM%3B";

using (var client = new WaveWebClient())
{
    client.DownloadData(statsRequest);
}

// Now save some of the values
Settings.Default.NumberOfRuns = numberOfRuns;
Settings.Default.FirstRun = timestampFirstRun;
Settings.Default.LastRun = timestampCurrentRun;
Settings.Default.Save();

Ответ 2

Проект, который я выпустил под открытым исходным кодом, позволяет легко интегрировать с Google Analytics из собственного кода .net для защиты просмотров страниц, событий и т.д. с помощью кода.

Это похоже на то, что вы пытаетесь достичь выше, за исключением того, что оно действует как хорошая оболочка С# поверх

Он называется GaDotNet и может быть найден здесь: http://www.diaryofaninja.com/projects/details/ga-dot-net

Ответ 3

Вы можете запустить sniffer, например WireShark, для захвата запроса GIF из вашего приложения и сравнить его с "подлинной" проверкой Google Analytics. В качестве альтернативы, жесткий код представляет собой подлинный запрос __utm.gif в ваше приложение с ранним рандомизацией utmn, сделайте несколько запросов и посмотрите, отображаются ли просмотры страниц.