เช่นเดียวกับการใช้ gtag, คุณสามารถใช้ Google Analytics Measurement Protocol เพื่อส่งข้อมูลที่ได้จากผู้ใช้ไปพร้อมกับ User-ID ซึ่งใช้เพื่อปรับปรุงการวัดพฤติกรรมและ Conversion
หากต้องการส่งข้อมูลที่ได้จากผู้ใช้ไปพร้อมกับคําขอ Measurement Protocol ให้เพิ่มพารามิเตอร์ user_data ในเพย์โหลด JSON นอกจากนี้ เราขอแนะนําให้คุณใส่พารามิเตอร์ user_id ทุกครั้งที่ระบุ user_data ซึ่งจะช่วยให้การวัดผลและการทํางานของฟีเจอร์มีความแม่นยํามากที่สุด
Measurement Protocol ใช้อัลกอริทึมการแฮชและการแปลงเป็นรูปแบบมาตรฐานแบบเดียวกับ
ฟีเจอร์
การวัดผลที่ปรับปรุงแล้วของ Google Ads API
อีเมล หมายเลขโทรศัพท์ ชื่อจริง นามสกุล
และที่อยู่ต้องได้รับการแฮชโดยใช้อัลกอริทึม
SHA-256 ก่อนที่จะ
อัปโหลด เพื่อไม่ให้เกิดข้อกังวลเกี่ยวกับความเป็นส่วนตัว ค่าที่แฮชควรเข้ารหัสในรูปแบบสตริงเลขฐาน 16 (ออบเจ็กต์สตริงที่มีเฉพาะตัวเลขฐาน 16) เช่น 88d7ecb5c5b21d7b1
ก่อนแฮชค่าใดค่าหนึ่งดังกล่าว คุณต้องทำสิ่งต่อไปนี้เพื่อให้ผลลัพธ์การแฮชเป็นมาตรฐาน
- นําช่องว่างขึ้นต้นและต่อท้ายออก
- แปลงข้อความให้เป็นตัวพิมพ์เล็ก
- จัดรูปแบบหมายเลขโทรศัพท์ตามมาตรฐาน E164
- นําจุด (.) ที่อยู่ก่อนชื่อโดเมนในอีเมล
gmail.comและgooglemail.comออกทั้งหมด
เนื้อหาของคำขอ POST ในรูปแบบ JSON
| คีย์ | ประเภท | คำอธิบาย |
|---|---|---|
| user_id (ไม่บังคับ แต่แนะนํา) | สตริง | ตัวระบุที่ไม่ซ้ำกันสำหรับผู้ใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวระบุนี้ได้ที่ User-ID สําหรับการวิเคราะห์ข้ามแพลตฟอร์ม |
| user_data | ออบเจ็กต์ | ช่องข้อมูลผู้ใช้ที่ปรับปรุงแล้วซึ่งระบุผู้ใช้ |
| user_data.sha256_email_address[] | อาร์เรย์สตริง | อีเมลของผู้ใช้ที่แฮชและเข้ารหัส
แปลงเป็นรูปแบบมาตรฐานดังนี้
|
| user_data.sha256_phone_number[] | อาร์เรย์สตริง | หมายเลขโทรศัพท์ของผู้ใช้ที่แฮชและเข้ารหัส
แปลงเป็นรูปแบบมาตรฐานดังนี้
|
| user_data.address[] | อาร์เรย์ | ระบุผู้ใช้ตามสถานที่ตั้งจริง |
| user_data.address[].sha256_first_name | สตริง | ชื่อจริงของผู้ใช้ที่แฮชและเข้ารหัส
แปลงเป็นรูปแบบมาตรฐานดังนี้
|
| user_data.address[].sha256_last_name | สตริง | นามสกุลของผู้ใช้ที่แฮชและเข้ารหัส
แปลงเป็นรูปแบบมาตรฐานดังนี้
|
| user_data.address[].sha256_street | สตริง | ถนนและหมายเลขของผู้ใช้ที่แฮชและเข้ารหัส
แปลงเป็นรูปแบบมาตรฐานดังนี้
|
| user_data.address[].city | สตริง | เมืองของที่อยู่ผู้ใช้
แปลงเป็นรูปแบบมาตรฐานดังนี้
|
| user_data.address[].region | สตริง | รัฐหรือเขตปกครองของที่อยู่ผู้ใช้
แปลงเป็นรูปแบบมาตรฐานดังนี้
|
| user_data.address[].postal_code | สตริง | รหัสไปรษณีย์ของที่อยู่ผู้ใช้
แปลงเป็นรูปแบบมาตรฐานดังนี้
|
| user_data.address[].country | สตริง | รหัสประเทศของที่อยู่ผู้ใช้ จัดรูปแบบตามมาตรฐาน ISO 3166-1 alpha-2 |
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีจัดรูปแบบการรับส่งข้อมูลและเพย์โหลดได้ที่เอกสารอ้างอิง Measurement Protocol
ส่งข้อมูลที่ได้จากผู้ใช้
Measurement Protocol กำหนดให้นักพัฒนาซอฟต์แวร์แฮชข้อมูลที่ได้จากผู้ใช้ที่เป็นข้อมูลละเอียดอ่อนโดยใช้อัลกอริทึมการแฮชทางเดียวแบบปลอดภัยที่เรียกว่า SHA256 และเข้ารหัสโดยใช้รูปแบบ สตริงเลขฐาน 16 ก่อนที่จะเรียก API ซึ่งแตกต่างจากgtagที่ แฮชข้อมูลที่ได้จากผู้ใช้ที่เป็นข้อมูลละเอียดอ่อนโดยอัตโนมัติ
ช่องข้อมูลผู้ใช้ทั้งหมดที่ขึ้นต้นด้วยคํานําหน้า 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 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));
เพื่อความสะดวก คุณสามารถส่งค่าเดียวแทนอาร์เรย์ไปยังช่องที่ซ้ำทั้งหมดภายในออบเจ็กต์ user_data
(เช่น address, sha256_email_address, sha256_phone_number) ได้
โค้ดตัวอย่างต่อไปนี้จะเรียก Measurement Protocol และส่งข้อมูลผู้ใช้ไปพร้อมกับ 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
}
}
})
});
หลายค่า
นักพัฒนาซอฟต์แวร์ระบุค่าหลายค่าได้ (ไม่เกิน 3 ค่าสำหรับโทรศัพท์และอีเมล และ 2 ค่าสำหรับที่อยู่) โดยใช้ค่าอาร์เรย์แทนการใช้สตริง หากบันทึกมากกว่า 1 ค่า จะเพิ่มโอกาสในการจับคู่มากยิ่งขึ้น
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
}]
}
})
});