Gebruik Google Analytics4

Deze tutorial laat zien hoe u het gebruik van uw extensie kunt volgen met behulp van Google Analytics. U kunt een werkend Google Analytics 4-voorbeeld vinden op Github , waar google-analytics.js alle Google Analytics-gerelateerde code bevat.

Vereisten

In deze tutorial wordt ervan uitgegaan dat u bekend bent met het schrijven van Chrome-extensies. Als u informatie nodig heeft over het schrijven van een extensie, lees dan de handleiding Aan de slag .

U moet ook een Google Analytics 4-account instellen om uw extensie bij te houden. Houd er rekening mee dat u bij het instellen van het account elke waarde in het URL-veld van de website kunt gebruiken, aangezien uw extensie geen eigen URL heeft.

Met behulp van het meetprotocol van Google Analytics

Sinds Manifest V3 mogen Chrome-extensies geen op afstand gehoste code uitvoeren . Dit betekent dat u het Google Analytics Measurement Protocol moet gebruiken voor het bijhouden van extensiegebeurtenissen. Met het Measurement Protocol kunt u gebeurtenissen rechtstreeks naar de servers van Google Analytics sturen via HTTP-verzoeken. Een voordeel van deze aanpak is dat u analysegebeurtenissen overal in uw extensie kunt verzenden, inclusief uw servicemedewerker.

Stel API-referenties in

De eerste stap is het verkrijgen van een api_secret en measurement_id . Volg de documentatie van het Measurement Protocol om te zien hoe u deze voor uw Analytics-account kunt verkrijgen.

Genereer een client_id

De tweede stap is het genereren van een unieke identificatie voor een specifiek apparaat/gebruiker, de client_id . De id moet hetzelfde blijven, zolang de extensie in de browser van een gebruiker is geïnstalleerd. Het kan een willekeurige tekenreeks zijn, maar moet uniek zijn voor de client. U kunt er een genereren door self.crypto.randomUUID() aan te roepen. Bewaar de client_id in chrome.storage.local om ervoor te zorgen dat deze hetzelfde blijft zolang de extensie is geïnstalleerd.

Voor het gebruik van chrome.storage.local zijn de storage in uw manifestbestand vereist:

manifest.json:

{
  …
  "permissions": ["storage"],
  …
}

Vervolgens kunt u chrome.storage.local gebruiken om de client_id op te slaan:

async function getOrCreateClientId() {
  const result = await chrome.storage.local.get('clientId');
  let clientId = result.clientId;
  if (!clientId) {
    // Generate a unique client ID, the actual value is not relevant
    clientId = self.crypto.randomUUID();
    await chrome.storage.local.set({clientId});
  }
  return clientId;
}

Verzend een analysegebeurtenis

Met de API-gegevens en de client_id kunt u via een fetch een gebeurtenis naar Google Analytics sturen:

const GA_ENDPOINT = 'https://www.google-analytics.com/mp/collect';
const MEASUREMENT_ID = `G-...`;
const API_SECRET = `...`;

fetch(
  `${GA_ENDPOINT}?measurement_id=${MEASUREMENT_ID}&api_secret=${API_SECRET}`,
  {
    method: 'POST',
    body: JSON.stringify({
      client_id: await getOrCreateClientId(),
      events: [
        {
          name: 'button_clicked',
          params: {
            id: 'my-button',
          },
        },
      ],
    }),
  }
);

Hierdoor wordt een button_clicked gebeurtenis verzonden die wordt weergegeven in uw Google Analytics-gebeurtenisrapport . Als u uw gebeurtenissen in het Google Analytics Realtime Report wilt zien, moet u twee extra parameters opgeven: session_id en engagement_time_msec .

Gebruik de aanbevolen parameters session_id en engagement_time_msec

Zowel session_id als engagement_time_msec zijn aanbevolen parameters bij gebruik van het Google Analytics Measurement Protocol, omdat ze vereist zijn om gebruikersactiviteit weer te geven in standaardrapporten zoals Realtime.

Een session_id beschrijft een periode waarin een gebruiker voortdurend interactie heeft met uw extensie. Standaard eindigt een sessie na 30 minuten inactiviteit van de gebruiker. Er is geen limiet aan hoe lang een sessie kan duren.

In Chrome-extensies is er, anders dan bij normale websites, geen duidelijk beeld van een gebruikerssessie. Daarom moet u definiëren wat een gebruikerssessie in uw toestel betekent. Elke nieuwe gebruikersinteractie kan bijvoorbeeld een nieuwe sessie zijn. In dat geval kunt u eenvoudig bij elke gebeurtenis een nieuw sessie-ID genereren (dwz met behulp van een tijdstempel).

Het volgende voorbeeld demonstreert een aanpak waarbij er een time-out optreedt voor een nieuwe sessie nadat er 30 minuten geen gebeurtenissen zijn gerapporteerd (deze tijd kan worden aangepast om beter aan te sluiten bij het gebruikersgedrag van uw extensie). In het voorbeeld wordt chrome.storage.session gebruikt om de actieve sessie op te slaan terwijl de browser actief is. Samen met de sessie slaan we de laatste keer op dat een gebeurtenis is geactiveerd. Op deze manier kunnen we zien of de actieve sessie is verlopen:

const SESSION_EXPIRATION_IN_MIN = 30;

async function getOrCreateSessionId() {
  // Store session in memory storage
  let {sessionData} = await chrome.storage.session.get('sessionData');
  // Check if session exists and is still valid
  const currentTimeInMs = Date.now();
  if (sessionData && sessionData.timestamp) {
    // Calculate how long ago the session was last updated
    const durationInMin = (currentTimeInMs - sessionData.timestamp) / 60000;
    // Check if last update lays past the session expiration threshold
    if (durationInMin > SESSION_EXPIRATION_IN_MIN) {
      // Delete old session id to start a new session
      sessionData = null;
    } else {
      // Update timestamp to keep session alive
      sessionData.timestamp = currentTimeInMs;
      await chrome.storage.session.set({sessionData});
    }
  }
  if (!sessionData) {
    // Create and store a new session
    sessionData = {
      session_id: currentTimeInMs.toString(),
      timestamp: currentTimeInMs.toString(),
    };
    await chrome.storage.session.set({sessionData});
  }
  return sessionData.session_id;
}

In het volgende voorbeeld worden session_id en engagement_time_msec toegevoegd aan het vorige knopklikgebeurtenisverzoek. Voor engagement_time_msec kunt u een standaardwaarde van 100 ms opgeven.

const GA_ENDPOINT = "https://www.google-analytics.com/mp/collect";
const MEASUREMENT_ID = `G-...`;
const API_SECRET = `...`;
const DEFAULT_ENGAGEMENT_TIME_IN_MSEC = 100;

fetch(
`${GA_ENDPOINT}?measurement_id=${MEASUREMENT_ID}&api_secret=${API_SECRET}`,
  {
    method: "POST",
    body: JSON.stringify({
      client_id: await getOrCreateClientId(),
      events: [
        {
          name: "button_clicked",
          params: {
            session_id: await this.getOrCreateSessionId(),
            engagement_time_msec: DEFAULT_ENGAGEMENT_TIME_IN_MSEC,
            id: "my-button",
          },
        },
      ],
    }),
  }
);

De gebeurtenis wordt als volgt weergegeven in het Google Analytics Realtime-rapport.

Realtime gebeurtenissen in Google Analytics.

Paginaweergaven bijhouden in pop-up-, zijpaneel- en extensiepagina's

Het Google Analytics Measurement Protocol ondersteunt een speciale page_view gebeurtenis voor het bijhouden van paginaweergaven. Gebruik dit om te volgen hoe gebruikers uw pop-uppagina's, zijpaneel of een extensiepagina op een nieuw tabblad bezoeken. Voor de page_view gebeurtenis zijn ook de parameters page_title en page_location vereist. In het volgende voorbeeld wordt een paginaweergavegebeurtenis geactiveerd bij de load voor een extensiepop-up:

popup.js:

window.addEventListener("load", async () => {
  fetch(`${GA_ENDPOINT}?measurement_id=${MEASUREMENT_ID}&api_secret=${API_SECRET}`,
  {
    method: "POST",
    body: JSON.stringify({
      client_id: await getOrCreateClientId(),
      events: [
        {
          name: "page_view",
          params: {
            session_id: await getOrCreateSessionId(),
            engagement_time_msec: DEFAULT_ENGAGEMENT_TIME_IN_MSEC,
            page_title: document.title,
            page_location: document.location.href
          },
        },
      ],
    }),
  });
});

Het popup.js script moet worden geïmporteerd in het html-bestand van uw pop-up en moet worden uitgevoerd voordat een ander script wordt uitgevoerd:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Analytics Demo Popup</title>
    <script src="./popup.js" type="module"></script>
  </head>
  <body>
    <h1>Analytics Demo</h1>
  </body>
</html>

De pop-upweergave wordt weergegeven zoals elke andere paginaweergave in het Google Analytics Realtime-rapport:

Paginaweergavegebeurtenis zoals deze wordt weergegeven in het Google Analytics Realtime-dashboard.

Analysegebeurtenissen bij servicemedewerkers bijhouden

Met behulp van het Google Analytics Measurement Protocol is het mogelijk om analysegebeurtenissen bij extensieservicemedewerkers bij te houden. Door bijvoorbeeld naar de unhandledrejection event in uw servicemedewerker te luisteren, kunt u eventuele niet-afgevangen uitzonderingen in uw servicemedewerker registreren bij Google Analytics, wat enorm kan helpen bij het opsporen van problemen die uw gebruikers mogelijk melden.

service-werker.js:

addEventListener("unhandledrejection", async (event) => {
  `${GA_ENDPOINT}?measurement_id=${MEASUREMENT_ID}&api_secret=${API_SECRET}`,
  {
    method: "POST",
    body: JSON.stringify({
      client_id: getOrCreateClientId(),
      events: [
        {
          // Note: 'error' is a reserved event name and cannot be used
          // see https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference?client_type=gtag#reserved_names
          name: "extension_error",
          params: {
            session_id: await this.getOrCreateSessionId(),
            engagement_time_msec: DEFAULT_ENGAGEMENT_TIME_IN_MSEC,
            message: error.message,
            stack: error.stack,
          },
        },
      ],
    }),
  }
});

U kunt de foutgebeurtenis nu zien in uw Google Analytics-rapporten:

Foutgebeurtenis zoals deze wordt weergegeven in het Google Analytics-gebeurtenisdashboard.

Foutopsporing

Google Analytics biedt twee handige functies voor het opsporen van fouten in analysegebeurtenissen in uw extensie:

  1. Een speciaal foutopsporingseindpunt https://www.google-analytics.com**/debug**/mp/collect dat eventuele fouten in uw gebeurtenisdefinities rapporteert.
  2. Het Realtime-rapport van Google Analytics dat gebeurtenissen weergeeft zodra ze binnenkomen.