Context
Phase 1 adds basic GA4 page-view tracking to all Shiny apps via google-analytics.html. Phase 2 adds server-side custom events for richer analytics.
Implementation
Add a Shiny custom message handler to each app's google-analytics.html:
Shiny.addCustomMessageHandler('ga_event', function(data) {
gtag('event', data.name, data.params);
});
In server.R, fire events on key interactions:
# track tab switches
observeEvent(input$main_tab, {
session$sendCustomMessage("ga_event", list(
name = "tab_view",
params = list(tab_name = input$main_tab)
))
})
# track query/filter changes
observeEvent(input$run_query, {
session$sendCustomMessage("ga_event", list(
name = "query_run",
params = list(
dataset = input$dataset,
lat_min = input$lat_min,
date_min = input$date_min
)
))
})
Priority
Start with int-app (most used). Events appear in GA4 → Reports → Engagement → Events.
Reference
Context
Phase 1 adds basic GA4 page-view tracking to all Shiny apps via
google-analytics.html. Phase 2 adds server-side custom events for richer analytics.Implementation
Add a Shiny custom message handler to each app's
google-analytics.html:In
server.R, fire events on key interactions:Priority
Start with
int-app(most used). Events appear in GA4 → Reports → Engagement → Events.Reference