Al igual que con gtag, se puede usar el Protocolo de medición de Google Analytics para enviar datos proporcionados por el usuario junto con User-ID, que se pueden usar para mejorar la medición del comportamiento y las conversiones.
Para enviar datos proporcionados por el usuario junto con una solicitud del Protocolo de medición, agregue el
El parámetro user_data
en la carga útil de JSON El parámetro user_id
debe tener las siguientes características:
está presente siempre que se proporcione user_data
.
El Protocolo de medición utiliza la misma normalización y el mismo algoritmo de hash
como
Medición optimizada de la API de Google Ads
.
Para cuestiones de privacidad, las direcciones de correo electrónico, los números de teléfono, los nombres, los apellidos,
y las direcciones deben utilizar la codificación hash
algoritmo SHA-256 antes
se están subiendo. El valor con hash se debe codificar en formato de cadena hexadecimal (cadena
un objeto que solo contiene dígitos hexadecimales), como 88d7ecb5c5b21d7b1
.
Para estandarizar los resultados de hash, antes de generar un hash en uno de estos valores:
- Quita los espacios en blanco iniciales y finales.
- Convierte el texto a minúsculas.
- Escribe los números de teléfono de acuerdo con el Estándar E164.
- Quita todos los puntos (.) que anteceden al nombre de dominio en
gmail.com
ygooglemail.com
direcciones de correo electrónico.
Cuerpo de la entrada JSON
Clave | Tipo | Descripción |
---|---|---|
user_id | string | Es un identificador único para un usuario. Consulta el artículo User-ID para el análisis multiplataforma si deseas obtener más información sobre este identificador. |
user_data | objeto | Campos de datos del usuario mejorados que identifican a un usuario |
user_data.sha256_email_address[] | arreglo de strings | Dirección de correo electrónico del usuario codificada y con hash.
Se normalizó como tal:
|
user_data.sha256_phone_number[] | arreglo de strings | Es el número de teléfono del usuario con codificación hash.
Se normalizó como tal:
|
user_data.address[] | array | Identifica a un usuario según su ubicación física. |
user_data.address[].sha256_first_name | string | Es el nombre del usuario con codificación hash.
Se normalizó como tal:
|
user_data.address[].sha256_last_name | string | Apellido del usuario con codificación hash.
Se normalizó como tal:
|
user_data.address[].sha256_street | string | Calle con hash y codificación, y número del usuario.
Se normalizó como tal:
|
user_data.address[].city | string | Es la ciudad de la dirección del usuario.
Se normalizó como tal:
|
user_data.address[].region | string | Es el estado o territorio de la dirección del usuario.
Se normalizó como tal:
|
user_data.address[].postal_code | string | Es el código postal de la dirección del usuario.
Se normalizó como tal:
|
user_data.address[].country | string | Es el código de país de la dirección del usuario. Su formato cumple con el estándar ISO 3166-1 alpha-2. |
Consulte la documentación de referencia del Protocolo de medición para obtener más información sobre el formato del transporte y la carga útil.
Cómo enviar datos proporcionados por el usuario
A diferencia de gtag, que genera automáticamente un hash para los datos sensibles proporcionados por el usuario, el el desarrollador debe generar un hash para los datos sensibles proporcionados por el usuario de hashing nuevo llamado SHA256 y codificarla con formato de cadena hexadecimal antes de llamar a la API.
Todos los campos de datos del usuario que comiencen con el prefijo sha256
en su nombre deben tener
solo se propagan con valores con codificación hexadecimal y con hash.
El siguiente código de ejemplo realiza los pasos necesarios de encriptación y codificación:
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));
Para un atajo conveniente, todos los campos repetidos dentro del objeto user_data
(como address
, sha256_email_address
, sha256_phone_number
) se pueden
se pasa un valor singular en vez de un array.
El siguiente código de muestra llama al Protocolo de medición y pasa los datos del usuario junto con 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
}
}
})
});
Varios valores
De manera opcional, los desarrolladores pueden proporcionar varios valores (hasta 3 para teléfono y correo electrónico) y 2 para la dirección) usando un valor de array en lugar de una cadena. Si capturas más de un valor, proporcionarlo aumentará la probabilidad de una coincidencia.
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
}]
}
})
});