Envía datos proporcionados por el usuario con Measurement Protocol

Al igual que con gtag, puedes usar el Protocolo de medición de Google Analytics para enviar datos proporcionados por el usuario junto con el User-ID, que se puede usar para mejorar la medición del comportamiento y de las conversiones.

Para enviar datos proporcionados por el usuario junto con una solicitud de Measurement Protocol, agrega el parámetro user_data en la carga útil de JSON. Te recomendamos que también incluyas el parámetro user_id siempre que se proporcione user_data. Esto ayuda a garantizar que la medición y la funcionalidad de las funciones sean lo más precisas posible.

El Measurement Protocol usa las mismas reglas de normalización y de hash que la API de Data Manager y las conversiones avanzadas de Google Ads. Por inquietudes sobre la privacidad, las direcciones de correo electrónico, los números de teléfono, los nombres, los apellidos y las direcciones deben codificarse con hash con el algoritmo SHA-256 antes de subirse. El valor de hash debe estar codificado en formato de cadena hexadecimal (objeto de cadena que solo contiene dígitos hexadecimales), como 88d7ecb5c5b21d7b1.

Para estandarizar los resultados del hash, debes hacer lo siguiente antes de generar un hash para 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 con el formato estándar E164.
  • Quita todos los puntos (.) que anteceden al nombre de dominio en las direcciones de correo electrónico gmail.com y googlemail.com.

Cuerpo de la publicación JSON

Clave Tipo Descripción
user_id (opcional, pero se recomienda) string Es un identificador único para un usuario. Consulta User-ID para el análisis multiplataforma para obtener más información sobre este identificador.
user_data objeto Son campos de datos del usuario mejorados que identifican a un usuario.
user_data.sha256_email_address[] Array de cadenas Es la dirección de correo electrónico del usuario con codificación hash y codificada. Se normaliza de la siguiente manera:
user_data.sha256_phone_number[] Array de cadenas Es el número de teléfono del usuario con codificación hash y codificado. Se normaliza de la siguiente manera:
  • quitar todos los caracteres que no sean dígitos
  • agregar el prefijo +
  • Genera un hash con el algoritmo SHA256
  • codificar con el formato de cadena hexadecimal.
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 y codificado. Se normaliza de la siguiente manera:
  • quitar dígitos y caracteres de símbolos
  • minúscula
  • quitar los espacios al principio y al final
  • Genera un hash con el algoritmo SHA256
  • codifica con el formato de cadena hexadecimal.
user_data.address[].sha256_last_name string Es el apellido del usuario con codificación hash y codificado. Se normaliza de la siguiente manera:
  • quitar dígitos y caracteres de símbolos
  • minúscula
  • quitar los espacios al principio y al final
  • Genera un hash con el algoritmo SHA256
  • codifica con el formato de cadena hexadecimal.
user_data.address[].sha256_street string Es la calle y el número del usuario con codificación hash. Se normaliza de la siguiente manera:
  • quitar caracteres de símbolos
  • minúscula
  • quitar los espacios al principio y al final
  • Genera un hash con el algoritmo SHA256
  • codifica con el formato de cadena hexadecimal.
user_data.address[].city string Es la ciudad de la dirección del usuario. Se normaliza de la siguiente manera:
  • quitar dígitos y caracteres de símbolos
  • minúscula
  • quitar los espacios al principio y al final
user_data.address[].region string Es el estado o territorio de la dirección del usuario. Se normaliza de la siguiente manera:
  • quitar dígitos y caracteres de símbolos
  • minúscula
  • quitar los espacios al principio y al final
user_data.address[].postal_code string Es el código postal de la dirección del usuario. Se normaliza de la siguiente manera:
  • Quita los caracteres . y ~.
  • quitar los espacios al principio y al final
user_data.address[].country string Es el código de país de la dirección del usuario. Tiene el formato según el estándar ISO 3166-1 alfa-2.

Consulta la documentación de referencia del Protocolo de medición para obtener más información sobre cómo se formatean el transporte y la carga útil.

Envía datos proporcionados por el usuario

A diferencia de gtag, que genera automáticamente un hash para los datos sensibles proporcionados por el usuario, el Protocolo de medición requiere que un desarrollador genere un hash para los datos sensibles proporcionados por el usuario con un algoritmo de hash unidireccional seguro llamado SHA256 y los codifique con el 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 solo deben completarse con valores con codificación hash y hexadecimal.

En el siguiente código de ejemplo, se realizan 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 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));

Como acceso directo, a todos los campos repetidos dentro del objeto user_data (como address, sha256_email_address y sha256_phone_number) se les puede pasar un valor único en lugar de un array.

En el siguiente código de muestra, se llama al Protocolo de medición y se pasan los datos del usuario junto con el 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
      }
    }
  })
});

Varios valores

De forma opcional, los desarrolladores pueden proporcionar varios valores (hasta 3 para el teléfono y el correo electrónico, y 2 para la dirección) con un valor de array en lugar de una cadena. Si capturas más de un valor, proporcionar esta información aumentará las probabilidades de obtener una coincidencia.

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
      }]
    }
  })
});