2015-03-18 48 views
9

Ho una situazione particolare in cui i visitatori dei siti possono accedere alla pagina da un determinato dominio ma non altri. Quindi HTML e risorse non sono un problema finché sono archiviati sul server. Google Analytics d'altra parte richiede il download di analytics.js dai server di Google, che è impossibile.Proxy Google Analytics

Quindi sto cercando un modo per proxy questo. Il server web stesso ha accesso a Internet e potrebbe inoltrare il traffico. Per segnalare a Google la mia visualizzazione di pagina, viene scaricato un GIF a pixel singolo da Google, descritto qui: https://developers.google.com/analytics/resources/concepts/gaConceptsTrackingOverview

Penso che sarebbe facile ottenere tutti i parametri nella GIF e utilizzare il protocollo di misurazione da segnalare a Google dal server - ma il duro è ottenere tutte queste informazioni sul server. Scaricare analytics.js e modificarlo per andare al mio server mi sembra un hack che non è affatto una prova futura. Ottenere la pagina corrente dall'utente dal server non è un grosso problema, ma vorremmo ottenere l'ID utente, la versione del browser e tutto ciò che ottieni con Analytics.

Come lo faresti? Trovi una soluzione per questo?

+0

Ci vorrà un po 'prima che io possa rispondere (questo richiede spiegazioni e sono al lavoro in questo momento), ma per il momento che le informazioni nel tuo collegamento sono obsolete. La versione corrente del client javascript di GA è essa stessa basata sul protocollo di misurazione e quindi invia i dati all'endpoint del protocollo di misurazione (che restituisce comunque una gif) e i nomi dei parametri sono cambiati. –

+0

Ok, buono a sapersi! Non vedo l'ora di ricevere ulteriore aiuto da te in seguito :) Grazie mille. –

+0

Solo per curiosità, hai mai usato questo in produzione e come ha funzionato? –

risposta

15

Come indicato nel mio commento, utm.gif non è più utilizzato. Google Analytics è completamente passato al Measurement Protocol e i dati vengono ora inviati all'Endpoint per il Measurement Protocol su google-analytics.com/collect. In realtà questo restituisce ancora un pixel trasparente poiché chiamare un'immagine con parametri è un modo attendibile per trasmettere informazioni attraverso i confini del dominio.

Ora, è possibile solo il protocollo di misurazione per implementare il proprio tracker di Google Analytics.

Per quote myself:

Ogni chiamate comprende almeno l'ID dell'account che si desidera inviare i dati a, un ID client che permette di interazioni di gruppo in sessioni (quindi dovrebbe essere unico per visitatore , ma non deve identificare personalmente un utente ), un tipo di interazione (visualizzazione di pagina, evento, tempistica ecc., alcuni tipi di interazioni richiedono parametri aggiuntivi) e la versione di il protocollo che si sta utilizzando (al momento ce n'è solo uno versione).

Quindi l'esempio più semplice per registrare una pagina visualizzata sarebbe simile a questa:

www.google-analytics.com/collect/v=1 & tid = UA-XXXXY & cid = 555 & t = pagine visualizzate & dp =% 2Fmypage

Probabilmente si vorrà aggiungere l'IP dell'utente (che verrà reso anonimo automaticamente) e il programma utente.

Tuttavia, sembra che preferiate utilizzare il codice standard di Analytics per raccogliere i dati e inoltrare la chiamata di tracciamento tramite il vostro server. Mentre non ho usato quanto segue in produzione, non vedo alcun motivo per cui non funzionerebbe.

Per prima cosa è necessario il file analytics.js. Il self-hosting del file è sconsigliato, ma il motivo dato è che il codice viene aggiornato a volte da Google e se lo ospiterai da solo potresti perdere gli aggiornamenti. Questo può essere risolto impostando un processo cron che scarica regolarmente il file sul tuo server in modo da avere sempre una versione corrente.

successivo si sarebbe adattare la funzione di bootstrap GA per caricare il codice dal tuo server:

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
    })(window,document,'script','//www.myserver.com/analytics.js','ga'); 

Ora avete il codice, ma la chiamata di monitoraggio sarà comunque inviato al server di analisi (cioè in il tuo caso non verrà inviato affatto). Quindi è necessario reinstradare la chiamata tramite il proprio server.

Per rendere possibile il codice Google (Universal) Analytics ha un feature called "tasks". Le attività sono funzioni all'interno del codice di monitoraggio in cui viene assemblata la chiamata di rilevamento.

È possibile modificare le attività utilizzando la funzione "set" dell'oggetto tracker, utilizzando il taskname come parametro e passando una funzione che sovrascrive/sovraccarica la funzione task.

Di seguito è più o meno l'esempio dalla documentazione di Google (ad eccezione ho omesso la parte in cui i dati sono ancora in fase di inviato a Google - non hai bisogno di questo, a questo punto):

ga('create', 'UA-XXXXX-Y', 'auto'); 

ga(function(tracker) { 

    tracker.set('sendHitTask', function(model) { 
    var payLoad = model.get('hitPayload'); 
    var gifRequest = new XMLHttpRequest(); 
    var gifPath = "/__ua.gif"; 
    gifRequest.open('get', gifPath + '?' + payLoad, true); 
    gifRequest.send(); 
    }); 
}); 

ga('send', 'pageview'); 

Ora questo invia i dati a un file chiamato __ua.gif sul tuo server (se hai bisogno di inviare dati tra domini puoi semplicemente fare una var ua = nuova immagine; ua.src = gifPath + '?' + payLoad per creare un'immagine richiesta).

Il parametro del modello per la funzione sendHitTask contiene (a parte un sacco di spese generali) il payload, ovvero la stringa di query assemblata che contiene i dati di analisi. Puoi quindi creare il tuo _ua.gif uno script che trasmette la richiesta a google-analytics.com/collect.

A questo punto il programma utente sarà lo script e l'indirizzo IP sarà quello del server, quindi è necessario includere & UIP (User Override IP) e & UC parametri (User agent di override) (https://groups.google.com/forum/#!msg/google-analytics-measurement-protocol/8TAp7_I1uTk/KNjI5IGwT58J) per ottenere informazioni geografiche e tecniche.

Se vi sentite più avventurosi è possibile ignorare la buildHitTask invece e cercare e aggiungere i parametri aggiuntivi lì (più fastidio, probabilmente da quando avresti bisogno di ottenere l'indirizzo IP da qualche parte).

Per ulteriori parametri vedere il riferimento per analytics.js e Measurement Protocol.

+0

Che ottima risposta! Grazie mille. Leggerò un po 'di più sulle attività e vedremo se riuscirò a risolvere questo problema :) –

+0

Un problema che mi viene in mente ora è che è difficile impostare un timeout: per gli utenti mobili 1s non è molto, e se io aumentalo, alcuni record andranno persi. Proverò a caricare analytics.js prima con AJAX, e se riuscirà a farlo, eseguirò il normale snippet (se sono fortunato il browser lo metterà in cache e non lo scaricherà due volte). –