2009-12-04 7 views
10

Me gustaría recopilar algunas estadísticas sobre el uso de mi aplicación, y como ya tengo estadísticas web en Google Analytics, pensé que sería genial si pudiera enviar una solicitud desde la aplicación que causa un golpe en Analytics, ej.Causa registro de Google Analytics de aplicaciones no web (por ejemplo, a través de WebClient)

/app/v1.0/debug

Esto me permitiría ver la frecuencia con mi aplicación se está iniciando (o lo que sea).

He echado un vistazo en línea y he encontrado algunos ejemplos de personas que hacen cosas similares (algunos dicen que JavaScript está deshabilitado y otros hacen lo mismo que yo), pero ninguno en C#. Traduje el código a través de la mejor manera que pude, pero la he llamado un par de veces hace un par de días, y nada apareció en los registros :(

// 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); 
} 

¿Alguien sabe qué hacer para hacer ¿Este trabajo? Sería incluso mejor si pudiera almacenar la cookie de alguna manera, para que las personas sean consideradas "visitantes recurrentes" cuando ejecuten la aplicación varias veces, pero eso es menos importante.

Respuesta

3

me las arreglé para conseguir este trabajo en el anuncio con una gran cantidad de tocar el violín :)

También ayuda si se quita el filtro que hace que la analítica de no registrar sus propias peticiones (por IP) al probar;)

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(); 
+1

Jaja, me golpeó que mismo problema ... golpeé mi cabeza contra la pared durante varios días, escudriñé todas esas variables, y finalmente recordé que tenía una configuración de filtro para excluir nuestro tráfico :) –

+0

¿Está almacenando las cookies? Estoy almacenando las cookies y parece estar funcionando, almaceno las cookies utma y utmz y las vuelvo a usar más tarde. –

+0

Las únicas cosas que guardé fueron aquellas mencionadas en el código (FirstRun, LastRun, NumberOfRuns). Pareció funcionar, aunque lo saqué cuando abrí el código, así que no duró mucho. –

0

Podría ejecutar un sniffer como WireShark capturará la solicitud GIF de su aplicación y la comparará con un ping 'genuino' de Analytics. Alternativamente, codifique una solicitud genuina __utm.gif en su aplicación con una asignación aleatoria absoluta, realice algunas solicitudes y vea si se muestran páginas vistas.

2

Un proyecto que he publicado en código abierto permite una fácil integración con Google Analytics desde el código nativo .net para activar páginas vistas, eventos, etc. a través del código.

Hace cosas similares a lo que estamos tratando de lograr anterior, excepto que actúa como un buen C# envoltorio sobre el

superior

Se llama GaDotNet y se puede encontrar aquí: http://www.diaryofaninja.com/projects/details/ga-dot-net

+0

gracias por la edición! mis dedos n00b se interpusieron en el camino – Doug

+0

¿Hay algún plan para presionar nuget? – abatishchev

Cuestiones relacionadas