Shiny Google Analytics User Tracking

Hi!

I am developing a Shiny Dashboard and have followed this tutorial (https://shiny.rstudio.com/articles/usage-metrics.html). However, I can't get the script to set a User ID for user tracking. This is the script I have embedded on the header.

// Initial Tracking Code
(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',
  'https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXXXXX-1', 'auto');
ga('send', 'pageview');

// User Tracking Code
$(document).one('shiny:idle', function() {
  ga('set','userId', Shiny.user);
});

Can anyone help me? :slight_smile:

Thanks!

1 Like

You need to set the user ID before you send the pageview. More info at https://developers.google.com/analytics/devguides/collection/analyticsjs/creating-trackers.

Google Analytics Debugger and Tag Assistant (Google) are Chrome add-ins that help see what's going on with the GA tags.

FWIW, I've had better luck tweaking via Google Tag Manager, because this blog https://www.simoahava.com/ is a fantastic resource for GTM.

1 Like

I've been trying to set up user id tracking on a shinyapps.io app with authentication but having no luck.

Does anyone have any example code that works? I tried putting the Shiny.user function before the sending the pageview as suggested above but it still doesn't seem to be working.

Thanks!

It looks like the code from the Rstudio tutorial linked to in the original post is missing a line of GA code. It says:

  • trackingFunction('trackPageView') After setting the username, any events sent to the metrics server will be associated with the username. However, the initial page load occurs before the Shiny.user object is available and before the username is sent to the metrics server. This code tells the metrics server to link the page view to the username.

but the code examples is missing this trackPageView function:

// User Tracking Code
$(document).one('shiny:idle', function() {
  ga('set','userId', Shiny.user);
});

So does anyone know what the trackPageView function should look like? I tried adding

ga('send', 'pageview');

after the set userId function which seems to have worked but I'm not sure if this is best practice for userid tracking.

Thanks.