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

FCM আপনাকে বার্তা বিতরণের অন্তর্দৃষ্টি পেতে সহায়তা করার জন্য তিনটি সেট সরঞ্জাম সরবরাহ করে:

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

এই পৃষ্ঠায় বর্ণিত রিপোর্টিং টুলগুলির কাজ করার জন্য Google Analytics প্রয়োজন। আপনার প্রোজেক্টের জন্য Google Analytics সক্ষম না থাকলে, আপনি আপনার Firebase প্রোজেক্ট সেটিংসের ইন্টিগ্রেশন ট্যাবে এটি সেট আপ করতে পারেন।

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

বার্তা বিতরণ রিপোর্ট

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

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

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

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

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

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

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

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

  • -
  • ~
  • %

সর্বাধিক দৈর্ঘ্য 50 অক্ষর। আপনি প্রতিদিন 100টি অনন্য লেবেল নির্দিষ্ট করতে পারেন; সেই সীমার বাইরে লেবেল যুক্ত বার্তাগুলি রিপোর্ট করা হয় না৷

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

FCM ডেটা এপিআই-এর মাধ্যমে একত্রিত ডেলিভারি ডেটা

Firebase ক্লাউড মেসেজিং ডেটা API আপনাকে তথ্য পুনরুদ্ধার করতে দেয় যা আপনাকে Android অ্যাপ্লিকেশানগুলিতে লক্ষ্য করা বার্তা অনুরোধের ফলাফল বুঝতে সাহায্য করতে পারে। API একটি প্রকল্পে সমস্ত ডেটা সংগ্রহ-সক্ষম অ্যান্ড্রয়েড ডিভাইস জুড়ে সমষ্টিগত ডেটা সরবরাহ করে। এতে বিলম্ব ছাড়াই বিতরণ করা বার্তার শতাংশের পাশাপাশি 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
    }
  }

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

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

গণনা বার্তা গ্রহণ করা হয়েছে

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

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

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

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

ডেলিভারি কর্মক্ষমতা শতাংশ

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

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

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

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

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

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

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

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

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

সামগ্রিক ডেটা টাইমলাইন

API 7 দিনের ঐতিহাসিক ডেটা ফেরত দেবে; যাইহোক, এই API দ্বারা প্রত্যাবর্তিত ডেটা 5 দিন পর্যন্ত বিলম্বিত হবে। উদাহরণস্বরূপ, 20শে জানুয়ারী, 9 ই জানুয়ারী - 15 জানুয়ারী এর ডেটা উপলব্ধ হবে, তবে 16 শে জানুয়ারী বা তার পরে নয়৷ উপরন্তু, তথ্য সেরা প্রচেষ্টা প্রদান করা হয়. ডেটা বিভ্রাটের ক্ষেত্রে, এফসিএম ফরওয়ার্ড ঠিক করতে কাজ করবে এবং সমস্যাটি ঠিক হওয়ার পরে ডেটা ব্যাকফিল করবে না। বড় বিভ্রাটের ক্ষেত্রে, ডেটা এক সপ্তাহ বা তার বেশি সময়ের জন্য অনুপলব্ধ হতে পারে।

ডেটা কভারেজ

Firebase ক্লাউড মেসেজিং ডেটা API দ্বারা প্রদত্ত মেট্রিকগুলি বার্তা বিতরণের বিস্তৃত প্রবণতাগুলির অন্তর্দৃষ্টি প্রদান করার জন্য। যাইহোক, তারা সমস্ত বার্তা পরিস্থিতির 100% কভারেজ প্রদান করে না। নিম্নলিখিত পরিস্থিতিগুলি পরিচিত ফলাফলগুলি মেট্রিক্সে প্রতিফলিত হয় না৷

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

টাইম টু লাইভ (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 9.0.0 বা উচ্চতর

Android এবং iOS- এর জন্য ডেটা রপ্তানি সক্ষম করার বিষয়ে বিশদ বিবরণের জন্য নীচে দেখুন।

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

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

    • বিজ্ঞপ্তি কম্পোজার খুলুন, তারপর পৃষ্ঠার নীচে Access BigQuery-এ ক্লিক করুন।

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

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

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

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

আপনি যখন Cloud Messaging জন্য BigQuery রপ্তানি সক্ষম করেন:

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

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

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

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

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

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

FCM SDK 8.6.0 বা উচ্চতর iOS ডিভাইসগুলি তাদের অ্যাপের মেসেজ ডেলিভারি ডেটা এক্সপোর্ট সক্ষম করতে পারে৷ FCM সতর্কতা এবং ব্যাকগ্রাউন্ড বিজ্ঞপ্তি উভয়ের জন্য ডেটা এক্সপোর্ট সমর্থন করে। এই বিকল্পগুলি সক্ষম করার আগে, আপনাকে প্রথমে আপনার প্রকল্পের জন্য FCM -BiqQuery লিঙ্ক তৈরি করতে হবে যেমন BigQuery ডেটা এক্সপোর্টে বর্ণিত হয়েছে।

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

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

প্রাপ্ত প্রতিটি বিজ্ঞপ্তির জন্য নিম্নলিখিত কল করা আবশ্যক:

সুইফট

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

উদ্দেশ্য-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 কল করতে পারেন। প্রাপ্ত প্রতিটি বিজ্ঞপ্তির জন্য এই কল করা আবশ্যক:

সুইফট

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

উদ্দেশ্য-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

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

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

রপ্তানি করা টেবিলের স্কিমা হল:

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