পরিমাপ প্রোটোকল ব্যবহার করে ব্যবহারকারী-আইডি সহ ব্যবহারকারী-প্রদত্ত ডেটা পাঠান

gtag ব্যবহারের মতোই, Google Analytics Measurement Protocol ব্যবহার করে ব্যবহারকারীর আইডি সহ ব্যবহারকারী-প্রদত্ত ডেটা পাঠানো সম্ভব, যা আচরণ এবং রূপান্তর পরিমাপ উন্নত করতে ব্যবহার করা যেতে পারে।

ব্যবহারকারীর সরবরাহিত ডেটা পরিমাপ প্রোটোকল অনুরোধের সাথে পাঠাতে, JSON পেলোডে user_data প্যারামিটার যোগ করুন। আমরা সুপারিশ করি যে যখনই user_data প্রদান করা হবে তখনই user_id প্যারামিটারটিও অন্তর্ভুক্ত করুন। এটি সবচেয়ে সঠিক পরিমাপ এবং বৈশিষ্ট্য কার্যকারিতা নিশ্চিত করতে সহায়তা করে।

মেজারমেন্ট প্রোটোকলটি Google Ads API এনহ্যান্সড মেজারমেন্ট ফিচারের মতো একই নরমালাইজেশন এবং হ্যাশিং অ্যালগরিদম ব্যবহার করছে। গোপনীয়তার উদ্বেগের জন্য, আপলোড করার আগে SHA-256 অ্যালগরিদম ব্যবহার করে ইমেল ঠিকানা, ফোন নম্বর, প্রথম নাম, পদবি এবং রাস্তার ঠিকানা হ্যাশ করতে হবে। হ্যাশ করা মানটি হেক্স স্ট্রিং ফর্ম্যাটে (কেবলমাত্র হেক্সাডেসিমেল সংখ্যা ধারণকারী স্ট্রিং অবজেক্ট) এনকোড করা উচিত, যেমন 88d7ecb5c5b21d7b1

হ্যাশ ফলাফলের মান নির্ধারণের জন্য, এই মানগুলির একটি হ্যাশ করার আগে আপনাকে অবশ্যই:

  • লিডিং এবং ট্রেইলিং হোয়াইটস্পেস মুছে ফেলুন।
  • লেখাটিকে ছোট হাতের অক্ষরে রূপান্তর করুন।
  • E164 স্ট্যান্ডার্ড অনুসারে ফোন নম্বরগুলি ফর্ম্যাট করুন।
  • gmail.com এবং googlemail.com ইমেল ঠিকানায় ডোমেন নামের আগে থাকা সমস্ত পিরিয়ড (.) মুছে ফেলুন।

JSON পোস্টের মূল অংশ

চাবি আদর্শ বিবরণ
ব্যবহারকারীর আইডি স্ট্রিং ব্যবহারকারীর জন্য একটি অনন্য শনাক্তকারী। এই শনাক্তকারী সম্পর্কে আরও তথ্যের জন্য ক্রস-প্ল্যাটফর্ম বিশ্লেষণের জন্য ব্যবহারকারী-আইডি দেখুন।
ব্যবহারকারীর_ডেটা বস্তু উন্নত ব্যবহারকারীর ডেটা ক্ষেত্র যা ব্যবহারকারীকে শনাক্ত করে।
ব্যবহারকারীর_ডেটা.sha256_ইমেল_ঠিকানা[] স্ট্রিং অ্যারে ব্যবহারকারীর হ্যাশ করা এবং এনকোড করা ইমেল ঠিকানা। স্বাভাবিকভাবে:
ব্যবহারকারীর_ডেটা.শা২৫৬_ফোন_নম্বর[] স্ট্রিং অ্যারে ব্যবহারকারীর হ্যাশ করা এবং এনকোড করা ফোন নম্বর। স্বাভাবিকভাবে:
  • সমস্ত অ-অঙ্ক অক্ষর মুছে ফেলুন
  • + উপসর্গ যোগ করুন
  • SHA256 অ্যালগরিদম ব্যবহার করে হ্যাশ
  • হেক্স স্ট্রিং ফর্ম্যাট দিয়ে এনকোড করুন।
ব্যবহারকারীর_ডেটা.ঠিকানা[] অ্যারে ভৌত অবস্থানের উপর ভিত্তি করে একজন ব্যবহারকারীকে শনাক্ত করে।
ব্যবহারকারীর_ডেটা.ঠিকানা[].sha256_প্রথম_নাম স্ট্রিং ব্যবহারকারীর প্রথম নাম হ্যাশ এবং এনকোড করা। স্বাভাবিকভাবে:
  • সংখ্যা এবং প্রতীক অক্ষরগুলি সরান
  • ছোট হাতের অক্ষর
  • লিডিং এবং ট্রেইলিং স্পেস মুছে ফেলুন
  • SHA256 অ্যালগরিদম ব্যবহার করে হ্যাশ
  • হেক্স স্ট্রিং ফর্ম্যাট দিয়ে এনকোড করুন।
ব্যবহারকারীর_ডেটা.ঠিকানা[].sha256_শেষ_নাম স্ট্রিং ব্যবহারকারীর শেষ নাম হ্যাশ এবং এনকোড করা। স্বাভাবিকভাবে:
  • সংখ্যা এবং প্রতীক অক্ষরগুলি সরান
  • ছোট হাতের অক্ষর
  • লিডিং এবং ট্রেইলিং স্পেস মুছে ফেলুন
  • SHA256 অ্যালগরিদম ব্যবহার করে হ্যাশ
  • হেক্স স্ট্রিং ফর্ম্যাট দিয়ে এনকোড করুন।
ব্যবহারকারীর_ডেটা.ঠিকানা[].sha256_স্ট্রিট স্ট্রিং ব্যবহারকারীর রাস্তা এবং নম্বর হ্যাশ এবং এনকোড করা হয়েছে। স্বাভাবিকভাবে:
  • প্রতীকী অক্ষরগুলি সরান
  • ছোট হাতের অক্ষর
  • লিডিং এবং ট্রেইলিং স্পেস মুছে ফেলুন
  • SHA256 অ্যালগরিদম ব্যবহার করে হ্যাশ
  • হেক্স স্ট্রিং ফর্ম্যাট দিয়ে এনকোড করুন।
ব্যবহারকারীর_ডেটা.ঠিকানা[].শহর স্ট্রিং ব্যবহারকারীর ঠিকানার জন্য শহর। স্বাভাবিকভাবে:
  • সংখ্যা এবং প্রতীক অক্ষরগুলি সরান
  • ছোট হাতের অক্ষর
  • লিডিং এবং ট্রেইলিং স্পেস মুছে ফেলুন।
ব্যবহারকারীর_ডেটা.ঠিকানা[].অঞ্চল স্ট্রিং ব্যবহারকারীর ঠিকানার জন্য রাজ্য বা অঞ্চল। স্বাভাবিকভাবে:
  • সংখ্যা এবং প্রতীক অক্ষরগুলি সরান
  • ছোট হাতের অক্ষর
  • লিডিং এবং ট্রেইলিং স্পেস মুছে ফেলুন।
ব্যবহারকারীর_ডেটা.ঠিকানা[].পোস্টাল_কোড স্ট্রিং ব্যবহারকারীর ঠিকানার জন্য পোস্টাল কোড। স্বাভাবিকভাবে:
  • . এবং ~ অক্ষরগুলি সরান
  • লিডিং এবং ট্রেইলিং স্পেস মুছে ফেলুন।
ব্যবহারকারীর_ডেটা.ঠিকানা[].দেশ স্ট্রিং ব্যবহারকারীর ঠিকানার জন্য দেশের কোড। 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 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 ) একটি অ্যারের পরিবর্তে একটি একক মান পাস করা যেতে পারে।

নিম্নলিখিত নমুনা কোডটি পরিমাপ প্রোটোকলকে কল করে এবং ব্যবহারকারীর আইডি সহ ব্যবহারকারীর ডেটা প্রেরণ করে।

নোড.জেএস

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

একাধিক মান

ডেভেলপাররা ঐচ্ছিকভাবে একটি স্ট্রিং-এর পরিবর্তে একটি অ্যারে মান ব্যবহার করে একাধিক মান (ফোন এবং ইমেলের জন্য সর্বোচ্চ 3 এবং ঠিকানার জন্য 2) প্রদান করতে পারেন। যদি আপনি একাধিক মান ক্যাপচার করেন, তাহলে এটি প্রদান করলে মিলের সম্ভাবনা বৃদ্ধি পাবে।

নোড.জেএস

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