Wysyłaj dane przekazywane przez użytkowników za pomocą funkcji User-ID za pomocą Measurement Protocol

Podobnie jak w przypadku tagu gtag, możesz używać platformy Google Analytics Measurement Protocol do wysyłania danych przekazywanych przez użytkowników wraz z identyfikatorem User-ID, co może pomóc w ulepszeniu pomiaru zachowań i konwersji.

Aby wysłać dane przekazywane przez użytkowników wraz z żądaniem Measurement Protocol, dodaj parametr user_data w ładunku JSON. Zalecamy, aby zawsze, gdy podajesz parametr user_data, uwzględniać też parametr user_id. Pomaga to zapewnić jak najdokładniejszy pomiar i prawidłowe działanie funkcji.

Platforma Measurement Protocol używa tego samego algorytmu normalizacji i szyfrowania co funkcja pomiaru rozszerzonego w interfejsie Google Ads API. Ze względu na kwestie dotyczące prywatności adresy e-mail, numery telefonów, imiona, nazwiska, i adresy pocztowe muszą zostać zahaszowane za pomocą SHA-256 algorytmu przed przesłaniem. Zaszyfrowana wartość powinna być zakodowana w formacie ciągu szesnastkowego (obiekt ciągu zawierający tylko cyfry szesnastkowe), np. 88d7ecb5c5b21d7b1.

Aby ujednolicić wyniki haszowania, przed zahaszowaniem jednej z tych wartości musisz:

  • usunąć spacje na początku i na końcu ciągu,
  • zmienić pisownię tekstu na małe litery,
  • sformatować numery telefonów zgodnie ze standardem E.164.
  • usunąć wszystkie kropki (.) poprzedzające nazwę domeny w adresach e-mail w gmail.com i googlemail.com.

Treść żądania POST w formacie JSON

Klucz Typ Opis
user_id ciąg znaków unikalny identyfikator użytkownika. Więcej informacji o tym identyfikatorze znajdziesz w artykule User-ID do analizy na wielu platformach.
user_data obiekt Pola rozszerzonych danych użytkownika identyfikujące użytkownika.
user_data.sha256_email_address[] tablica tekstowa Zaszyfrowany i zakodowany adres e-mail użytkownika. Znormalizowany w ten sposób:
user_data.sha256_phone_number[] tablica tekstowa Zaszyfrowany i zakodowany numer telefonu użytkownika. Znormalizowany w ten sposób:
  • usuń wszystkie znaki inne niż cyfry
  • dodaj prefiks +
  • zaszyfruj za pomocą algorytmu SHA256
  • zakoduj w formacie ciągu szesnastkowego.
user_data.address[] tablica Identyfikuje użytkownika na podstawie fizycznej lokalizacji.
user_data.address[].sha256_first_name ciąg znaków Zaszyfrowane i zakodowane imię użytkownika. Znormalizowane w ten sposób:
  • usuń cyfry i symbole
  • lowercase
  • usuń spacje na początku i na końcu ciągu
  • zaszyfruj za pomocą algorytmu SHA256
  • zakoduj w formacie ciągu szesnastkowego.
user_data.address[].sha256_last_name ciąg znaków Zaszyfrowane i zakodowane nazwisko użytkownika. Znormalizowane w ten sposób:
  • usuń cyfry i symbole
  • lowercase
  • usuń spacje na początku i na końcu ciągu
  • zaszyfruj za pomocą algorytmu SHA256
  • zakoduj w formacie ciągu szesnastkowego.
user_data.address[].sha256_street ciąg znaków Zaszyfrowana i zakodowana ulica i numer domu użytkownika. Znormalizowane w ten sposób:
  • usuń symbole
  • lowercase
  • usuń spacje na początku i na końcu ciągu
  • zaszyfruj za pomocą algorytmu SHA256
  • zakoduj w formacie ciągu szesnastkowego.
user_data.address[].city ciąg znaków Miasto w adresie użytkownika. Znormalizowane w ten sposób:
  • usuń cyfry i symbole
  • lowercase
  • usuń spacje na początku i na końcu ciągu.
user_data.address[].region ciąg znaków Stan lub terytorium w adresie użytkownika. Znormalizowane w ten sposób:
  • usuń cyfry i symbole
  • lowercase
  • usuń spacje na początku i na końcu ciągu.
user_data.address[].postal_code ciąg znaków Kod pocztowy w adresie użytkownika. Znormalizowany w ten sposób:
  • usuń znaki . i ~
  • usuń spacje na początku i na końcu ciągu.
user_data.address[].country ciąg znaków Kod kraju w adresie użytkownika. Sformatowany zgodnie ze standardem ISO 3166-1 alfa-2.

Więcej informacji o formatowaniu transportu i ładunku znajdziesz w dokumentacji referencyjnej Measurement Protocol.

Wysyłanie danych przekazywanych przez użytkowników

W przeciwieństwie do gtagu gtag, który automatycznie haszuje wrażliwe dane przekazywane przez użytkowników, platforma Measurement Protocol wymaga, aby programista zahaszował wrażliwe dane przekazywane przez użytkowników za pomocą bezpiecznego algorytmu haszowania jednokierunkowego o nazwie SHA256 i zakodował je w formacie ciągu szesnastkowego przed wywołaniem interfejsu API.

Wszystkie pola danych użytkownika, których nazwa zaczyna się od prefiksu sha256, powinny zawierać tylko zaszyfrowane i zakodowane w formacie szesnastkowym wartości.

Poniższy przykładowy kod wykonuje niezbędne kroki szyfrowania i kodowania:

Node.js

const { subtle } = require('crypto').webcrypto;

async function populateSensitiveUserData(value) {
  const encoder = new TextEncoder();
  // Convert a string value to UTF-8 encoded text.
  const valueUtf8 = encoder.encode(value);
  // Compute the hash (digest) using the SHA-256 algorithm.
  const hashSha256 = await subtle.digest('SHA-256', valueUtf8);
  // Convert buffer to byte array.
  const hashArray = Array.from(new Uint8Array(hashSha256));
  // Return a hex-encoded string.
  return hashArray.map(b => b.toString(16).padStart(2, "0")).join('');
};

// Test the encryption function by calling it.
async function main() {
  return await populateSensitiveUserData('<value>');
}

main()
  .then(v => console.log(v))
  .catch(err => console.error(err));

Dla wygody wszystkie powtarzające się pola w obiekcie user_data (np. address, sha256_email_address, sha256_phone_number) mogą przyjmować pojedynczą wartość zamiast tablicy.

Poniższy przykładowy kod wywołuje platformę Measurement Protocol i przekazuje dane użytkownika wraz z identyfikatorem User-ID.

Node.js

const measurementId = "MEASUREMENT_ID";
const apiSecret = "API_SECRET";

// Populate mock User Data using the `populateSensitiveUserData` function defined
// above.
const yourEmailSha256Variable = await populateSensitiveUserData('test@yourdomain.com');
const yourPhoneSha256Variable  = await populateSensitiveUserData('+15555555555');
const yourFirstNameSha256Variable  = await populateSensitiveUserData('john');
const yourLastNameSha256Variable  = await populateSensitiveUserData('doe');
const yourStreetAddressSha256Variable  = await populateSensitiveUserData('123 main street');

// Populate mock unencrypted user data.
const yourCityVariable = 'san francisco';
const yourRegionVariable = 'california';
const yourPostalCodeVariable = '94000';
const yourCountryVariable = 'US';

fetch(`https://www.google-analytics.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`, {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    client_id: "CLIENT_ID",
    user_id: "USER_ID",
    events: [{
      name: "purchase"
    }],
    user_data: {
      sha256_email_address: yourEmailSha256Variable,
      sha256_phone_number: yourPhoneSha256Variable,
      address: {
        sha256_first_name: yourFirstNameSha256Variable,
        sha256_last_name: yourLastNameSha256Variable,
        sha256_street: yourStreetAddressSha256Variable,
        city: yourCityVariable,
        region: yourRegionVariable,
        postal_code: yourPostalCodeVariable,
        country: yourCountryVariable
      }
    }
  })
});

Wiele wartości

Programiści mogą opcjonalnie podawać kilka wartości (maksymalnie 3 dla numeru telefonu i adresu e-mail oraz 2 dla adresu pocztowego), używając wartości w postaci tablicy zamiast ciągu. Jeśli zbierasz co najmniej 2 wartości danej zmiennej, podawanie ich zwiększy prawdopodobieństwo dopasowania.

Node.js

const measurementId = "MEASUREMENT_ID";
const apiSecret = "API_SECRET";

fetch(`https://www.google-analytics.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`, {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    client_id: "CLIENT_ID",
    user_id: "USER_ID",
    events: [{
      name: "purchase"
    }],
    user_data: {
      sha256_email_address: [yourEmailSha256Variable1, yourEmailSha256Variable2],
      sha256_phone_number: [yourPhoneSha256Variable1, yourPhoneSha256Variable2],
      address: [{
        sha256_first_name: yourFirstNameSha256Variable1,
        sha256_last_name: yourLastNameSha256Variable1,
        sha256_street: yourStreetAddressSha256Variable1,
        city: yourCityVariable1,
        region: yourRegionVariable1,
        postal_code: yourPostalCodeVariable1,
        country: yourCountryVariable1
      },{
        sha256_first_name: yourFirstNameSha256Variable2,
        sha256_last_name: yourLastNameSha256Variable2,
        sha256_street: yourStreetAddressSha256Variable2,
        city: yourCityVariable2,
        region: yourRegionVariable2,
        postal_code: yourPostalCodeVariable2,
        country: yourCountryVariable2
      }]
    }
  })
});