Tương tự như việc sử dụng gtag, bạn có thể sử dụng Measurement Protocol của Google Analytics cho Google Analytics 4 để 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 hành vi và đo lường 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 thông số
user_data
vào tải trọng JSON. Tham số user_id
phải có mặt bất cứ khi nào user_data
được cung cấp.
Measurement Protocol đang sử dụng cùng một thuật toán chuẩn hoá và băm giống như tính năng Đo lường nâng cao qua API Google Ads.
Đối với các vấn đề về quyền riêng tư, địa chỉ email, số điện thoại, tên, họ và địa chỉ đường phố phải được băm bằng thuật toán SHA-256 trước khi được tải lên. Giá trị đã băm phải được mã hoá theo định dạng chuỗi hex (đối tượng chuỗi chỉ chứa 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ị sau, 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.
- Xóa tất cả dấu chấm (.) đứng trước tên miền trong địa chỉ email
gmail.com
vàgooglemail.com
.
Nội dung của bài đăng JSON
Khoá | Loại | Nội dung mô tả |
---|---|---|
user_id | string | Giá trị nhận dạng duy nhất của 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 sẽ nhận dạng 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 | string | 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 | string | Họ đã băm và mã hoá của người dùng.
Được chuẩn hoá như sau:
|
user_data.address[].sha256_street | string | Đường phố và số người dùng đã băm và được mã hoá.
Được chuẩn hoá như sau:
|
user_data.address[].city | string | Thành phố cho địa chỉ của người dùng.
Được chuẩn hoá như sau:
|
user_data.address[].region | string | Tiểu bang hoặc lãnh thổ trong địa chỉ của người dùng.
Được chuẩn hoá như sau:
|
user_data.address[].postal_code | string | Mã bưu chính cho địa chỉ của người dùng.
Được chuẩn hoá như sau:
|
user_data.address[].country | string | 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 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 đòi hỏi nhà phát triển phải băm dữ liệu nhạy cảm do người dùng cung cấp bằng cách sử dụng thuật toán băm một chiều bảo mật có tên là SHA256 và mã hoá bằng thuật toán băm bằng định dạng chuỗi hex 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 sẵn các giá trị đã băm và được mã hoá theo hệ thập lục phân.
Mã ví dụ sau đây sẽ 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 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));
Là một lối tắt tiện lợi, 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
) đều có thể được truyền một giá trị số ít 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 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
}
}
})
});
Nhiều giá trị
Nhà phát triển có thể tuỳ ý cung cấp nhiều giá trị (tối đa 3 giá trị cho số điện thoại và email, 2 giá trị cho địa chỉ) bằng cách sử dụng giá trị mảng thay vì giá trị chuỗi. Nếu bạn thu thập nhiều giá trị, thì khả năng trùng khớp sẽ tăng lên.
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
}]
}
})
});