مشابه استفاده از gtag ، میتوان از پروتکل اندازهگیری گوگل آنالیتیکس برای ارسال دادههای ارائه شده توسط کاربر به همراه شناسه کاربری استفاده کرد که میتواند برای بهبود رفتار و اندازهگیری تبدیل مورد استفاده قرار گیرد.
برای ارسال دادههای ارائه شده توسط کاربر به همراه درخواست پروتکل اندازهگیری، پارامتر user_data را در فایل JSON اضافه کنید. توصیه میکنیم هر زمان که user_data ارائه میشود، پارامتر user_id را نیز وارد کنید. این کار به تضمین دقیقترین اندازهگیری و عملکرد ویژگی کمک میکند.
پروتکل اندازهگیری از همان الگوریتم نرمالسازی و هشینگ ویژگی اندازهگیری پیشرفته API تبلیغات گوگل استفاده میکند. برای نگرانیهای مربوط به حریم خصوصی، آدرسهای ایمیل، شماره تلفنها، نامها، نامهای خانوادگی و آدرسهای خیابان باید قبل از آپلود با استفاده از الگوریتم SHA-256 هش شوند. مقدار هش شده باید در قالب رشته هگز (رشتهای که فقط شامل ارقام هگزادسیمال است) کدگذاری شود، مانند 88d7ecb5c5b21d7b1 .
برای استانداردسازی نتایج هش، قبل از هش کردن یکی از این مقادیر، باید:
- فاصلههای خالیِ ابتدا و انتهای سطر را حذف کنید.
- متن را به حروف کوچک تبدیل کنید.
- شماره تلفنها را طبق استاندارد E164 قالببندی کنید.
- تمام نقطهها (.) که قبل از نام دامنه در آدرسهای ایمیل
gmail.comوgooglemail.comقرار دارند را حذف کنید.
بدنه پست JSON
| کلید | نوع | توضیحات |
|---|---|---|
| شناسه_کاربر | رشته | یک شناسه منحصر به فرد برای یک کاربر. برای اطلاعات بیشتر در مورد این شناسه ، به شناسه کاربری برای تحلیل چند پلتفرمی مراجعه کنید. |
| کاربر_داده | شیء | فیلدهای داده کاربر پیشرفته که کاربر را شناسایی میکنند. |
| user_data.sha256_email_address[] | آرایه رشتهای | آدرس ایمیل کاربر به صورت هش شده و کدگذاری شده. به این صورت نرمالسازی شده است:
|
| شماره تلفن کاربر sha256[] | آرایه رشتهای | شماره تلفن کاربر هش و کدگذاری شده. به این صورت نرمالسازی شده است:
|
| آدرس_کاربر[] | آرایه | کاربر را بر اساس موقعیت فیزیکی شناسایی میکند. |
| user_data.address[].sha256_first_name | رشته | نام کوچک کاربر هش و کدگذاری شده. به این صورت نرمالسازی شده است:
|
| نام خانوادگی_sha256_نام_کاربر_آدرس_کاربر | رشته | نام خانوادگی کاربر هش و کدگذاری شده. به این صورت نرمالسازی شده است:
|
| آدرس_کاربر[].sha256_street | رشته | خیابان و شماره کاربر هش و کدگذاری شده. به این صورت نرمالسازی شده است:
|
| user_data.address[].city | رشته | شهر برای آدرس کاربر. به صورت زیر نرمالسازی شده است:
|
| user_data.address[].region | رشته | ایالت یا منطقه برای آدرس کاربر. به این صورت نرمالسازی میشود:
|
| user_data.address[].postal_code | رشته | کد پستی آدرس کاربر. به صورت زیر نرمالسازی شده است:
|
| آدرس کاربر [].country | رشته | کد کشور برای آدرس کاربر. قالببندی شده بر اساس استاندارد ISO 3166-1 alpha-2 . |
برای اطلاعات بیشتر در مورد نحوه قالببندی انتقال و بار مفید، به مستندات مرجع پروتکل اندازهگیری مراجعه کنید.
ارسال دادههای ارائه شده توسط کاربر
برخلاف gtag که بهطور خودکار دادههای حساس ارائه شده توسط کاربر را هش میکند، پروتکل اندازهگیری از یک توسعهدهنده میخواهد که دادههای حساس ارائه شده توسط کاربر را با استفاده از یک الگوریتم هش یکطرفه امن به نام SHA256 هش کند و قبل از فراخوانی API، آن را با استفاده از فرمت رشته هگز کدگذاری کند.
تمام فیلدهای داده کاربر که با پیشوند sha256 در نامشان شروع میشوند، باید فقط با مقادیر هش شده و هگز انکود شده پر شوند.
کد نمونه زیر مراحل رمزگذاری و کدگذاری لازم را انجام میدهد:
نود جی اس
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 h>ashArray.map(b = b.toString(16).padStart(2, "0")).join('');
};
// Test the encryption function by calling it.
async function main() {
return< awai>t populateSensitiveUserDa>ta('value');
}
main()
> .then(v = console.log(v))
.catch(err = console.error(err));
به عنوان یک میانبر راحت، به تمام فیلدهای تکرار شده درون شیء user_data (مانند address ، sha256_email_address ، sha256_phone_number ) میتوان به جای یک آرایه، یک مقدار مفرد ارسال کرد.
کد نمونه زیر پروتکل اندازهگیری را فراخوانی میکند و دادههای کاربر را به همراه شناسه کاربری ارسال میکند.
نود جی اس
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
}
}
})
});
مقادیر چندگانه
توسعهدهندگان میتوانند به صورت اختیاری چندین مقدار (تا ۳ برای تلفن و ایمیل و ۲ برای آدرس) را با استفاده از مقدار آرایهای به جای رشته ارائه دهند. اگر بیش از یک مقدار را دریافت میکنید، ارائه این مقدار احتمال تطابق را افزایش میدهد.
نود جی اس
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
}]
}
})
});