Come per gtag, puoi utilizzare il Measurement Protocol di Google Analytics per Google Analytics 4 per inviare i dati forniti dagli utenti insieme allo User-ID, che possono essere utilizzati per migliorare il comportamento e la misurazione delle conversioni.
Per inviare i dati forniti dagli utenti insieme a una richiesta di Measurement Protocol, aggiungi il
parametro user_data
nel payload JSON. Il parametro user_id
deve essere
presente ogni volta che viene fornito user_data
.
Measurement Protocol utilizza lo stesso algoritmo di normalizzazione e hashing della funzionalità di misurazione avanzata dell'API Google Ads.
Per problemi di privacy, indirizzi email, numeri di telefono, nomi, cognomi e indirizzi devono essere sottoposti ad hashing utilizzando l'algoritmo SHA-256 prima di essere caricati. Il valore sottoposto ad hashing deve essere codificato in formato stringa esadecimale (oggetto stringa contenente solo cifre esadecimali), ad esempio 88d7ecb5c5b21d7b1
.
Per standardizzare i risultati hash, prima di eseguire l'hashing di uno di questi valori devi:
- Rimuovi gli spazi vuoti iniziali e finali.
- Converti il testo in minuscolo.
- Formatta numeri di telefono secondo lo standard E164.
- Rimuovi tutti i punti (.) che precedono il nome di dominio negli indirizzi email
gmail.com
egooglemail.com
.
Corpo del post JSON
Chiave | Tipo | Descrizione |
---|---|---|
user_id | stringa | L'identificatore univoco di un utente. Per ulteriori informazioni su questo identificatore, consulta User-ID per l'analisi multipiattaforma. |
user_data | oggetto | Campi di dati utente avanzati che identificano un utente. |
user_data.sha256_email_address[] | array di stringhe | Indirizzo email dell'utente sottoposto ad hashing e codificato.
Normalizzata come questa:
|
user_data.sha256_phone_number[] | array di stringhe | Numero di telefono dell'utente sottoposto ad hashing e codificato.
Normalizzata come questa:
|
user_data.address[] | array | Identifica un utente in base alla posizione fisica. |
user_data.address[].sha256_first_name | stringa | Nome dell'utente sottoposto ad hashing e codificato.
Normalizzata come questa:
|
user_data.address[].sha256_last_name | stringa | Cognome dell'utente sottoposto ad hashing e codificato.
Normalizzata come questa:
|
user_data.address[].sha256_street | stringa | Via e numero dell'utente sottoposto ad hashing e codificato.
Normalizzata come questa:
|
user_data.address[].city | stringa | Città dell'indirizzo dell'utente.
Normalizzata come questa:
|
user_data.address[].region | stringa | Stato o territorio dell'indirizzo dell'utente.
Normalizzata come questa:
|
user_data.address[].postal_code | stringa | Codice postale dell'indirizzo dell'utente.
Normalizzata come questa:
|
user_data.address[].country | stringa | Codice paese dell'indirizzo dell'utente. Formattati secondo lo standard ISO 3166-1 alpha-2. |
Consulta la documentazione di riferimento di Measurement Protocol per ulteriori informazioni sulla formattazione di trasporto e payload.
Invia i dati forniti dagli utenti
A differenza di gtag, che esegue automaticamente l'hashing dei dati sensibili forniti dagli utenti, Measurement Protocol richiede a uno sviluppatore di eseguire l'hashing dei dati sensibili forniti dagli utenti utilizzando un algoritmo di hashing unidirezionale denominato SHA256 e di codificarlo utilizzando il formato stringa esadecimale prima di chiamare l'API.
Tutti i campi dei dati utente che iniziano con il prefisso sha256
nel nome devono essere
compilati solo con valori sottoposti ad hashing e con codifica esadecimale.
Il codice di esempio seguente esegue i passaggi di crittografia e codifica necessari:
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 value_utf8 = encoder.encode(value);
// Compute the hash (digest) using the SHA-256 algorithm.
const hash_sha256 = await subtle.digest('SHA-256', value_utf8);
// Convert buffer to byte array.
const hash_array = Array.from(new Uint8Array(hash_sha256));
// Return a hex-encoded string.
return hash_array.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));
Per praticità, a tutti i campi ripetuti all'interno dell'oggetto user_data
(ad esempio address
, sha256_email_address
, sha256_phone_number
) è possibile passare un singolo valore anziché un array.
Il seguente codice campione chiama Measurement Protocol e trasmette i dati utente insieme allo User-ID.
Node.js
const measurement_id = 'G-XXXXXXXXXX';
const api_secret = '<secret_value>';
// 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=${measurement_id}&api_secret=${api_secret}`, {
method: "POST",
body: JSON.stringify({
client_id: 'XXXXXXXXXX.YYYYYYYYYY',
user_id: "XXX",
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
}
}
})
});
Più valori
Gli sviluppatori possono facoltativamente fornire più valori (fino a 3 per telefono ed email e 2 per indirizzo) utilizzando un valore array anziché una stringa. Se acquisisci più di un valore, aumenterà la probabilità di una corrispondenza.
Node.js
const measurement_id = 'G-XXXXXXXXXX';
const api_secret = '<secret_value>';
fetch(`https://www.google-analytics.com/mp/collect?measurement_id=${measurement_id}&api_secret=${api_secret}`, {
method: "POST",
body: JSON.stringify({
client_id: 'XXXXXXXXXX.YYYYYYYYYY',
user_id: "XXX",
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
}]
}
})
});