2014-05-20 14 views
20

Sto tentando di inviare eventi go google analytics dopo che l'utente è registrato e prima del viene reindirizzato. Sto utilizzando Google Tag Manager e univerasl js.google analytics invia la funzione callback dell'evento

In primo luogo, stavo cercando di usare dataLayer oggetto, come descritto qui: developers.google

Questo è ciò che la mia funzione sembrava:

//Registering new user via ajax 
$.ajax('/register/', { 
    success: function() { 

     //Pushing event to dataLayer 
     dataLayer.push({ 
       'Category': 'Registration Process', 
       'event': 'Registration Submit Btn' 
      }); 

     //Logging in new user and redirecting the page with a timeout 
     setTimeout(function(){ 
      loginAction(); 
     }, 500) 
    } 
}) 

Il guaio è che stavo ricevendo solo circa il 25% di tutti gli eventi, tutti gli altri sono persi. Non so se e quando l'evento verrà effettivamente inviato a Google dopo aver aggiunto l'oggetto a dataLayer e penso che il 75% degli eventi non sia stato inviato affatto.

Ora sto cercando di attuare un altro approccio:

//Registering new user via ajax 
$.ajax('/register/', { 
    success: function() { 

     //Sending event through ga('send') 
     parent.ga('send', 'event', 'Registration Process', 'Registration Submit Btn'); 

     //Logging in new user and redirecting the page with a timeout 
     setTimeout(function(){ 
      loginAction(); 
     }, 500) 
    } 
}) 

Ma ga ('inviare') non ha ancora alcuna funzione di callback!

Come faccio a essere sicuro che l'evento sia stato effettivamente inviato a google, utilizzando dataLayer o ga ('invia')?

+0

un'occhiata a: http://stackoverflow.com/questions/8147065/google-analytics-async-events-tracking-callback – mdunisch

+0

c'è vecchio inseguitore, Sto usando l'analisi universale, non c'è la funzione _gaq –

risposta

25

finalmente capito. È piuttosto complicato e non descritto nei documenti. Nel mio caso, utilizzo Google Tag Manager, quindi ho trovato alcuni rimedi da fare per ottenere correttamente un evento e richiamare.

In primo luogo, dobbiamo ottenere ClientId, che è richiesto con qualsiasi evento inviato ai server di Google. In realtà è conservato nei cookie, ma Google non consiglia di prenderlo direttamente da lì.

Ecco come Google consiglia di procurarselo, ma questo non funzionerà se si utilizza Google Tag Manager.

ga(function(tracker) { 
     var clientId = tracker.get('clientId'); 
}); 

Invece, è necessario ottenere ClientId dal metodo getAll.

var clientId = ga.getAll()[0].get('clientId'); 

Dopo, è necessario creare nuovo inseguitore

ga('create', 'UA-XXX-YYY', { 
     'clientId': clientId 
    }); 

E dopo che possiamo inviare un evento:

ga('send', 'event', { 
    'eventCategory': 'YOUR Category Name', //required 
    'eventAction': 'YOUR Action name', //required 
    'eventLabel': 'YOUR Label', 
    'eventValue': 1, 
    'hitCallback': function() { 
     console.log('Sent!!'); 
     //callback function 
    }, 
    'hitCallbackFail' : function() { 
     console.log("Unable to send Google Analytics data"); 
     //callback function 
    } 
}); 
+1

Grazie! Per tua informazione, non sembra che "hitCallbackFail" esista, almeno più? –

+0

non sono sicuro - abbiamo dovuto passare all'invio sul lato server, perché l'invio js non è affidabile e perde i dati –

+0

Grazie salvato la mia giornata :) – percy

1

Dalla documentazione: https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced#hitCallback

ga('send', 'pageview', { 
    'page': '/my-new-page', 
    'hitCallback': function() { 
    alert('analytics.js done sending data'); 
} 
}); 

In questo esempio, l'oggetto nome del campo configura sia il parametro della pagina, così come impostare la hitCallback. Una volta che il tracker ha completato l'invio dei dati, verrà visualizzata una finestra di avviso per l'utente.

È possibile utilizzare hitCallback per eventi, pagine viste, ecc ..

+1

non attiva ... Immagino, è perché sto usando Google Tag Manager –

7

Da Google Analytics doc https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#hitCallbackNews

// Alerts the user when a hit is sent. 
ga('send', 'pageview', { 
    'hitCallback': function() { 
    alert('hit sent'); 
    } 
}); 

È possibile modificare la funzione hitCallback per la propria.

O

// Use a timeout to ensure the execution of critical application code. 
ga('send', 'pageview', {'hitCallback': criticalCode}); 
setTimeout(criticalCode, 2000); 

// Only run the critical code once. 
var alreadyCalled = false; 
function criticalCode() { 
    if (alreadyCalled) return; 
    alreadyCalled = true; 

    // Run critical code here... 
} 

Qui è possibile definire la funzione (criticalCode) nell'esempio di cui sopra in grado di garantire i dati inviati a Google Analytics e poi lavorare con il codice.

Per gran api comprensione analitica, FYR: https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference

+0

Questo è un bel po 'di codice per consentire un timeout personalizzato. Mai dare per scontato che google sia online :) – Phil