বার্তা বিতরণ বোঝা

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

বার্তা প্রেরণের সাফল্য এবং কৌশলের বিস্তৃত মূল্যায়ন সম্পর্কে অন্তর্দৃষ্টি পেতে FCM আপনাকে তিনটি সরঞ্জামের সেটও প্রদান করে:

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

Firebase কনসোলে BigQuery ডেটা এক্সপোর্ট এবং রিপোর্ট ট্যাব কাজ করার জন্য Google Analytics প্রয়োজন। যদি আপনার প্রোজেক্টের জন্য Google Analytics সক্ষম না থাকে, তাহলে আপনি এটি আপনার Firebase প্রোজেক্ট সেটিংসের ইন্টিগ্রেশন ট্যাবে সেট আপ করতে পারেন। সমষ্টিগত ডেলিভারি ডেটা কাজ করার জন্য Google Analytics প্রয়োজন হয় না।

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

বার্তা বিতরণ প্রতিবেদন

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

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

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

বার্তা প্রতিবেদন দেখার সময়, আপনি প্রদর্শিত ডেটার জন্য একটি তারিখের সীমা নির্ধারণ করতে পারেন, CSV-তে রপ্তানি করার বিকল্প সহ। আপনি এই মানদণ্ডগুলি দ্বারাও ফিল্টার করতে পারেন:

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

বার্তাগুলিতে বিশ্লেষণ লেবেল যোগ করা হচ্ছে

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

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

  • -
  • ~
  • %

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

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

FCM ডেটা API ব্যবহার করে একত্রিত ডেলিভারি ডেটা

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

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

মেট্রিক্স কীভাবে ব্যাখ্যা করবেন

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

গৃহীত বার্তা গণনা করুন

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

বার্তা ফলাফলের শতাংশ

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

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

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

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

বার্তা অন্তর্দৃষ্টি শতাংশ

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

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

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

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

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

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

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

সমষ্টিগত ডেটা টাইমলাইন

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

ডেটা কভারেজ

Firebase Cloud Messaging Data API দ্বারা প্রদত্ত মেট্রিক্সগুলি বার্তা সরবরাহের বিস্তৃত প্রবণতা সম্পর্কে অন্তর্দৃষ্টি প্রদানের জন্য তৈরি। তবে, তারা সমস্ত বার্তা পরিস্থিতির 100% কভারেজ প্রদান করে না। নিম্নলিখিত পরিস্থিতিগুলি হল পরিচিত ফলাফল যা মেট্রিক্সে প্রতিফলিত হয় না।

মেয়াদোত্তীর্ণ বার্তা

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

নিষ্ক্রিয় ডিভাইসগুলিতে বার্তা

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

নির্দিষ্ট ব্যবহারকারীর পছন্দের ডিভাইসে বার্তা

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

রাউন্ডিং এবং ন্যূনতম

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

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

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

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

  • অ্যান্ড্রয়েড ২০.১.০ বা তার বেশি।
  • iOS 8.6.0 বা উচ্চতর
  • ফায়ারবেস ওয়েব SDK 9.0.0 বা উচ্চতর

অ্যান্ড্রয়েড এবং আইওএস-এর জন্য ডেটা এক্সপোর্ট সক্ষম করার বিশদ বিবরণের জন্য নিচে দেখুন।

শুরু করতে, আপনার প্রকল্পটি BigQuery-এর সাথে লিঙ্ক করুন:

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

    • Notifications composer খুলুন, তারপর পৃষ্ঠার নীচে Access BigQuery-এ ক্লিক করুন।

    • Firebase কনসোলের ইন্টিগ্রেশন পৃষ্ঠা থেকে, BigQuery কার্ডে লিঙ্কে ক্লিক করুন।

      এই পৃষ্ঠাটি প্রকল্পের সমস্ত FCM সক্ষম অ্যাপের জন্য FCM রপ্তানি বিকল্পগুলি প্রদর্শন করে।

  2. BigQuery সক্ষম করতে স্ক্রিনে দেওয়া নির্দেশাবলী অনুসরণ করুন।

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

যখন আপনি Cloud Messaging জন্য BigQuery এক্সপোর্ট সক্ষম করেন:

  • Firebase আপনার ডেটা BigQuery তে রপ্তানি করে। মনে রাখবেন যে রপ্তানির জন্য ডেটার প্রাথমিক প্রচার সম্পূর্ণ হতে 48 ঘন্টা পর্যন্ত সময় লাগতে পারে।

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

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

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

BigQuery এক্সপোর্ট নিষ্ক্রিয় করতে, Firebase কনসোলে আপনার প্রোজেক্টটি আনলিঙ্ক করুন

বার্তা বিতরণ ডেটা রপ্তানি সক্ষম করুন

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

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

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

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

 FirebaseMessaging.getInstance().setDeliveryMetricsExportToBigQuery(true)

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

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

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

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

মনে রাখবেন যে পুরানো টোকেন বা নিষ্ক্রিয় নিবন্ধনগুলিকে লক্ষ্য করে এই পরিসংখ্যানগুলির কিছুকে বাড়িয়ে তুলতে পারে।

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

_পার্টিশনটাইম টাইমস্ট্যাম্প এই ছদ্ম কলামে দিনের শুরুর (UTC তে) একটি টাইমস্ট্যাম্প রয়েছে যেখানে ডেটা লোড করা হয়েছিল। YYYYMMDD পার্টিশনের জন্য, এই ছদ্ম কলামে TIMESTAMP('YYYY-MM-DD') মান রয়েছে।
ইভেন্ট_টাইমস্ট্যাম্প টাইমস্ট্যাম্প সার্ভার দ্বারা রেকর্ড করা ইভেন্ট টাইমস্ট্যাম্প
প্রকল্প_সংখ্যা পূর্ণসংখ্যা প্রকল্প নম্বরটি সেই প্রকল্পটিকে চিহ্নিত করে যেটি বার্তাটি পাঠিয়েছে
মেসেজ_আইডি স্ট্রিং মেসেজ আইডি একটি মেসেজ শনাক্ত করে। অ্যাপ আইডি এবং টাইমস্ট্যাম্প থেকে তৈরি, মেসেজ আইডি কিছু ক্ষেত্রে বিশ্বব্যাপী অনন্য নাও হতে পারে।
ইনস্ট্যান্স_আইডি স্ট্রিং যে অ্যাপে বার্তাটি পাঠানো হয় (যখন উপলব্ধ থাকে) তার অনন্য আইডি। এটি একটি ইনস্ট্যান্স আইডি অথবা একটি Firebase ইনস্টলেশন আইডি হতে পারে।
বার্তার ধরণ স্ট্রিং বার্তার ধরণ। বিজ্ঞপ্তি বার্তা বা ডেটা বার্তা হতে পারে। কোনও বিষয় বা প্রচারণা প্রেরণের জন্য মূল বার্তাটি সনাক্ত করতে টপিক ব্যবহার করা হয়; পরবর্তী বার্তাগুলি হয় একটি বিজ্ঞপ্তি বা ডেটা বার্তা।
sdk_প্ল্যাটফর্ম স্ট্রিং প্রাপক অ্যাপের প্ল্যাটফর্ম
অ্যাপ_নাম স্ট্রিং অ্যান্ড্রয়েড অ্যাপের প্যাকেজের নাম অথবা iOS অ্যাপের বান্ডেল আইডি
collapse_key সম্পর্কে স্ট্রিং collapse key এমন কিছু বার্তার গ্রুপকে শনাক্ত করে যেগুলো collapse করা যেতে পারে। যখন একটি ডিভাইস সংযুক্ত না থাকে, তখন শুধুমাত্র একটি নির্দিষ্ট collapse key সহ শেষ বার্তাটি শেষ ডেলিভারির জন্য সারিবদ্ধ থাকে।
অগ্রাধিকার পূর্ণসংখ্যা বার্তার অগ্রাধিকার। বৈধ মানগুলি হল "স্বাভাবিক" এবং "উচ্চ"। iOS-এ, এগুলি APN-এর অগ্রাধিকার 5 এবং 10-এর সাথে সঙ্গতিপূর্ণ।
টিটিএল পূর্ণসংখ্যা এই প্যারামিটারটি নির্দিষ্ট করে যে ডিভাইসটি অফলাইনে থাকলে বার্তাটি কতক্ষণ (সেকেন্ডে) FCM স্টোরেজে রাখা উচিত।
বিষয় স্ট্রিং যে বিষয়ে বার্তা পাঠানো হয়েছে তার নাম (যখন প্রযোজ্য)
বাল্ক_আইডি পূর্ণসংখ্যা বাল্ক আইডি সম্পর্কিত বার্তাগুলির একটি গ্রুপকে শনাক্ত করে, যেমন কোনও বিষয়ে পাঠানো একটি নির্দিষ্ট বার্তা
ঘটনা স্ট্রিং ইভেন্টের ধরণ। সম্ভাব্য মানগুলি হল:
  • 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: একটি অবৈধ APNS সার্টিফিকেটের কারণে একটি বার্তা পাঠানোর অনুরোধ প্রত্যাখ্যান করা হয়েছে;
  • INVALID_PARAMETERS: অবৈধ প্যারামিটারের কারণে একটি বার্তা পাঠানোর অনুরোধ প্রত্যাখ্যান করা হয়েছে;
  • PAYLOAD_TOO_LARGE: সীমার চেয়ে বেশি পেলোডের কারণে বার্তা পাঠানোর অনুরোধটি প্রত্যাখ্যান করা হয়েছে;
  • AUTHENTICATION_ERROR: একটি প্রমাণীকরণ ত্রুটির কারণে একটি বার্তা পাঠানোর অনুরোধ প্রত্যাখ্যান করা হয়েছে (বার্তা পাঠানোর জন্য ব্যবহৃত API কীটি পরীক্ষা করুন);
  • INVALID_TTL: একটি অবৈধ TTL এর কারণে একটি বার্তা পাঠানোর অনুরোধ প্রত্যাখ্যান করা হয়েছে।
বিশ্লেষণ_লেবেল স্ট্রিং 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;