Tương tự như khi sử dụng gtag, bạn có thể sử dụng Measurement Protocol của Google Analytics để gửi dữ liệu do người dùng cung cấp cùng với User-ID. Dữ liệu này có thể được dùng để cải thiện kết quả đo lường hành vi và lượt chuyển đổi.
Để gửi dữ liệu do người dùng cung cấp cùng với yêu cầu Measurement Protocol, hãy thêm tham số user_data vào tải trọng JSON. Bạn cũng nên thêm tham số user_id bất cứ khi nào bạn cung cấp user_data. Điều này giúp đảm bảo kết quả đo lường chính xác nhất và chức năng của tính năng.
Measurement Protocol đang sử dụng cùng một thuật toán chuẩn hoá và băm như tính năng Đo lường nâng cao của API Google Ads.
Để bảo vệ quyền riêng tư, bạn phải băm địa chỉ email, số điện thoại, họ, tên và địa chỉ đường phố bằng thuật toán SHA-256 trước khi tải lên. Giá trị băm phải được mã hoá ở định dạng chuỗi thập lục phân (đối tượng chuỗi chỉ chứa các chữ số thập lục phân), chẳng hạn như 88d7ecb5c5b21d7b1.
Để chuẩn hoá kết quả băm, trước khi băm một trong các giá trị này, bạn phải:
- Xoá khoảng trắng ở đầu và cuối.
- Chuyển đổi văn bản thành chữ thường.
- Định dạng số điện thoại theo tiêu chuẩn E164.
- Xoá tất cả dấu chấm (.) đứng trước tên miền trong địa chỉ email
gmail.comvàgooglemail.com.
Nội dung yêu cầu ở định dạng JSON
| Khoá | Loại | Mô tả |
|---|---|---|
| user_id | chuỗi | Giá trị nhận dạng riêng biệt cho một người dùng. Hãy xem bài viết User-ID cho bản phân tích trên nhiều nền tảng để biết thêm thông tin về giá trị nhận dạng này. |
| user_data | đối tượng | Các trường dữ liệu người dùng nâng cao giúp xác định một người dùng. |
| user_data.sha256_email_address[] | mảng chuỗi | Địa chỉ email đã băm và mã hoá của người dùng.
Được chuẩn hoá như sau:
|
| user_data.sha256_phone_number[] | mảng chuỗi | Số điện thoại đã băm và mã hoá của người dùng.
Được chuẩn hoá như sau:
|
| user_data.address[] | mảng | Xác định người dùng dựa trên vị trí thực tế. |
| user_data.address[].sha256_first_name | chuỗi | Tên đã băm và mã hoá của người dùng.
Được chuẩn hoá như sau:
|
| user_data.address[].sha256_last_name | chuỗi | Họ đã băm và mã hoá của người dùng.
Được chuẩn hoá như sau:
|
| user_data.address[].sha256_street | chuỗi | Đường phố và số nhà đã băm và mã hoá của người dùng.
Được chuẩn hoá như sau:
|
| user_data.address[].city | chuỗi | Thành phố trong địa chỉ của người dùng.
Được chuẩn hoá như sau:
|
| user_data.address[].region | chuỗi | Tiểu bang hoặc lãnh thổ cho địa chỉ của người dùng.
Được chuẩn hoá như sau:
|
| user_data.address[].postal_code | chuỗi | Mã bưu chính của địa chỉ người dùng.
Được chuẩn hoá như sau:
|
| user_data.address[].country | chuỗi | Mã quốc gia cho địa chỉ của người dùng. Được định dạng theo tiêu chuẩn ISO 3166-1 alpha-2. |
Hãy xem tài liệu tham khảo về Measurement Protocol để biết thêm thông tin về cách định dạng lớp truyền tải và tải trọng.
Gửi dữ liệu do người dùng cung cấp
Không giống như gtag (tự động băm dữ liệu nhạy cảm do người dùng cung cấp), Measurement Protocol yêu cầu nhà phát triển băm dữ liệu nhạy cảm do người dùng cung cấp bằng thuật toán băm một chiều bảo mật có tên là SHA256 và mã hoá dữ liệu đó bằng định dạng chuỗi thập lục phân trước khi gọi API.
Tất cả các trường dữ liệu người dùng bắt đầu bằng tiền tố sha256 trong tên chỉ được điền bằng các giá trị đã băm và mã hoá thập lục phân.
Đoạn mã ví dụ sau đây thực hiện các bước mã hoá và mã hoá cần thiết:
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));
Để thuận tiện, tất cả các trường lặp lại bên trong đối tượng user_data (chẳng hạn như address, sha256_email_address, sha256_phone_number) có thể được truyền một giá trị đơn lẻ thay vì một mảng.
Mã mẫu sau đây gọi Measurement Protocol và truyền dữ liệu người dùng cùng với 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",
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
}
}
})
});
Nhiều giá trị
Nếu muốn, nhà phát triển có thể cung cấp nhiều giá trị (tối đa 3 giá trị cho số điện thoại và email, và 2 giá trị cho địa chỉ) bằng cách sử dụng giá trị loại mảng thay vì loại chuỗi. Nếu bạn thu thập nhiều giá trị, thì khả năng trùng khớp sẽ cao hơn.
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",
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
}]
}
})
});