web-dev-qa-db-fra.com

google analytics envoyer la fonction de rappel d'événement

J'essaie d'envoyer l'événement go google analytics après que l'utilisateur est enregistré et avant qu'il soit redirigé. J'utilise Google Tag Manager et univerasl js.

Tout d'abord, j'essayais d'utiliser l'objet dataLayer , comme décrit ici: developers.google

Voilà à quoi ressemblait ma fonction:

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

Le problème est que je recevais environ 25% de tous les événements, tous les autres sont perdus . Je ne sais pas si et quand l'événement est réellement envoyé à Google après avoir ajouté un objet à dataLayer et je pense que 75% des événements n'ont pas été envoyés du tout.

J'essaie maintenant de mettre en œuvre une autre approche:

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

Mais ga ('envoyer') n'a plus de fonction de rappel!

Comment puis-je m'assurer que l'événement a bien été envoyé à Google, en utilisant dataLayer ou ga ('envoyer')?

25
Prosto Trader

Je l'ai finalement eu. C'est assez compliqué et non décrit dans la documentation. Dans mon cas, j'utilise Google Tag Manager, il y a donc quelques solutions que j'ai dû faire pour réussir à déclencher un événement et à obtenir un rappel.

Tout d'abord, nous devons obtenir ClientId , ce qui est requis pour tout événement envoyé aux serveurs Google. En fait, il est conservé dans les cookies, mais Google ne recommande pas de le prendre directement à partir de là.

Voici comment Google recommande de l'obtenir, mais cela ne fonctionnera pas si vous utilisez Google Tag Manager.

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

Au lieu de cela, vous devez obtenir ClientId à partir de la méthode getAll.

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

Après, vous devez créer un nouveau tracker

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

Et après cela, nous pouvons envoyer un événement:

 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
   }
});
32
Prosto Trader

Depuis le document Google Analytic 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');
  }
});

Vous pouvez modifier la fonction hitCallback pour la vôtre.

OR

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

Ici, vous pouvez définir votre fonction (criticalCode) dans l'exemple ci-dessus qui peut garantir les données envoyées à Google Analytic, puis travailler avec votre code.

Pour une meilleure compréhension de l'api analytique, fyr: https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference

6
Bee Bee Dan

À partir des documents: 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');
}
});

Dans cet exemple, l'objet nom de champ configure à la fois le paramètre de page, ainsi que la définition de hitCallback. Une fois que le tracker a terminé l'envoi des données, une boîte d'alerte s'affiche pour l'utilisateur.

Vous pouvez utiliser hitCallback pour les événements, les pages vues, etc.

2
Mike