2014-05-20 13 views
20

Ich versuche Ereignis zu senden Go google Analytics nach Benutzer registriert ist und vor er ist umgeleitet. Ich verwende Google Tag Manager und univerasl js.Google Analytics Ereignis senden Rückruffunktion

Zuerst versuchte ich data Objekt zu verwenden, wie hier beschrieben: developers.google

Das ist, was meine Funktion aussah:

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

Das Problem ist, dass ich nur etwa 25% erhielt aller Ereignisse, alle anderen sind verloren. Ich weiß nicht, ob und wann ein Ereignis tatsächlich an Google gesendet wird, nachdem ein Objekt zu DataLayer hinzugefügt wurde und ich denke, dass 75% der Ereignisse überhaupt nicht gesendet wurden.

Jetzt versuche ich, einen anderen Ansatz zu implementieren:

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

Aber ga ('send') Funktion keine Rückruf wieder hat!

Wie kann ich sicherstellen, dass das Ereignis tatsächlich an google gesendet wurde, mit DataLayer oder ga ('send')?

+0

Blick auf: http://stackoverflow.com/questions/8147065/google-analytics-async-events-tracking-callback – mdunisch

+0

dort alte Tracker ist, Ich verwende universelle Analytik, es gibt keine _gaq-Funktion –

Antwort

25

bekam es schließlich. Es ist ziemlich kompliziert und nicht in der Dokumentation beschrieben. In meinem Fall verwende ich den Google Tag Manager, daher gab es einige Umgehungslösungen, die ich machen musste, um erfolgreich ein Ereignis auszulösen und einen Rückruf zu erhalten.

Zuerst müssen wir ClientId erhalten, die mit jedem Ereignis erforderlich ist, das an Google-Server gesendet wird. Tatsächlich wird es in Cookies gespeichert, aber Google empfiehlt nicht, es direkt von dort zu nehmen.

Hier ist, wie Google empfiehlt, es zu bekommen, aber das funktioniert nicht, wenn Sie Google Tag Manager verwenden.

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

Stattdessen müssen Sie ClientId von GetAll-Methode abrufen.

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

Nach, müssen Sie

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

Und danach können wir ein Ereignis senden:

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

Danke! FYI, es scheint nicht, als ob "hitCallbackFail" existiert, zumindest nicht mehr? –

+0

nicht sicher - wir mussten auf die Server-Seite senden, weil js Senden ist nicht zuverlässig und verliert Daten –

+0

Danke gespeichert mein Tag :) – percy

1

Aus der Dokumentation: 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 diesem Beispiel konfiguriert der Feldname Objekt sowohl die Seitenparameter sowie die hitCallback Einstellung. Sobald der Tracker Daten gesendet hat, wird dem Benutzer eine Alarmbox angezeigt.

können Sie hitCallback für Veranstaltungen nutzen, Seitenaufrufe etc ..

+1

feuert nicht ... Ich denke, es ist, weil ich Google Tag Manager verwende –

7

Von Google Analytic 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'); 
    } 
}); 

Sie können die hitCallback Funktion für Ihre bearbeiten.

ODER

// 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... 
} 

Hier können Sie Ihre Funktion (criticalCode) in dem obigen Beispiel definieren, die die Daten an Google gesendet Analytic sicherstellen können, und dann mit Ihrem Code arbeiten.

Für viel Verständnis api von analytischen, fyr: https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference

+0

Dies ist ein großes Stück Code, um eine benutzerdefinierte Timeout zu ermöglichen. Nimm niemals an, dass Google online ist :) – Phil

Verwandte Themen