Podobnie jak w przypadku gtag, możesz używać protokołu Measurement Protocol Google Analytics do wysyłania danych przekazywanych przez użytkowników razem z identyfikatorem User-ID, który może służyć do polepszania pomiarów działań i pomiaru konwersji.
Aby wysyłać dane przekazywane przez użytkowników razem z żądaniem Measurement Protocol, dodaj do ładunku JSON parametr user_data. Zalecamy, aby za każdym razem, gdy podajesz parametr user_data, uwzględniać też parametr user_id. Zapewnia to najdokładniejsze pomiary i prawidłowe działanie funkcji.
Measurement Protocol używa tych samych reguł normalizacji i haszowania co Data Manager API i konwersje rozszerzone w Google Ads.
Ze względu na kwestie dotyczące prywatności przed przesłaniem adresów e-mail, numerów telefonów, imion i nazwisk oraz adresów pocztowych należy je zaszyfrować przy użyciu algorytmu SHA-256. Wartość zaszyfrowana powinna być zakodowana w formacie ciągu szesnastkowego (obiekt ciągu zawierający tylko cyfry szesnastkowe), np. 88d7ecb5c5b21d7b1.
Aby ustandaryzować wyniki szyfrowania, przed zaszyfrowaniem tych wartości wykonaj te czynności:
- Usuń spacje na początku i na końcu ciągu.
- zmienić pisownię tekstu na małe litery,
- Sformatuj numery telefonów zgodnie ze standardem E.164.
- Usuń wszystkie kropki (.) poprzedzające nazwę domeny w adresach e-mail
gmail.comigooglemail.com.
Treść posta JSON
| Klucz | Typ | Opis |
|---|---|---|
| user_id (parametr opcjonalny, ale zalecany); | tekst | unikalny identyfikator użytkownika. Więcej informacji o tym identyfikatorze znajdziesz w artykule Funkcja User-ID do analizy na wielu platformach. |
| user_data | obiekt | Ulepszone pola danych użytkownika, które go identyfikują. |
| user_data.sha256_email_address[] | tablica tekstowa | Zaszyfrowany i zakodowany adres e-mail użytkownika.
Znormalizowana w ten sposób:
|
| user_data.sha256_phone_number[] | tablica tekstowa | Zaszyfrowany i zakodowany numer telefonu użytkownika.
Znormalizowana w ten sposób:
|
| user_data.address[] | tablica | Identyfikuje użytkownika na podstawie fizycznej lokalizacji. |
| user_data.address[].sha256_first_name | tekst | Zaszyfrowane i zakodowane imię użytkownika.
Znormalizowana w ten sposób:
|
| user_data.address[].sha256_last_name | tekst | Zaszyfrowane i zakodowane nazwisko użytkownika.
Znormalizowana w ten sposób:
|
| user_data.address[].sha256_street | tekst | Zaszyfrowana i zakodowana ulica oraz numer domu użytkownika.
Znormalizowana w ten sposób:
|
| user_data.address[].city | tekst | Miasto w adresie użytkownika.
Znormalizowana w ten sposób:
|
| user_data.address[].region | tekst | Stan lub terytorium w adresie użytkownika.
Znormalizowana w ten sposób:
|
| user_data.address[].postal_code | tekst | Kod pocztowy adresu użytkownika.
Znormalizowana w ten sposób:
|
| user_data.address[].country | tekst | Kod kraju adresu użytkownika. Sformatowany zgodnie ze standardem ISO 3166-1 alfa-2. |
Więcej informacji o formatowaniu transportu i ładunku znajdziesz w dokumentacji Measurement Protocol.
Wysyłanie danych przekazywanych przez użytkowników
W przeciwieństwie do gtag, który automatycznie szyfruje poufne dane przekazywane przez użytkowników, Measurement Protocol wymaga od dewelopera zaszyfrowania poufnych danych przekazywanych przez użytkowników za pomocą bezpiecznego algorytmu szyfrowania jednokierunkowego o nazwie SHA256 i zakodowania ich w formacie ciągu szesnastkowego przed wywołaniem interfejsu API.
Wszystkie pola danych użytkownika, których nazwa zaczyna się od prefiksu sha256, powinny być wypełnione tylko wartościami zaszyfrowanymi i zakodowanymi szesnastkowo.
Poniższy przykładowy kod wykonuje niezbędne czynności 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 pola powtarzane w obiekcie user_data (takie jak address, sha256_email_address, sha256_phone_number) mogą być przekazywane jako pojedyncza wartość zamiast tablicy.
Podany niżej przykładowy kod wywołuje 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
}]
}
})
});