মেসেজ ডেলিভারি সম্পর্কে বোঝা

মেসেজ ডেলিভারি না হওয়ার সমস্যা সমাধান করতে, FCM সমস্যার সমাধানকারী ব্যবহার করুন এবং এই ব্লগ পোস্ট দেখুন যাতে আপনি মেসেজ না দেখতে পাওয়ার বিভিন্ন কারণ বুঝতে পারেন। এছাড়াও, আপনি FCM স্ট্যাটাস ড্যাশবোর্ড দেখতে পারেন যাতে FCM-কে প্রভাবিত করে এমন কোনও পরিষেবা বিঘ্নিত হচ্ছে কিনা তা শনাক্ত করতে পারেন।

এছাড়াও, FCM তিনটি টুল সেট প্রদান করে যা আপনাকে মেসেজিংয়ের সাফল্য এবং কৌশলের বিস্তৃত মূল্যায়নের বিষয়ে ইনসাইট পেতে সাহায্য করে:

  • Firebaseটি কনসোল মেসেজ ডেলিভারি রিপোর্ট
  • Firebase Cloud Messaging Data API থেকে এগ্রিগেট করা Android SDK ডেলিভারি মেট্রিক
  • Google BigQuery-তে বিস্তারিত ডেটা এক্সপোর্ট

BigQuery-এ ডেটা এক্সপোর্ট করা এবং Firebase কনসোলে রিপোর্ট ট্যাব দু'টিই কাজ করার জন্য Google Analytics প্রয়োজন। আপনি Firebase কনসোলের সেটিংস > ইন্টিগ্রেশন ট্যাবে Google Analytics চালু করতে পারবেন। Google Analytics কাজ করার জন্য অ্যাগ্রিগেটেড ডেলিভারি ডেটা-এর প্রয়োজন হয় না।

মনে রাখবেন, এই পৃষ্ঠায় দেখানো অনেক পরিসংখ্যানের রিপোর্ট, অ্যানালিটিক্স ডেটা ব্যাচিংয়ের কারণে ২৪ ঘণ্টা পর্যন্ত দেরিতে আপডেট হতে পারে।

মেসেজ ডেলিভারি রিপোর্ট

Firebase কনসোলে, DevOps ও এনগেজমেন্ট > মেসেজিং > রিপোর্ট ট্যাবে যান যাতে Android বা Apple প্ল্যাটফর্ম FCM SDK-তে পাঠানো মেসেজের জন্য নিম্নলিখিত ডেটা দেখতে পান, এর মধ্যে বিজ্ঞপ্তি কম্পোজার এবং FCM API ব্যবহার করে পাঠানো মেসেজও অন্তর্ভুক্ত:

  • পাঠানো হয়েছে — ডেটা মেসেজ বা বিজ্ঞপ্তি মেসেজ ডেলিভারির জন্য এনকিউ করা হয়েছে অথবা ডেলিভারির জন্য APNs-এর মতো থার্ড-পার্টি পরিষেবায় সফলভাবে পাঠানো হয়েছে। মনে রাখবেন, পাঠানোর পরিসংখ্যান কয়েক ঘণ্টা দেরিতে আপডেট হতে পারে। আরও তথ্যের জন্য মেসেজের লাইফটাইম দেখুন।
  • রিসিভ করা হয়েছে (শুধুমাত্র Android ডিভাইসে উপলভ্য) — অ্যাপ ডেটা মেসেজ বা বিজ্ঞপ্তি মেসেজ রিসিভ করেছে। এই ডেটা তখনই উপলভ্য হয় যখন রিসিভ করা Android ডিভাইসে FCM SDK 18.0.1 বা তার পরবর্তী ভার্সন ইনস্টল করা থাকে।
  • ইম্প্রেশন (শুধুমাত্র Android ডিভাইসে বিজ্ঞপ্তি মেসেজের জন্য উপলভ্য) — অ্যাপ ব্যাকগ্রাউন্ডে চলাকালীন ডিভাইসে ডিসপ্লে বিজ্ঞপ্তি দেখানো হয়েছে।
  • খোলা হয়েছে — ব্যবহারকারী বিজ্ঞপ্তি মেসেজ খুলেছেন। অ্যাপ ব্যাকগ্রাউন্ডে থাকাকালীন পাওয়া বিজ্ঞপ্তির জন্য রিপোর্ট করা হয়।

বিজ্ঞপ্তি পেলোড সহ সব মেসেজ এবং সব লেবেল করা ডেটা মেসেজের জন্য এই ডেটা উপলভ্য। লেবেল সম্পর্কে আরও জানতে, মেসেজে অ্যানালিটিক্স লেবেল যোগ করা দেখুন।

মেসেজ রিপোর্ট দেখার সময়, আপনি CSV-তে এক্সপোর্ট করার বিকল্প সহ, দেখানো ডেটার জন্য তারিখের রেঞ্জ সেট করতে পারবেন। এছাড়াও, আপনি এইসব মাপকাঠি অনুযায়ী ফিল্টার করতে পারবেন:

  • প্ল্যাটফর্ম (iOS বা Android)
  • অ্যাপ
  • পছন্দমতো অ্যানালিটিক্স লেবেল

মেসেজে অ্যানালিটিক্স লেবেল যোগ করা হচ্ছে

কাস্টম বিশ্লেষণের জন্য মেসেজে লেবেল যোগ করা খুবই উপযোগী, এর ফলে আপনি লেবেল বা লেবেলের সেট অনুযায়ী ডেলিভারি পরিসংখ্যান ফিল্টার করতে পারবেন। HTTP v1 API ব্যবহার করে পাঠানো যেকোনও মেসেজে আপনি লেবেল যোগ করতে পারেন। এর জন্য message অবজেক্টে অথবা প্ল্যাটফর্ম-নির্দিষ্ট AndroidFcmOptions বা ApnsFcmOptions ফিল্ডে fcmOptions.analyticsLabel সেট করুন।

Analytics লেবেল হল ^[a-zA-Z0-9-_.~%]{1,50}$ ফর্ম্যাটে টেক্সট স্ট্রিং। লেবেলে ছোট ও বড় হাতের অক্ষর, সংখ্যা এবং নিম্নলিখিত চিহ্ন থাকতে পারে:

  • -
  • ~
  • %

সর্বাধিক ৫০টি অক্ষর লেখা যাবে। আপনি প্রতিদিন সর্বাধিক ১০০টি অনন্য লেবেল নির্দিষ্ট করতে পারবেন; এই সীমার বাইরে যোগ করা লেবেল সহ মেসেজ রিপোর্ট করা হয় না।

Firebase কনসোল মেসেজিং রিপোর্ট ট্যাবে, আপনি আগে থেকে থাকা সব লেবেলের তালিকা সার্চ করতে এবং দেখানো পরিসংখ্যান ফিল্টার করতে সেগুলি আলাদাভাবে বা একসাথে প্রয়োগ করতে পারবেন।

FCM Data API ব্যবহার করে ডেলিভারি সংক্রান্ত এগ্রিগেট করা ডেটা

Firebase Cloud Messaging Data API আপনাকে এমন তথ্য ফিরিয়ে আনতে দেয় যা Android অ্যাপ্লিকেশনে টার্গেট করা মেসেজ সংক্রান্ত অনুরোধের ফলাফল বুঝতে আপনাকে সাহায্য করতে পারে। API, কোনও প্রোজেক্টে ডেটা সংগ্রহ চালু আছে এমন সব Android ডিভাইস থেকে সংগৃহীত ডেটা প্রদান করে। এর মধ্যে অন্তর্ভুক্ত হল বিলম্ব ছাড়াই ডেলিভার করা মেসেজের শতাংশ এবং কতগুলি মেসেজ বিলম্বিত বা Android ট্রান্সপোর্ট লেয়ারের মধ্যে ড্রপ করা হয়েছে। এই ডেটা মূল্যায়ন করলে মেসেজ ডেলিভারি সংক্রান্ত সামগ্রিক ট্রেন্ড সম্পর্কে জানা যায় এবং এর ফলে আপনি আপনার পাঠানোর অনুরোধের পারফর্ম্যান্স উন্নত করার কার্যকর উপায় খুঁজে পেতে পারেন। রিপোর্টে তারিখের রেঞ্জ উপলভ্যতার ব্যাপারে তথ্য পেতে এগ্রিগেট ডেটা টাইমলাইন দেখুন।

API কোনও নির্দিষ্ট অ্যাপ্লিকেশনের জন্য উপলভ্য সব ডেটা প্রদান করে। API রেফারেন্স ডকুমেন্টেশন দেখুন।

ডেটা কীভাবে ভাগ করা হয়?

ডেলিভারি ডেটা অ্যাপ্লিকেশন, তারিখ এবং অ্যানালিটিক্স লেবেল অনুযায়ী ভাগ করা হয়। API-তে কল করলে, তারিখ, অ্যাপ্লিকেশন ও অ্যানালিটিক্স লেবেলের প্রতিটি কম্বিনেশনের জন্য ডেটা পাওয়া যাবে। যেমন, একটি androidDeliveryData JSON অবজেক্ট দেখতে এইরকম হবে:

 {
  "appId": "1:23456789:android:a93a5mb1234efe56",
  "date": {
    "year": 2021,
    "month": 1,
    "day": 1
  },
  "analyticsLabel": "foo",
  "data": {
    "countMessagesAccepted": "314159",
    "messageOutcomePercents": {
      "delivered": 71,
      "pending": 15
    },
   "deliveryPerformancePercents": {
      "deliveredNoDelay": 45,
      "delayedDeviceOffline": 11
    }
  }

মেট্রিক কীভাবে ব্যাখ্যা করতে হয়

ডেলিভারি ডেটা থেকে নিম্নলিখিত প্রতিটি মেট্রিকের সাথে মানানসই মেসেজের শতাংশের আউটলাইন পাওয়া যায়। একটি মেসেজ একাধিক মেট্রিকের সাথে মানানসই হতে পারে। আমরা যেভাবে ডেটা সংগ্রহ করি এবং যে লেভেলে মেট্রিক্স এগ্রিগেট করি, তার সীমাবদ্ধতার কারণে, কিছু মেসেজের ফলাফল মেট্রিক্সে দেখানো হয় না, তাই নিচের শতাংশের যোগফল ১০০% হবে না।

অ্যাক্সেপ্ট করা মেসেজের সংখ্যা

ডেটা সেটে শুধুমাত্র সেইসব মেসেজের সংখ্যা অন্তর্ভুক্ত করা হয় যেগুলি Android ডিভাইসে ডেলিভারি করার জন্য FCM গ্রহণ করেছে। সব শতাংশের ক্ষেত্রে এই ভ্যালুকে হর হিসেবে ব্যবহার করা হয়। মনে রাখবেন, এই সংখ্যায় সেইসব মেসেজ অন্তর্ভুক্ত থাকবে না যেগুলি সেইসব ব্যবহারকারীদের টার্গেট করে পাঠানো হয়েছে যারা তাদের ডিভাইসে ব্যবহার ও ডায়াগনস্টিক তথ্য সংগ্রহ করা বন্ধ করে দিয়েছেন।

মেসেজ আউটকাম শতকরা হার

MessageOutcomePercents অবজেক্টে অন্তর্ভুক্ত ফিল্ড মেসেজ অনুরোধের ফলাফল সম্পর্কে তথ্য প্রদান করে। বিভাগগুলি সব পারস্পরিকভাবে স্বতন্ত্র। এটি "আমার মেসেজ কি ডেলিভার হচ্ছে?" এবং "কী কারণে মেসেজ ড্রপ হচ্ছে?" ইত্যাদি প্রশ্নের উত্তর দিতে পারে।

যেমন, droppedTooManyPendingMessages ফিল্ডের জন্য বেশি ভ্যালু থাকলে তা থেকে বোঝা যেতে পারে যে অ্যাপ ইনস্ট্যান্স নন-কোলাপসিবল মেসেজের ভলিউম রিসিভ করছে যা FCM-এর ১০০টি পেন্ডিং মেসেজের সীমা অতিক্রম করছে। এটি কমানোর জন্য, আপনার অ্যাপ যেন onDeletedMessages-এ কল হ্যান্ডেল করতে পারে তা নিশ্চিত করুন এবং কলাপ্স করা যায় এমন মেসেজ পাঠানোর কথা বিবেচনা করুন। একইভাবে, droppedDeviceInactive-এর জন্য বেশি শতাংশ আপনার সার্ভারে রেজিস্ট্রেশন টোকেন আপডেট করার, পুরনো টোকেন সরিয়ে দেওয়ার এবং বিষয় থেকে সেগুলি আনসাবস্ক্রাইব করার সিগন্যাল হতে পারে। এই বিষয়ে পেশাদার পদ্ধতি সম্পর্কে জানতে FCM রেজিস্ট্রেশন টোকেন ম্যানেজ করুন দেখুন।

ডেলিভারি পারফর্ম্যান্সের শতাংশ

DeliveryPerformancePercents অবজেক্টের ফিল্ডগুলি সফলভাবে ডেলিভার করা মেসেজ সম্পর্কে তথ্য প্রদান করে। এটি "আমার মেসেজ কি দেরিতে পৌঁছেছে?" এবং "মেসেজ দেরিতে পৌঁছানোর কারণ কী?" যেমন, delayedMessageThrottled-এর জন্য বেশি ভ্যালু থাকলে তা স্পষ্টভাবে দেখায় যে আপনি ডিভাইস প্রতি সর্বাধিক সীমা অতিক্রম করছেন, এবং আপনি যে হারে মেসেজ পাঠাচ্ছেন তা অ্যাডজাস্ট করা উচিত।

মেসেজ ইনসাইট শতাংশ

এই অবজেক্টটি পাঠানো সমস্ত মেসেজ সম্পর্কে অতিরিক্ত তথ্য প্রদান করে। priorityLowered ফিল্ডটি গৃহীত মেসেজের শতাংশ প্রকাশ করে যেগুলির অগ্রাধিকার HIGH থেকে NORMAL-এ নামানো হয়েছে। এই ভ্যালু বেশি হলে, কম বেশি অগ্রাধিকারযুক্ত মেসেজ পাঠানোর চেষ্টা করুন অথবা নিশ্চিত করুন যে বেশি অগ্রাধিকারযুক্ত মেসেজ পাঠানো হলে আপনি সবসময় বিজ্ঞপ্তি দেখান। আরও তথ্যের জন্য মেসেজের অগ্রাধিকার সংক্রান্ত আমাদের ডকুমেন্টেশন দেখুন

BigQuery-তে এক্সপোর্ট করা ডেটার থেকে এই ডেটা কীভাবে আলাদা?

BigQuery এক্সপোর্ট, FCM ব্যাকএন্ডের মেসেজ গ্রহণ করা এবং ডিভাইসে SDK-এর মাধ্যমে মেসেজ ডেলিভারি করা সংক্রান্ত আলাদা আলাদা মেসেজ লগ প্রদান করে (FCM আর্কিটেকচারের ২ ও ৪ নম্বর ধাপ)। স্বতন্ত্র মেসেজ গ্রহণ ও ডেলিভার করা হয়েছে কিনা তা নিশ্চিত করার জন্য এই ডেটা কাজে লাগে। পরের বিভাগে BigQuery ডেটা এক্সপোর্ট সম্পর্কে আরও পড়ুন।

এর বিপরীতে, Firebase Cloud Messaging Data API, Android ট্রান্সপোর্ট লেয়ারে (বা FCM আর্কিটেকচারের ৩ নম্বর ধাপে) নির্দিষ্টভাবে কী ঘটে সেই সম্পর্কে এগ্রিগেট করা বিবরণ প্রদান করে। এই ডেটা বিশেষ করে FCM ব্যাকএন্ড থেকে Android SDK-তে মেসেজ ডেলিভারি সম্পর্কে ইনসাইট প্রদান করে। এই ট্রান্সপোর্টের সময় মেসেজ কেন দেরিতে এসেছে বা ড্রপ হয়েছে সেই সংক্রান্ত ট্রেন্ড দেখানোর জন্য এটি বিশেষভাবে উপযোগী।

কিছু ক্ষেত্রে, নিম্নলিখিত কারণে দুটি ডেটা সেট হুবহু নাও মিলতে পারে:

  • এগ্রিগেট করা মেট্রিক শুধুমাত্র সব মেসেজের একটি অংশ স্যাম্পেল করে
  • মোটামুটি মেট্রিক রাউন্ড ফিগার হিসেবে দেখানো হয়
  • গোপনীয়তা থ্রেশহোল্ডের নিচে থাকা মেট্রিক আমরা দেখাই না
  • আমরা যেভাবে বিপুল পরিমাণ ট্রাফিক ম্যানেজ করি তা অপ্টিমাইজ করার কারণে মেসেজের ফলাফলের একটি অংশ মিস হয়ে গেছে।

API-এর সীমাবদ্ধতা

মোট ডেটা টাইমলাইন

API ৭ দিনের পুরনো ডেটা রিটার্ন করবে; তবে, এই API-এর মাধ্যমে রিটার্ন করা ডেটা ৫ দিন পর্যন্ত দেরিতে দেখানো হবে। যেমন, ২০ জানুয়ারি, ৯ জানুয়ারি - ১৫ জানুয়ারির ডেটা উপলভ্য হবে, কিন্তু ১৬ জানুয়ারি বা তার পরের ডেটা উপলভ্য হবে না। এছাড়াও, ডেটা যথাসাধ্য প্রদান করা হয়। ডেটা আউটএজ হলে, FCM সমস্যাটি সমাধান করার জন্য কাজ করবে এবং সমস্যাটি সমাধান হওয়ার পরে ডেটা ব্যাকফিল করবে না। বড় ধরনের বিভ্রাটের ক্ষেত্রে, এক সপ্তাহ বা তার বেশি সময় ধরে ডেটা উপলভ্য নাও হতে পারে।

ডেটা কভারেজ

Firebase Cloud Messaging ডেটা API-এর মাধ্যমে প্রদান করা মেট্রিক্সের উদ্দেশ্য হল মেসেজ ডেলিভারির সামগ্রিক ট্রেন্ড সম্পর্কে ইনসাইট প্রদান করা। তবে, এগুলি সব মেসেজ সিনারিওতে ১০০% কভারেজ প্রদান করে না। নিম্নলিখিত পরিস্থিতিগুলি হল পরিচিত ফলাফল যা মেট্রিক্সে প্রতিফলিত হয় না।

মেয়াদ শেষ হয়ে যাওয়া মেসেজ

প্রদত্ত লগ তারিখ শেষ হওয়ার পরে টাইম টু লিভ (TTL) এর মেয়াদ শেষ হয়ে গেলে, মেসেজটিকে এই তারিখে droppedTtlExpired হিসেবে গণ্য করা হবে না।

ইনঅ্যাক্টিভ ডিভাইসে মেসেজ

ইনঅ্যাক্টিভ ডিভাইসে পাঠানো মেসেজ, কোন ডেটা পাথ ব্যবহার করে পাঠানো হয়েছে তার উপর নির্ভর করে, ডেটাসেটে দেখানো হতেও পারে বা নাও হতে পারে। এর ফলে droppedDeviceInactive ও pending ফিল্ডে কিছু ভুল গণনা হতে পারে।

নির্দিষ্ট ব্যবহারকারীর পছন্দ অনুযায়ী ডিভাইসে মেসেজ

যেসব ব্যবহারকারী তাদের ডিভাইসে ব্যবহার ও ডায়াগনস্টিক তথ্য সংগ্রহ করার বিকল্প বন্ধ করে দিয়েছেন, তাদের পছন্দ অনুযায়ী, আমাদের গণনায় তাদের মেসেজ অন্তর্ভুক্ত করা হবে না।

পূর্ণসংখ্যায় পরিণত করা এবং ন্যূনতম

FCM ইচ্ছাকৃতভাবে রাউন্ড করে এবং যেখানে ভলিউম যথেষ্ট বড় নয় সেখানে গণনা বাদ দেয় ।

BigQuery ডেটা এক্সপোর্ট

আরও বিশ্লেষণের জন্য আপনি নিজের মেসেজ ডেটা BigQuery-তে এক্সপোর্ট করতে পারবেন। BigQuery আপনাকে BigQuery SQL ব্যবহার করে ডেটা বিশ্লেষণ করতে, অন্য ক্লাউড প্রোভাইডারে এক্সপোর্ট করতে বা আপনার কাস্টম ML মডেলের জন্য ডেটা ব্যবহার করতে দেয়। BigQuery-তে এক্সপোর্ট করার সময় মেসেজের ধরন বা মেসেজটি API বা বিজ্ঞপ্তি কম্পোজার ব্যবহার করে পাঠানো হয়েছে কিনা তা নির্বিশেষে মেসেজের জন্য উপলভ্য সব ডেটা অন্তর্ভুক্ত থাকে।

নিম্নলিখিত FCM SDK ন্যূনতম ভার্সন সহ ডিভাইসে পাঠানো মেসেজের জন্য, আপনার অ্যাপের মেসেজ ডেলিভারি ডেটা এক্সপোর্ট করার সুবিধা চালু করার অতিরিক্ত বিকল্প আপনার কাছে আছে:

  • Android 20.1.0 বা তার পরবর্তী যেকোনও ভার্সন।
  • iOS 8.6.0 বা তার পরবর্তী যেকোনও ভার্সন
  • Firebase Web SDK 12.14.0 বা তার পরবর্তী যেকোনও ভার্সন

শুরু করতে, Firebase কনসোল ব্যবহার করে আপনার প্রোজেক্ট BigQuery-এর সাথে লিঙ্ক করুন:

  1. নিম্নলিখিত বিকল্পগুলির মধ্যে থেকে যেকোনও একটি বেছে নিন:

    • DevOps ও এনগেজমেন্ট > মেসেজিং > বিজ্ঞপ্তি কম্পোজার বিকল্পে যান, তারপর পৃষ্ঠার নিচে BigQuery অ্যাক্সেস করুন বিকল্পে ক্লিক করুন।

    • সেটিংস > ইন্টিগ্রেশন ট্যাব বিকল্পে যান। তারপর BigQuery-এ, লিঙ্ক করুন বিকল্পে ক্লিক করুন।

      এই পৃষ্ঠায় প্রোজেক্টে FCM চালু করা সব অ্যাপের জন্য FCM এক্সপোর্ট করার বিকল্প দেখানো হয়।

  2. BigQuery চালু করতে অন-স্ক্রিন নির্দেশাবলী অনুসরণ করুন।

আরও তথ্যের জন্য Firebase-কে BigQuery-এর সাথে লিঙ্ক করুন লিঙ্কটি দেখুন।

Cloud Messaging-এর জন্য BigQuery এক্সপোর্ট করার সুবিধা চালু করলে:

  • Firebase আপনার ডেটা BigQuery-এ এক্সপোর্ট করে। মনে রাখবেন যে এক্সপোর্টের জন্য ডেটার প্রাথমিক প্রোপাগেশন সম্পূর্ণ হতে ৪৮ ঘণ্টা পর্যন্ত সময় লাগতে পারে।

  • ডেটাসেট তৈরি করার পরে, লোকেশন পরিবর্তন করা যায় না, তবে আপনি ডেটাসেটটি অন্য লোকেশনে কপি করতে অথবা অন্য লোকেশনে ডেটাসেটটি ম্যানুয়ালি সরাতে (আবার তৈরি করতে) পারবেন। আরও জানতে, ডেটা সেটের লোকেশন পরিবর্তন করুন দেখুন।

  • Firebase আপনার Firebase প্রোজেক্ট থেকে BigQuery-এ আপনার ডেটার নিয়মিত সিঙ্ক সেট-আপ করে। এইসব দৈনিক এক্সপোর্ট অপারেশন প্যাসিফিক টাইম অনুযায়ী ভোর ৪:০০টায় শুরু হয় এবং সাধারণত ২৪ ঘণ্টার মধ্যে শেষ হয়।

  • ডিফল্ট হিসেবে, আপনার প্রোজেক্টের সব অ্যাপ BigQuery-এর সাথে লিঙ্ক করা থাকে এবং আপনি পরে প্রোজেক্টে যেসব অ্যাপ যোগ করেন সেগুলি অটোমেটিক BigQuery-এর সাথে লিঙ্ক হয়ে যায়। আপনি কোন অ্যাপ ডেটা পাঠাবে তা ম্যানেজ করতে পারবেন।

BigQuery এক্সপোর্টBigQuery ডিঅ্যাক্টিভেট করতে, আপনার প্রোজেক্ট আনলিঙ্ক করুন Firebase কনসোলে।

মেসেজ ডেলিভারি ডেটা এক্সপোর্ট চালু করুন

iOS+

FCM SDK 8.6.0 বা এর পরের যেকোনও ভার্সন সহ iOS ডিভাইস, তাদের অ্যাপের মেসেজ ডেলিভারি ডেটা এক্সপোর্ট করার সুবিধা চালু করতে পারবে। FCM সতর্কতা ও ব্যাকগ্রাউন্ড বিজ্ঞপ্তি, দুটির ক্ষেত্রেই ডেটা এক্সপোর্ট করার সুবিধা দেয়। ডেটা এক্সপোর্ট করার সুবিধা ডিফল্ট হিসেবে অ্যাপ লেভেলে বন্ধ করা থাকে। প্রোগ্রাম্যাটিক্যালি এটি অ্যাপ ইনস্ট্যান্স লেভেলে চালু করলে, আপনি ব্যবহারকারীদের মেসেজ ডেলিভারি ডেটা বিশ্লেষণ করার অনুমতি চাইতে পারবেন (প্রস্তাবিত)। দুটিই সেট করা থাকলে, অ্যাপ ইনস্ট্যান্স লেভেল ভ্যালু, অ্যাপ লেভেল ভ্যালুকে ওভাররাইড করে।

এইসব বিকল্প চালু করার আগে, আপনাকে অবশ্যই BigQuery ডেটা এক্সপোর্ট লিঙ্কে বর্ণিত পদ্ধতি অনুযায়ী প্রথমে আপনার প্রোজেক্টের জন্য FCM-BiqQuery লিঙ্ক তৈরি করতে হবে।

সতর্কতা বিজ্ঞপ্তির জন্য ডেলিভারি ডেটা এক্সপোর্ট চালু করুন

শুধুমাত্র সতর্কতা বিজ্ঞপ্তিই বিজ্ঞপ্তি পরিষেবা অ্যাপ এক্সটেনশন ট্রিগার করতে পারে বলে, আপনাকে অ্যাপে বিজ্ঞপ্তি পরিষেবা এক্সটেনশন যোগ করতে হবে এবং ডিসপ্লে মেসেজ ট্র্যাকিং চালু করতে পরিষেবা এক্সটেনশনের মধ্যে এই API কল করতে হবে। নতুন করে ডেলিভার করা বিজ্ঞপ্তিতে কন্টেন্ট পরিবর্তন করা সংক্রান্ত Apple-এর ডকুমেন্ট দেখুন

প্রতিটি বিজ্ঞপ্তি পাওয়ার পরে নিম্নলিখিত কল করতে হবে:

Swift

// For alert notifications, call the API inside the service extension:
class NotificationService: UNNotificationServiceExtension {
  override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
    Messaging.serviceExtension().exportDeliveryMetrics(withMessageInfo:request.content.userInfo)
  }
}

Objective-C

// For alert notifications, call the API inside the service extension:
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
                   withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:request.content.userInfo];
}
@end

আপনি HTTP v1 API ব্যবহার করে পাঠানোর অনুরোধ তৈরি করলে, পেলোড অবজেক্টে `mutable-content = 1` উল্লেখ করতে ভুলবেন না।

ব্যাকগ্রাউন্ড বিজ্ঞপ্তির জন্য ডেলিভারি ডেটা এক্সপোর্ট করার সুবিধা চালু করা

অ্যাপ ফোরগ্রাউন্ড বা ব্যাকগ্রাউন্ডে থাকার সময় ব্যাকগ্রাউন্ড মেসেজ পেলে, আপনি মূল অ্যাপের ডেটা মেসেজ হ্যান্ডলারের মধ্যে ডেটা এক্সপোর্ট API কল করতে পারেন। প্রতিটি বিজ্ঞপ্তি পাওয়ার জন্য এই কলটি করতেই হবে:

Swift

// For background notifications, call the API inside the
// UIApplicationDelegate or NSApplicationDelegate method:
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
  Messaging.serviceExtension().exportDeliveryMetricsToBigQuery(withMessageInfo:userInfo)
}

Objective-C

// For background notifications, call the API inside the
// UIApplicationDelegate or NSApplicationDelegate method:
@implementation AppDelegate
- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  [[FIRMessaging extensionHelper] exportDeliveryMetricsToBigQueryWithMessageInfo:userInfo];
}
@end

Android

FCM SDK 20.1.0 বা তার পরবর্তী যেকোনও ভার্সন থাকা Android ডিভাইস অ্যাপের মেসেজ ডেলিভারি ডেটা এক্সপোর্ট করার সুবিধা চালু করতে পারে। ডেটা এক্সপোর্ট করার সুবিধা ডিফল্ট হিসেবে অ্যাপ লেভেলে বন্ধ করা থাকে। অ্যাপ ইনস্ট্যান্স লেভেলে প্রোগ্রাম্যাটিক্যালি এটি চালু করলে, আপনি ব্যবহারকারীর মেসেজ ডেলিভারি ডেটা বিশ্লেষণ করার অনুমতি চাইতে পারবেন (প্রস্তাবিত)। দুটিই সেট করা থাকলে, অ্যাপ ইনস্ট্যান্স লেভেল ভ্যালু, অ্যাপ লেভেল ভ্যালুকে ওভাররাইড করে।

এইসব বিকল্প চালু করার আগে, আপনাকে প্রথমে FCM-BiqQuery লিঙ্ক তৈরি করতে হবে, যেমনটি BigQuery ডেটা এক্সপোর্ট-এ বর্ণনা করা হয়েছে।

অ্যাপ ইনস্ট্যান্সের জন্য ডেলিভারি ডেটা এক্সপোর্ট করার সুবিধা চালু করা

বেশিরভাগ ক্ষেত্রে, আমরা সাজেস্ট করি যে আপনি মেসেজ ডেলিভারি ডেটা এক্সপোর্ট করার সুবিধা শুধুমাত্র অ্যাপ ইনস্ট্যান্স লেভেলে চালু করুন এবং অ্যাপ লেভেলে এটি বন্ধ রাখুন।

FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true);

কোনও অ্যাপের জন্য ডেলিভারি ডেটা এক্সপোর্ট চালু করা

আপনি যদি অ্যাপ লেভেলে এক্সপোর্ট করার সুবিধা চালু করতে চান, তাহলে setDeliveryMetricsExportToBigQuery মেথড কল করবেন না এবং আপনার অ্যাপ ম্যানিফেস্টে অ্যাপ্লিকেশন অবজেক্টে নিম্নলিখিত প্রপার্টি যোগ করুন:

<application>
  <meta-data android:name="delivery_metrics_exported_to_big_query_enabled"
      android:value="true" />
</application>

ওয়েব

FCM SDK for Web 12.14.0 বা তার পরবর্তী যেকোনও ভার্সন ডেলিভারি ডেটা এক্সপোর্ট করার অনুমতি দেয়। অ্যাপ লেভেলে ডেটা এক্সপোর্ট করার সুবিধা ডিফল্ট হিসেবে বন্ধ করা থাকে। প্রোগ্রাম্যাটিক্যালি এটি অ্যাপ ইনস্ট্যান্স লেভেলে চালু করলে, আপনি ব্যবহারকারীদের থেকে তাদের মেসেজ ডেলিভারি ডেটা বিশ্লেষণ করার অনুমতি চাইতে পারবেন (প্রস্তাবিত)। দুটিই সেট করা থাকলে, অ্যাপ ইনস্ট্যান্স লেভেল ভ্যালু অ্যাপ লেভেল ভ্যালুকে ওভাররাইড করে। কোনও ব্যবহারকারী ডেটা সংগ্রহ করার ব্যাপারে সম্মতি দিলে বা তা প্রত্যাখ্যান করলে, অ্যাপকে প্রতিটি অ্যাপ ইনস্ট্যান্সের জন্য পরীক্ষামূলক চালু বা বন্ধ করার ফ্ল্যাগ সেট করতে হবে, যেমনটি দেখানো হয়েছে:

// userConsent holds the decision of the user to give big query export consent.
const userConsent = ...;

const messaging = getMessagingInSw(app);

experimentalSetDeliveryMetricsExportedToBigQueryEnabled(messaging, userConsent);

BigQuery-তে কোন ডেটা এক্সপোর্ট করা হয়?

মনে রাখবেন, পুরনো টোকেন বা ইনঅ্যাক্টিভ রেজিস্ট্রেশন টার্গেট করলে, এইসব পরিসংখ্যানের কিছু বেড়ে যেতে পারে।

এক্সপোর্ট করা টেবিলের স্কিমা হল:

_PARTITIONTIME টাইমস্ট্যাম্প এই ছদ্ম কলামে দিনের শুরুর (UTC-তে) টাইমস্ট্যাম্প থাকে যেখানে ডেটা লোড করা হয়েছে। YYYYMMDD পার্টিশনের জন্য, এই ছদ্ম কলামে TIMESTAMP('YYYY-MM-DD') ভ্যালু থাকে।
event_timestamp টাইমস্ট্যাম্প সার্ভার দ্বারা রেকর্ড করা ইভেন্ট টাইমস্ট্যাম্প
project_number ইন্টিজার প্রোজেক্ট নম্বর সেই প্রোজেক্টকে শনাক্ত করে যে মেসেজ পাঠিয়েছে
message_id স্ট্রিং মেসেজ আইডি কোনও মেসেজকে শনাক্ত করে। অ্যাপ আইডি ও টাইমস্ট্যাম্প থেকে তৈরি করা মেসেজ আইডি, কিছু ক্ষেত্রে, বিশ্বব্যাপী অনন্য নাও হতে পারে।
instance_id স্ট্রিং যে অ্যাপে মেসেজ পাঠানো হয়েছে সেটির অনন্য আইডি (উপলভ্য হলে)। এটি ইন্সট্যান্স আইডি বা Firebase ইনস্টলেশন আইডি হতে পারে।
message_type স্ট্রিং মেসেজের ধরন। বিজ্ঞপ্তি মেসেজ বা ডেটা মেসেজ হতে পারে। বিষয় ব্যবহার করা হয় কোনও বিষয় বা ক্যাম্পেন পাঠানোর জন্য আসল মেসেজ শনাক্ত করতে; পরবর্তী মেসেজ হয় বিজ্ঞপ্তি বা ডেটা মেসেজ।
sdk_platform স্ট্রিং প্রাপকের অ্যাপের প্ল্যাটফর্ম
app_name স্ট্রিং Android অ্যাপের জন্য প্যাকেজের নাম বা iOS অ্যাপের জন্য বান্ডিল আইডি
collapse_key স্ট্রিং 'লুকিয়ে রাখার কী' এমন মেসেজের গ্রুপ শনাক্ত করে যেগুলি লুকিয়ে রাখা যেতে পারে। কোনও ডিভাইস কানেক্ট করা না থাকলে, প্রদত্ত কোল্যাপ্স কী সহ শুধুমাত্র শেষ মেসেজটি ডেলিভারির জন্য সারিবদ্ধ করা হয়
অগ্রাধিকার ইন্টিজার মেসেজের গুরুত্ব। ৫ হল "স্বাভাবিক" অগ্রাধিকার এবং ১০ হল "বেশি" অগ্রাধিকার।
ttl ইন্টিজার ডিভাইস অফলাইন থাকলে, FCM স্টোরেজে মেসেজটি কতক্ষণ (সেকেন্ডে) রাখতে হবে তা এই প্যারামিটার নির্দিষ্ট করে
প্রসঙ্গ স্ট্রিং যে বিষয়ে মেসেজ পাঠানো হয়েছে তার নাম (প্রযোজ্য হলে)
bulk_id ইন্টিজার বাল্ক আইডি সম্পর্কিত মেসেজের একটি গ্রুপ শনাক্ত করে, যেমন কোনও নির্দিষ্ট বিষয়ে পাঠানো মেসেজ
ইভেন্ট স্ট্রিং ইভেন্টের ধরন। সম্ভাব্য ভ্যালুগুলি হল:
  • MESSAGE_ACCEPTED: FCM সার্ভার মেসেজটি পেয়েছে এবং অনুরোধটি বৈধ;
  • MESSAGE_DELIVERED: ডিভাইসে অ্যাপের FCM SDK-তে মেসেজটি ডেলিভার করা হয়েছে। ডিফল্ট হিসেবে, এই ফিল্ডটি প্রোপাগেট করা হয় না। চালু করতে, setDeliveryMetricsExportToBigQuery(boolean)-এ দেওয়া নির্দেশাবলী অনুসরণ করুন।
  • MISSING_REGISTRATIONS: রেজিস্ট্রেশন না থাকার কারণে অনুরোধ বাতিল করা হয়েছে;
  • UNAUTHORIZED_REGISTRATION: মেসেজটি বাতিল করা হয়েছে কারণ প্রেরকের কাছে রেজিস্ট্রেশনে মেসেজ পাঠানোর অনুমতি নেই;
  • MESSAGE_RECEIVED_INTERNAL_ERROR: মেসেজের অনুরোধ প্রসেস করার সময় অনির্দিষ্ট সমস্যা হয়েছে;
  • MISMATCH_SENDER_ID: মেসেজ পাঠানোর অনুরোধ বাতিল করা হয়েছে কারণ যে প্রেরক আইডি মেসেজ পাঠাচ্ছে এবং এন্ড-পয়েন্টের জন্য যে আইডি ঘোষণা করা হয়েছে, দুটি এক নয়;
  • QUOTA_EXCEEDED: পর্যাপ্ত কোটা না থাকার কারণে মেসেজ পাঠানোর অনুরোধ বাতিল করা হয়েছে;
  • INVALID_REGISTRATION: ভুল রেজিস্ট্রেশনের কারণে মেসেজ পাঠানোর অনুরোধ বাতিল করা হয়েছে;
  • INVALID_PACKAGE_NAME: ভুল প্যাকেজের নামের কারণে মেসেজ পাঠানোর অনুরোধ বাতিল করা হয়েছে;
  • INVALID_APNS_CREDENTIAL: the request to send a message was rejected due to an invalid APNS certificate;
  • INVALID_PARAMETERS: the request to send a message was rejected due to invalid parameters;
  • PAYLOAD_TOO_LARGE: মেসেজ পাঠানোর অনুরোধটি বাতিল করা হয়েছে কারণ পে-লোডের সাইজ সর্বাধিক সীমার চেয়ে বেশি;
  • AUTHENTICATION_ERROR: যাচাইকরণ সংক্রান্ত সমস্যার কারণে মেসেজ পাঠানোর অনুরোধ বাতিল করা হয়েছে (মেসেজ পাঠানোর জন্য ব্যবহৃত API Key চেক করুন);
  • INVALID_TTL: ভুল TTL-এর কারণে মেসেজ পাঠানোর অনুরোধ বাতিল করা হয়েছে।
analytics_label স্ট্রিং HTTP v1 API-এর মাধ্যমে, মেসেজ পাঠানোর সময় অ্যানালিটিক্স লেবেল সেট করা যায়, এর ফলে অ্যানালিটিক্সের উদ্দেশ্যে মেসেজ চিহ্নিত করা যায়

এক্সপোর্ট করা ডেটা দিয়ে আপনি কী করতে পারবেন?

নিচের বিভাগগুলিতে কোয়েরির উদাহরণ দেওয়া আছে যা আপনি এক্সপোর্ট করা FCM ডেটার বিরুদ্ধে BigQuery-তে চালাতে পারবেন।

অ্যাপের মাধ্যমে পাঠানো মেসেজের সংখ্যা

SELECT app_name, COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_id != ''
GROUP BY 1;

মেসেজের মাধ্যমে টার্গেট করা অনন্য অ্যাপ ইনস্ট্যান্সের সংখ্যা গণনা করুন

SELECT COUNT(DISTINCT instance_id)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED';

কতগুলি বিজ্ঞপ্তি মেসেজ পাঠানো হয়েছে তার সংখ্যা

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DISPLAY_NOTIFICATION';

পাঠানো ডেটা মেসেজের সংখ্যা

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND message_type = 'DATA_MESSAGE';

কোনও বিষয় বা ক্যাম্পেনে পাঠানো মেসেজের সংখ্যা গণনা করা

SELECT COUNT(1)
FROM `project ID.firebase_messaging.data`
WHERE
  _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
  AND event = 'MESSAGE_ACCEPTED'
  AND bulk_id = your bulk id AND message_id != '';

নির্দিষ্ট বিষয়ে পাঠানো মেসেজের জন্য ইভেন্ট ট্র্যাক করতে, এই কোয়েরি পরিবর্তন করে AND message_id != ''-এর জায়গায় AND message_id = <your message id>; লিখুন।

কোনও নির্দিষ্ট বিষয় বা ক্যাম্পেনের জন্য ফ্যান-আউট সময়সীমা গণনা করা

ফ্যানআউট শুরুর সময় হল যখন আসল অনুরোধ পাওয়া যায় এবং শেষ সময় হল যখন একটি ইনস্ট্যান্সকে টার্গেট করে শেষ স্বতন্ত্র মেসেজ তৈরি করা হয়।

SELECT
  TIMESTAMP_DIFF(
    end_timestamp, start_timestamp, MILLISECOND
  ) AS fanout_duration_ms,
  end_timestamp,
  start_timestamp
FROM (
    SELECT MAX(event_timestamp) AS end_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS start_timestamp
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
      AND bulk_id = your bulk id
      AND message_type = 'TOPIC'
  ) initial_message;

ডেলিভার করা মেসেজের শতাংশ গণনা করুন

SELECT
  messages_sent,
  messages_delivered,
  messages_delivered / messages_sent * 100 AS percent_delivered
FROM (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_sent
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT COUNT(DISTINCT CONCAT(message_id, instance_id)) AS messages_delivered
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND (event = 'MESSAGE_DELIVERED'
      AND message_id
      IN (
        SELECT message_id FROM `project ID.firebase_messaging.data`
        WHERE
          _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
          AND event = 'MESSAGE_ACCEPTED'
        GROUP BY 1
      )
  ) delivered;

প্রদত্ত মেসেজ আইডি এবং ইনস্ট্যান্স আইডির জন্য সব ইভেন্ট ট্র্যাক করুন

SELECT *
FROM `project ID.firebase_messaging.data`
WHERE
    _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
    AND message_id = 'your message id'
    AND instance_id = 'your instance id'
ORDER BY event_timestamp;

প্রদত্ত মেসেজ আইডি এবং ইনস্ট্যান্স আইডির জন্য লেটেন্সি গণনা করুন

SELECT
  TIMESTAMP_DIFF(
    MAX(delivered_time), MIN(accepted_time), MILLISECOND
  ) AS latency_ms
FROM (
    SELECT event_timestamp AS accepted_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD')
      AND message_id = 'your message id'
      AND instance_id = 'your instance id'
      AND event = 'MESSAGE_ACCEPTED'
  ) sent
  CROSS JOIN (
    SELECT event_timestamp AS delivered_time
    FROM `project ID.firebase_messaging.data`
    WHERE
      _PARTITIONTIME = TIMESTAMP('date as YYYY-MM-DD') AND
      message_id = 'your message id' AND instance_id = 'your instance id'
      AND (event = 'MESSAGE_DELIVERED'
  ) delivered;