Google Analytics in Electron Apps

Das Electron Framework wird genutzt, um plattformübergreifende Desktopanwendungen mittels JavaScript, HTML und CSS zu entwickeln. Anwendungen wie MS Teams, oder MS Visual Studio Code sind bekannte Vertreter.

Auf den ersten Blick sieht das innere einer Electron App sehr ähnlich zu einer herkömmlichen Website aus. Deshalb war meine Erwartung, dass eine Integration von Google Analytics leicht von der Hand geht. Leider ist dies nur bedingt der Fall. Im Folgenden geht es um die Vermessung meiner Electron App mit Google Analytics 4 und Universal Analytics.

Methode 1: Google Tag Manager

Der Google Tag Manager ist meine bevorzugte Integration von Google Analytics 3 und 4, sowie anderen Marketing Platformen wie Meta oder Google Ads bei herkömmlichen Webseiten.

Wie erwartet funktioniert die Integration vom Google Tag Manager über das klassische Code Snippet im HTML Code. Zu Testzwecken habe ich sowohl eine GA4 Config inklusive Pageview Event, als auch ein Universal Analytics Pageview implementiert.

Hier fällt relativ schnell auf, dass erstmal keinerlei Hits gesendet werden, obwohl gtag.js und analytics.js geladen werden.

Protocol Checking

Sowohl gtag.js und analytics.js überprüfen standardmäßig das verwendete Protocol. Da die Anwendung im lokalen Umfeld läuft und sich des file:// Protocols bedient, wird dadurch das Verschicken der Hits vorher blockiert.

Dieses Verhalten lässt sich durch die Nutzung eines Feldes abschalten. So wird durch checkProtocolTask = null die Prüfung des Protocols deaktiviert.

Google Tag Manager – Fields to Set

Aber Achtung: Aktuell gibt es für Google Analytics 4 keine Möglichkeit, diese Abfrage zu deaktivieren. Ein Tracking über herkömmliche Tags ist hier also nicht möglich. Hierfür gibt es seit mehreren Monaten bereits ein Issue Topic:

Google Issue Tracker

Fehlende Cookies & fehlerhafte URLs

Doch die Prüfung des Protocols ist nicht die einzige Hürde, so gibt es in Electron keine Möglichkeit Cookies zu speichern. Deshalb ist sowohl die Nutzung von storage und clientId notwendig, da Cookies wie _ga nicht genutzt werden können, um eine clientId zu speichern. Durch storage = none wird bei GA3 verhindert, dass Cookies gesetzt werden. Für GA4 gibt es hier leider (wieder) nur die Möglichkeit per Consent Mode.

Zum Schluss muss der Parameter Page Location manuell gesetzt werden, da sonst automatisch der Dateipfad der HTML Datei verwendet wird.

Payload von Universal Analytics Pageview Hit mit Dateipfad

Wird dieser nicht mit einer syntaktisch korrekten URL überschrieben, wird der Hit zwar gesendet, aber am Endpunkt verworfen.

Das Tracking einer Electron App mit Google Analytics 3 (Universal Analytics) ist also unter der Berücksichtigung der oben genannten Punkte relativ simpel.

Wichtig ist an dieser Stelle zu erwähnen, dass der Debug Modus des Google Tag Managers in dieser Umgebung nicht funktioniert. Es ist also nicht möglich, das gewohnte Testing vor der Veröffentlichung des Workspaces durchzuführen.

Unter der Berücksichtigung, der Abschaltung von GA3 nächstes Jahr, macht ein neues Trackingprojekt mit Universal Analytics aktuell aber kaum noch Sinn. Somit ist die Nutzung von GA4 zu diesem Zeitpunkt wesentlich sinnvoller.

Welche möglichen Ansätze gibt es also für ein Tracking mit GA4 und einer Electron App.

Methode 2: Measurement Protocol

Sowohl für GA3 als auch GA4 gibt es die Möglichkeit, mit dem Measurement Protocol HTTP Requests direkt an den Google Analytics Endpunkt zu senden.

events[0].params.session_id = sessionId;

fetch(`https://www.google-analytics.com/mp/collect?measurement_id=${measurement_id}&api_secret=${api_secret}`,{
   method: "POST",
   body: JSON.stringify({
      client_id: clientId,
      events: events
   })
});

Leider ist das Measurement Protocol für GA4 von Google eher als Ergänzung als kompletter Ersatz geplant worden. So werden die Events zwar auch in der Echtzeitansicht angezeigt, aber die meisten herkömmlichen Informationen, die über das Webtracking mitgeliefert werden, fehlen.

So wird trotz mitgelieferter client- und sessionId kein aktiver Nutzer in der Realtime Übersicht angezeigt, aber immerhin die aktuellen Events.

Auch in den Standardberichten fehlen Nutzerdaten, wie z.B. im Acquisation Tab.

Google Analytics 4 – Acquisition overview

Ungünstigerweise bestätigt sich hier die Befürchtung, dass das neue Measurement Protocol für GA4 nicht für das uneingeschränkte alleinige Tracking geeignet ist.

Das bedeutet nicht, dass dies keine zufriedenstellende Lösung sein kann, aber mit deutlichen Abstrichen rechnen muss. So ist die Messung von Marketingkanälen mittels UTM-Parametern nicht im gleichen Umfang möglich und automatische Events wie „first_visit“ werden ebenfalls nicht getrackt.

Markus Baersch hat einen umfangreichen Test zum Measurement Protocol für GA4 auf seinem Blog veröffentlicht.

Fazit

Mir stellt sich an der Stelle die Frage, ob ein anderes Analyse Tool für diesen Einsatzzweck besser geeignet ist. Denn auf fundamentale Funktionen zu verzichten, die GA4 ausmachen, ist aus meiner Sicht keine gute Option. Und wenn man sowieso bei der Implementierung auf eine Nischenlösung zurückgreifen muss, die viel Zeit erfordert, könnte man diese auch sinnvoll in ein geeigneteres Analyse Tool investieren.

Schade, dass Google sich hier nicht mehr an der vorgängiger Version für GA3 orientiert hat, denn damit wäre eine Umsetzung durchaus denkbar gewesen.

Nachtrag Februar 2023: David Vallejo hat eine nodejs Library entwickelt, die diese Lücke schließt und die Hits manuell nachbaut. Mehr Informationen auf der offiziellen Entwicklerseite.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert