ส่งข้อมูลที่ได้จากผู้ใช้พร้อมกับ User-ID โดยใช้ Measurement Protocol

เช่นเดียวกับการใช้ gtag คุณสามารถใช้ Measurement Protocol ของ Google Analytics เพื่อส่งข้อมูลที่ได้จากผู้ใช้พร้อมกับ User-ID ซึ่งสามารถใช้เพื่อปรับปรุง พฤติกรรมและการวัด Conversion

หากต้องการส่งข้อมูลที่ได้จากผู้ใช้พร้อมกับคำขอ Measurement Protocol ให้เพิ่มเมธอด พารามิเตอร์ user_data ในเพย์โหลด JSON พารามิเตอร์ user_id ต้องเป็น ปรากฏเมื่อใดก็ตามที่มีการระบุ user_data

Measurement Protocol ใช้อัลกอริทึมการทำให้เป็นมาตรฐานและการแฮชเดียวกัน ในฐานะ การวัดที่ปรับปรุงแล้วของ Google Ads API สำหรับข้อกังวลเกี่ยวกับความเป็นส่วนตัว ที่อยู่อีเมล หมายเลขโทรศัพท์ ชื่อ นามสกุล และจะต้องแฮชที่อยู่โดยใช้ อัลกอริทึม SHA-256 ก่อน กำลังอัปโหลด ค่าที่แฮชควรเข้ารหัสในรูปแบบสตริงฐานสิบหก (สตริง ที่มีเฉพาะเลขฐานสิบหก) เช่น 88d7ecb5c5b21d7b1

เพื่อให้ผลลัพธ์การแฮชเป็นมาตรฐานก่อนการแฮชรายการใดรายการหนึ่ง ค่าเหล่านี้ที่คุณต้องทำมีดังนี้

  • นําช่องว่างขึ้นต้นและต่อท้ายออก
  • แปลงข้อความให้เป็นตัวพิมพ์เล็ก
  • จัดรูปแบบหมายเลขโทรศัพท์ตาม มาตรฐาน E164
  • นำจุด (.) ที่อยู่ก่อนชื่อโดเมนใน gmail.com ออกทั้งหมด และ googlemail.com อีเมล

เนื้อหาของโพสต์ JSON

คีย์ ประเภท คำอธิบาย
user_id สตริง ตัวระบุที่ไม่ซ้ำกันสำหรับผู้ใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวระบุนี้ได้ที่ User-ID สําหรับการวิเคราะห์ข้ามแพลตฟอร์ม
user_data ออบเจ็กต์ ช่องข้อมูลผู้ใช้ที่ปรับปรุงแล้วสำหรับการระบุผู้ใช้
user_data.sha256_email_address[] อาร์เรย์สตริง ที่อยู่อีเมลของผู้ใช้ที่แฮชและเข้ารหัส ทำให้เป็นมาตรฐานดังนี้:
user_data.sha256_phone_number[] อาร์เรย์สตริง หมายเลขโทรศัพท์ของผู้ใช้ที่มีการแฮชและเข้ารหัส ทำให้เป็นมาตรฐานดังนี้:
  • นำอักขระที่ไม่ใช่ตัวเลขทั้งหมดออก
  • เพิ่มคำนำหน้า +
  • แฮชโดยใช้อัลกอริทึม SHA256
  • เข้ารหัสด้วยรูปแบบสตริงฐาน 16
user_data.address[] อาร์เรย์ ระบุผู้ใช้ตามสถานที่ตั้งทางกายภาพ
user_data.address[].sha256_first_name สตริง ชื่อจริงของผู้ใช้ที่แฮชและเข้ารหัส ทำให้เป็นมาตรฐานดังนี้:
  • นำตัวเลขและอักขระสัญลักษณ์ออก
  • ตัวพิมพ์เล็ก
  • นำช่องว่างนำและช่องว่างที่ต่อท้ายออก
  • แฮชโดยใช้อัลกอริทึม SHA256
  • เข้ารหัสด้วยรูปแบบสตริงฐาน 16
user_data.address[].sha256_last_name สตริง นามสกุลของผู้ใช้ที่แฮชและเข้ารหัส ทำให้เป็นมาตรฐานดังนี้:
  • นำตัวเลขและอักขระสัญลักษณ์ออก
  • ตัวพิมพ์เล็ก
  • นำช่องว่างนำและช่องว่างที่ต่อท้ายออก
  • แฮชโดยใช้อัลกอริทึม SHA256
  • เข้ารหัสด้วยรูปแบบสตริงฐาน 16
user_data.address[].sha256_street สตริง ถนนและจำนวนผู้ใช้ที่มีการแฮชและเข้ารหัส ทำให้เป็นมาตรฐานดังนี้:
  • นำอักขระสัญลักษณ์ออก
  • ตัวพิมพ์เล็ก
  • นำช่องว่างนำและช่องว่างที่ต่อท้ายออก
  • แฮชโดยใช้อัลกอริทึม SHA256
  • เข้ารหัสด้วยรูปแบบสตริงฐาน 16
user_data.address[].city สตริง เมืองสำหรับที่อยู่ของผู้ใช้ ทำให้เป็นมาตรฐานดังนี้:
  • นำตัวเลขและอักขระสัญลักษณ์ออก
  • ตัวพิมพ์เล็ก
  • นำช่องว่างขึ้นต้นและต่อท้ายออก
user_data.address[].region สตริง รัฐหรือเขตแดนสำหรับที่อยู่ของผู้ใช้ ทำให้เป็นมาตรฐานดังนี้:
  • นำตัวเลขและอักขระสัญลักษณ์ออก
  • ตัวพิมพ์เล็ก
  • นำช่องว่างขึ้นต้นและต่อท้ายออก
user_data.address[].postal_code สตริง รหัสไปรษณีย์ตามที่อยู่ของผู้ใช้ ทำให้เป็นมาตรฐานดังนี้:
  • นำอักขระ . และ ~ ออก
  • นำช่องว่างขึ้นต้นและต่อท้ายออก
user_data.address[].country สตริง รหัสประเทศสำหรับที่อยู่ของผู้ใช้ จัดรูปแบบตามมาตรฐาน ISO 3166-1 alpha-2

ดูเอกสารอ้างอิง Measurement Protocol เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดรูปแบบการรับส่งข้อมูลและเพย์โหลด

ส่งข้อมูลที่ได้จากผู้ใช้

ซึ่งต่างจาก gtag ซึ่ง จะแฮชข้อมูลที่ละเอียดอ่อนที่ได้จากผู้ใช้โดยอัตโนมัติ ซึ่งก็คือ Measurement Protocol กำหนดให้นักพัฒนาแอปแฮชข้อมูลที่ได้จากผู้ใช้ที่ละเอียดอ่อนโดยใช้วิธีทางเดียวที่ปลอดภัย อัลกอริทึมการแฮชที่เรียกว่า SHA256 และเข้ารหัสโดยใช้ รูปแบบสตริงเลขฐานสิบหก ก่อนที่จะเรียกใช้ API

ฟิลด์ข้อมูลผู้ใช้ทั้งหมดที่ขึ้นต้นด้วยคำนำหน้า sha256 ในชื่อควรเป็น ป้อนข้อมูลด้วยค่าที่แฮชและเข้ารหัสฐาน 16 เท่านั้น

โค้ดตัวอย่างต่อไปนี้ทำตามขั้นตอนการเข้ารหัสและการเข้ารหัสที่จำเป็น

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

ช่องที่ซ้ำกันทั้งหมดภายในออบเจ็กต์ user_data เป็นทางลัดเพื่อความสะดวก (เช่น address, sha256_email_address, sha256_phone_number) สามารถ ส่งค่าเอกพจน์แทนอาร์เรย์

โค้ดตัวอย่างต่อไปนี้เรียกใช้ Measurement Protocol และส่งข้อมูลผู้ใช้ พร้อมกับ 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
      }
    }
  })
});

หลายค่า

นักพัฒนาแอปจะระบุค่าหลายค่าหรือไม่ก็ได้ (สูงสุด 3 ค่าสำหรับโทรศัพท์และอีเมล และ 2 สำหรับที่อยู่) โดยใช้ค่าอาร์เรย์แทนสตริง หากคุณจับภาพ มากกว่า 1 ค่า ซึ่งจะเพิ่มโอกาสในการจับคู่ได้

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