চলমান বার্তা বিতরণ ব্যর্থতার সমস্যা সমাধানের জন্য, FCM সমস্যা সমাধানকারী ব্যবহার করুন এবং আপনার বার্তাটি না দেখার বিভিন্ন কারণ বুঝতে এই ব্লগ পোস্টটি দেখুন। FCM-কে প্রভাবিত করে এমন কোনও চলমান পরিষেবা ব্যাহত হচ্ছে কিনা তা সনাক্ত করতে আপনি FCM স্ট্যাটাস ড্যাশবোর্ডেও যেতে পারেন।
বার্তা প্রেরণের সাফল্য এবং কৌশলের বিস্তৃত মূল্যায়ন সম্পর্কে অন্তর্দৃষ্টি পেতে FCM আপনাকে তিনটি সরঞ্জামের সেটও প্রদান করে:
- Firebase কনসোল বার্তা বিতরণ প্রতিবেদন
- Firebase Cloud Messaging ডেটা API থেকে একত্রিত Android SDK ডেলিভারি মেট্রিক্স
- Comprehensive data export to Google BigQuery
Firebase কনসোলে BigQuery ডেটা এক্সপোর্ট এবং রিপোর্ট ট্যাব কাজ করার জন্য Google Analytics প্রয়োজন। যদি আপনার প্রোজেক্টের জন্য Google Analytics সক্ষম না থাকে, তাহলে আপনি এটি আপনার Firebase প্রোজেক্ট সেটিংসের ইন্টিগ্রেশন ট্যাবে সেট আপ করতে পারেন। সমষ্টিগত ডেলিভারি ডেটা কাজ করার জন্য Google Analytics প্রয়োজন হয় না।
মনে রাখবেন যে এই পৃষ্ঠার অনেক পরিসংখ্যানের প্রতিবেদন বিশ্লেষণ ডেটার ব্যাচিংয়ের কারণে 24 ঘন্টা পর্যন্ত বিলম্বিত হতে পারে।
Message delivery reports
Firebase কনসোলের রিপোর্ট ট্যাবে, আপনি Android বা Apple প্ল্যাটফর্ম FCM SDK-তে পাঠানো বার্তাগুলির জন্য নিম্নলিখিত ডেটা দেখতে পারেন, যার মধ্যে Notifications composer এবং FCM API-এর মাধ্যমে পাঠানো বার্তাগুলিও অন্তর্ভুক্ত রয়েছে:
- প্রেরণ — ডেটা বার্তা বা বিজ্ঞপ্তি বার্তাটি ডেলিভারির জন্য সারিবদ্ধ করা হয়েছে অথবা ডেলিভারির জন্য APN-এর মতো তৃতীয় পক্ষের পরিষেবাতে সফলভাবে প্রেরণ করা হয়েছে। মনে রাখবেন যে প্রেরণ পরিসংখ্যান কয়েক ঘন্টার জন্য বিলম্বিত হতে পারে। আরও তথ্যের জন্য বার্তার জীবনকাল দেখুন।
- প্রাপ্ত (শুধুমাত্র অ্যান্ড্রয়েড ডিভাইসে উপলব্ধ) — ডেটা বার্তা বা বিজ্ঞপ্তি বার্তা অ্যাপটি গ্রহণ করেছে। এই ডেটা তখনই পাওয়া যাবে যখন রিসিভিং অ্যান্ড্রয়েড ডিভাইসে FCM SDK 18.0.1 বা তার উচ্চতর সংস্করণ ইনস্টল করা থাকে।
- ইমপ্রেশন (শুধুমাত্র অ্যান্ড্রয়েড ডিভাইসে বিজ্ঞপ্তি বার্তার জন্য উপলব্ধ) — অ্যাপটি ব্যাকগ্রাউন্ডে থাকাকালীন ডিভাইসে প্রদর্শন বিজ্ঞপ্তি প্রদর্শিত হয়েছে।
- খোলে — ব্যবহারকারী বিজ্ঞপ্তি বার্তাটি খুলেছেন। অ্যাপটি ব্যাকগ্রাউন্ডে থাকাকালীন শুধুমাত্র প্রাপ্ত বিজ্ঞপ্তিগুলির জন্য রিপোর্ট করা হয়েছে।
এই ডেটা নোটিফিকেশন পেলোড সহ সমস্ত বার্তা এবং লেবেলযুক্ত সমস্ত ডেটা বার্তার জন্য উপলব্ধ। লেবেল সম্পর্কে আরও জানতে, বার্তাগুলিতে বিশ্লেষণ লেবেল যুক্ত করা দেখুন।
বার্তা প্রতিবেদন দেখার সময়, আপনি প্রদর্শিত ডেটার জন্য একটি তারিখের সীমা নির্ধারণ করতে পারেন, CSV-তে রপ্তানি করার বিকল্প সহ। আপনি এই মানদণ্ডগুলি দ্বারাও ফিল্টার করতে পারেন:
- Platform (iOS or Android)
- অ্যাপ
- Custom analytics labels
বার্তাগুলিতে বিশ্লেষণ লেবেল যোগ করা হচ্ছে
কাস্টম বিশ্লেষণের জন্য বার্তা লেবেল করা খুবই কার্যকর, যা আপনাকে লেবেল বা লেবেলের সেট অনুসারে ডেলিভারি পরিসংখ্যান ফিল্টার করতে দেয়। আপনি বার্তা অবজেক্টে 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 ডিভাইসে ডেলিভারির জন্য গৃহীত বার্তাগুলির গণনা। সমস্ত শতাংশ এই মানটিকে হর হিসাবে ব্যবহার করে। মনে রাখবেন যে এই গণনায় সেই ব্যবহারকারীদের উদ্দেশ্যে তৈরি বার্তাগুলি অন্তর্ভুক্ত থাকবে না যারা তাদের ডিভাইসে ব্যবহার এবং ডায়াগনস্টিক তথ্য সংগ্রহ বন্ধ করে দিয়েছেন।
Message Outcome Percentages
MessageOutcomePercents অবজেক্টে অন্তর্ভুক্ত ক্ষেত্রগুলি বার্তা অনুরোধের ফলাফল সম্পর্কে তথ্য প্রদান করে। বিভাগগুলি সবই পারস্পরিকভাবে একচেটিয়া। এটি "আমার বার্তাগুলি কি বিতরণ করা হচ্ছে?" এবং "বার্তাগুলি বাদ দেওয়ার কারণ কী?" এর মতো প্রশ্নের উত্তর দিতে পারে।
উদাহরণস্বরূপ, droppedTooManyPendingMessages ক্ষেত্রের জন্য একটি উচ্চ মান ইঙ্গিত দিতে পারে যে অ্যাপের ইনস্ট্যান্সগুলি FCM এর 100 টি মুলতুবি বার্তার সীমা অতিক্রম করে অ-সংকোচনযোগ্য বার্তাগুলির পরিমাণ গ্রহণ করছে। এটি কমাতে, নিশ্চিত করুন যে আপনার অ্যাপ onDeletedMessages এ কল পরিচালনা করে এবং সংকোচনযোগ্য বার্তা পাঠানোর কথা বিবেচনা করে। একইভাবে, droppedDeviceInactive এর জন্য উচ্চ শতাংশ আপনার সার্ভারে নিবন্ধন টোকেন আপডেট করার, পুরানো টোকেনগুলি অপসারণ করার এবং বিষয়গুলি থেকে তাদের সদস্যতা ত্যাগ করার একটি সংকেত হতে পারে। এই ক্ষেত্রে সেরা অনুশীলনের জন্য FCM নিবন্ধন টোকেন পরিচালনা করুন দেখুন।
ডেলিভারি পারফরম্যান্সের শতাংশ
DeliveryPerformancePercents অবজেক্টের ক্ষেত্রগুলি সফলভাবে বিতরণ করা বার্তাগুলির তথ্য প্রদান করে। এটি "আমার বার্তাগুলি কি বিলম্বিত হয়েছিল?" এবং "কেন বার্তাগুলি বিলম্বিত হয়েছে?" এর মতো প্রশ্নের উত্তর দিতে পারে। উদাহরণস্বরূপ, delayedMessageThrottled এর জন্য একটি উচ্চ মান স্পষ্টভাবে নির্দেশ করবে যে আপনি প্রতি ডিভাইসের সর্বোচ্চ সীমা অতিক্রম করছেন এবং আপনি যে হারে বার্তা পাঠাচ্ছেন তা সামঞ্জস্য করা উচিত।
Message Insight Percentages
এই অবজেক্টটি সমস্ত বার্তা প্রেরণ সম্পর্কে অতিরিক্ত তথ্য প্রদান করে। priorityLowered ক্ষেত্রটি গৃহীত বার্তাগুলির শতাংশ প্রকাশ করে যেগুলিতে অগ্রাধিকার HIGH থেকে NORMAL এ নামিয়ে আনা হয়েছে। যদি এই মানটি বেশি হয়, তাহলে কম উচ্চ অগ্রাধিকার বার্তা পাঠানোর চেষ্টা করুন অথবা নিশ্চিত করুন যে উচ্চ অগ্রাধিকার বার্তা পাঠানো হলে আপনি সর্বদা একটি বিজ্ঞপ্তি প্রদর্শন করেন। আরও তথ্যের জন্য বার্তা অগ্রাধিকার সম্পর্কে আমাদের ডকুমেন্টেশন দেখুন।
এই ডেটা BigQuery-তে এক্সপোর্ট করা ডেটা থেকে কীভাবে আলাদা?
BigQuery এক্সপোর্ট ডিভাইসে SDK-তে FCM ব্যাকএন্ড এবং বার্তা বিতরণের মাধ্যমে বার্তা গ্রহণ সম্পর্কে পৃথক বার্তা লগ সরবরাহ করে ( FCM আর্কিটেকচারের ধাপ 2 এবং 4)। এই ডেটা পৃথক বার্তা গ্রহণ এবং বিতরণ করা হয়েছে তা নিশ্চিত করার জন্য কার্যকর। পরবর্তী বিভাগে BigQuery ডেটা এক্সপোর্ট সম্পর্কে আরও পড়ুন।
বিপরীতে, Firebase Cloud Messaging Data API অ্যান্ড্রয়েড ট্রান্সপোর্ট লেয়ারে (অথবা FCM আর্কিটেকচারের ধাপ 3) বিশেষভাবে কী ঘটে সে সম্পর্কে সমষ্টিগত বিশদ সরবরাহ করে। এই ডেটা বিশেষভাবে FCM ব্যাকএন্ড থেকে অ্যান্ড্রয়েড SDK-তে বার্তা সরবরাহের অন্তর্দৃষ্টি প্রদান করে। এই পরিবহনের সময় কেন বার্তা বিলম্বিত হয়েছিল বা বাদ দেওয়া হয়েছিল তার প্রবণতা দেখানোর জন্য এটি বিশেষভাবে কার্যকর।
কিছু ক্ষেত্রে, নিম্নলিখিত কারণে দুটি ডেটা সেট সঠিকভাবে মিলতে নাও পারে:
- সমষ্টিগত মেট্রিক্স শুধুমাত্র সমস্ত বার্তার একটি অংশের নমুনা দেয়
- সমষ্টিগত মেট্রিক্সগুলি বৃত্তাকার
- আমরা গোপনীয়তা সীমার নিচে মেট্রিক্স উপস্থাপন করি না
- বিপুল পরিমাণ ট্র্যাফিক পরিচালনা করার পদ্ধতিতে অপ্টিমাইজেশনের কারণে বার্তার ফলাফলের একটি অংশ অনুপস্থিত।
API এর সীমাবদ্ধতা
Aggregate Data Timelines
API ৭ দিনের ঐতিহাসিক ডেটা ফেরত দেবে; তবে, এই API দ্বারা ফেরত পাঠানো ডেটা ৫ দিন পর্যন্ত বিলম্বিত হবে। উদাহরণস্বরূপ, ২০শে জানুয়ারী, ৯ই জানুয়ারী - ১৫ই জানুয়ারী পর্যন্ত ডেটা উপলব্ধ থাকবে, কিন্তু ১৬ই জানুয়ারী বা তার পরে নয়। অতিরিক্তভাবে, ডেটা সর্বোত্তম প্রচেষ্টায় সরবরাহ করা হয়। ডেটা বিভ্রাটের ক্ষেত্রে, FCM পরবর্তী সমস্যা সমাধানের জন্য কাজ করবে এবং সমস্যাটি সমাধানের পরে ডেটা ব্যাকফিল করবে না। বড় বিভ্রাটের ক্ষেত্রে, ডেটা এক সপ্তাহ বা তার বেশি সময় ধরে অনুপলব্ধ থাকতে পারে।
ডেটা কভারেজ
Firebase Cloud Messaging Data API দ্বারা প্রদত্ত মেট্রিক্সগুলি বার্তা সরবরাহের বিস্তৃত প্রবণতা সম্পর্কে অন্তর্দৃষ্টি প্রদানের জন্য তৈরি। তবে, তারা সমস্ত বার্তা পরিস্থিতির 100% কভারেজ প্রদান করে না। নিম্নলিখিত পরিস্থিতিগুলি হল পরিচিত ফলাফল যা মেট্রিক্সে প্রতিফলিত হয় না।
মেয়াদোত্তীর্ণ বার্তা
যদি প্রদত্ত লগ তারিখের পরে টাইম টু লিভ (TTL) মেয়াদ শেষ হয়ে যায়, তাহলে এই তারিখে বার্তাটি droppedTtlExpired হিসেবে গণনা করা হবে না।
Messages to inactive devices
নিষ্ক্রিয় ডিভাইসগুলিতে পাঠানো বার্তাগুলি ডেটাসেটে প্রদর্শিত হতে পারে বা নাও হতে পারে, যা নির্ভর করে তারা কোন ডেটা পাথ ব্যবহার করে। এর ফলে droppedDeviceInactive এবং pending ফিল্ডগুলিতে কিছু ভুল গণনা হতে পারে।
নির্দিষ্ট ব্যবহারকারীর পছন্দের ডিভাইসে বার্তা
যেসব ব্যবহারকারী তাদের ডিভাইসে ব্যবহার এবং ডায়াগনস্টিক তথ্য সংগ্রহ বন্ধ করে দিয়েছেন, তাদের পছন্দ অনুসারে তাদের বার্তাগুলি আমাদের গণনায় অন্তর্ভুক্ত করা হবে না।
Rounding and Minimums
যেখানে ভলিউম যথেষ্ট বড় নয়, সেখানে FCM ইচ্ছাকৃতভাবে গণনাগুলিকে পূর্ণাঙ্গ করে এবং বাদ দেয়।
BigQuery ডেটা এক্সপোর্ট
আরও বিশ্লেষণের জন্য আপনি আপনার বার্তার ডেটা BigQuery- তে রপ্তানি করতে পারেন। BigQuery আপনাকে BigQuery SQL ব্যবহার করে ডেটা বিশ্লেষণ করতে, অন্য ক্লাউড প্রদানকারীতে রপ্তানি করতে, অথবা আপনার কাস্টম ML মডেলের জন্য ডেটা ব্যবহার করতে দেয়। BigQuery-তে রপ্তানি করলে বার্তার জন্য উপলব্ধ সমস্ত ডেটা অন্তর্ভুক্ত থাকে, বার্তার ধরণ নির্বিশেষে অথবা বার্তাটি API বা বিজ্ঞপ্তি কম্পোজারের মাধ্যমে পাঠানো হোক না কেন।
নিম্নলিখিত FCM SDK ন্যূনতম সংস্করণ সহ ডিভাইসগুলিতে পাঠানো বার্তাগুলির জন্য, আপনার অ্যাপের জন্য বার্তা বিতরণ ডেটা রপ্তানি সক্ষম করার জন্য আপনার কাছে অতিরিক্ত বিকল্প রয়েছে:
- Android 20.1.0 or higher.
- iOS 8.6.0 or higher
- Firebase Web SDK 9.0.0 or higher
অ্যান্ড্রয়েড এবং আইওএস- এর জন্য ডেটা এক্সপোর্ট সক্ষম করার বিশদ বিবরণের জন্য নিচে দেখুন।
শুরু করতে, আপনার প্রকল্পটি BigQuery-এর সাথে লিঙ্ক করুন:
নিম্নলিখিত বিকল্পগুলির মধ্যে একটি বেছে নিন:
Notifications composer খুলুন, তারপর পৃষ্ঠার নীচে Access BigQuery-এ ক্লিক করুন।
Firebase কনসোলের ইন্টিগ্রেশন পৃষ্ঠা থেকে, BigQuery কার্ডে লিঙ্কে ক্লিক করুন।
এই পৃষ্ঠাটি প্রকল্পের সমস্ত FCM সক্ষম অ্যাপের জন্য FCM রপ্তানি বিকল্পগুলি প্রদর্শন করে।
BigQuery সক্ষম করতে স্ক্রিনে দেওয়া নির্দেশাবলী অনুসরণ করুন।
আরও তথ্যের জন্য BigQuery-তে Firebase লিঙ্ক দেখুন।
যখন আপনি Cloud Messaging জন্য BigQuery এক্সপোর্ট সক্ষম করেন:
Firebase আপনার ডেটা BigQuery তে রপ্তানি করে। মনে রাখবেন যে রপ্তানির জন্য ডেটার প্রাথমিক প্রচার সম্পূর্ণ হতে 48 ঘন্টা পর্যন্ত সময় লাগতে পারে।
- আপনি গত 30 দিন পর্যন্ত ডেটা ব্যাকফিল ম্যানুয়ালি নির্ধারণ করতে পারেন।
ডেটাসেট তৈরি হওয়ার পরে, অবস্থান পরিবর্তন করা যাবে না, তবে আপনি ডেটাসেটটি অন্য কোনও স্থানে অনুলিপি করতে পারেন অথবা ম্যানুয়ালি ডেটাসেটটি অন্য কোনও স্থানে স্থানান্তর (পুনরায় তৈরি) করতে পারেন। আরও জানতে, ডেটাসেটের অবস্থান পরিবর্তন করুন দেখুন।
Firebase আপনার Firebase প্রকল্প থেকে BigQuery তে আপনার ডেটার নিয়মিত সিঙ্ক সেট আপ করে। এই দৈনিক রপ্তানি কার্যক্রমগুলি প্যাসিফিক সময় সকাল ৪:০০ টা থেকে শুরু হয় এবং সাধারণত ২৪ ঘন্টার মধ্যে শেষ হয়।
ডিফল্টরূপে, আপনার প্রোজেক্টের সমস্ত অ্যাপ BigQuery এর সাথে লিঙ্ক করা থাকে এবং পরবর্তীতে আপনি যে অ্যাপগুলি প্রোজেক্টে যোগ করেন সেগুলি স্বয়ংক্রিয়ভাবে BigQuery এর সাথে লিঙ্ক করা হয়। কোন অ্যাপগুলি ডেটা পাঠায় তা আপনি পরিচালনা করতে পারেন।
BigQuery এক্সপোর্ট নিষ্ক্রিয় করতে, Firebase কনসোলে আপনার প্রোজেক্টটি আনলিঙ্ক করুন ।
Enable message delivery data export
FCM SDK 8.6.0 বা উচ্চতর সংস্করণ সহ iOS ডিভাইসগুলি তাদের অ্যাপের বার্তা বিতরণ ডেটা রপ্তানি সক্ষম করতে পারে। FCM সতর্কতা এবং ব্যাকগ্রাউন্ড বিজ্ঞপ্তি উভয়ের জন্য ডেটা রপ্তানি সমর্থন করে। অ্যাপ স্তরে ডেটা রপ্তানি ডিফল্টরূপে অক্ষম করা থাকে। অ্যাপ ইনস্ট্যান্স স্তরে এটি প্রোগ্রাম্যাটিকভাবে সক্ষম করলে আপনি শেষ ব্যবহারকারীদের তাদের বার্তা বিতরণ ডেটা বিশ্লেষণ করার অনুমতি চাইতে পারেন (প্রস্তাবিত)। যখন উভয় সেট করা থাকে, তখন অ্যাপ ইনস্ট্যান্স স্তরের মান অ্যাপ স্তরের মানকে ওভাররাইড করে।
এই বিকল্পগুলি সক্রিয় করার আগে, আপনাকে প্রথমে আপনার প্রকল্পের জন্য BigQuery ডেটা এক্সপোর্টে বর্ণিত FCM -BiqQuery লিঙ্কটি তৈরি করতে হবে।
সতর্কতা বিজ্ঞপ্তির জন্য ডেলিভারি ডেটা এক্সপোর্ট সক্ষম করুন
যেহেতু শুধুমাত্র সতর্কতা বিজ্ঞপ্তিগুলি বিজ্ঞপ্তি পরিষেবা অ্যাপ এক্সটেনশনগুলিকে ট্রিগার করতে পারে, তাই আপনাকে অবশ্যই আপনার অ্যাপে একটি বিজ্ঞপ্তি পরিষেবা এক্সটেনশন যুক্ত করতে হবে এবং ডিসপ্লে বার্তা ট্র্যাকিং সক্ষম করতে একটি পরিষেবা এক্সটেনশনের মধ্যে এই 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)
}
}
অবজেক্টিভ-সি
// 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)
}
অবজেক্টিভ-সি
// 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
What data is exported to BigQuery?
মনে রাখবেন যে পুরানো টোকেন বা নিষ্ক্রিয় নিবন্ধনগুলিকে লক্ষ্য করে এই পরিসংখ্যানগুলির কিছুকে বাড়িয়ে তুলতে পারে।
এক্সপোর্ট করা টেবিলের স্কিমা হল:
| _পার্টিশনটাইম | টাইমস্ট্যাম্প | এই ছদ্ম কলামে দিনের শুরুর (UTC তে) একটি টাইমস্ট্যাম্প রয়েছে যেখানে ডেটা লোড করা হয়েছিল। YYYYMMDD পার্টিশনের জন্য, এই ছদ্ম কলামে TIMESTAMP('YYYY-MM-DD') মান রয়েছে। |
| ইভেন্ট_টাইমস্ট্যাম্প | টাইমস্ট্যাম্প | Event timestamp as recorded by the server |
| project_number | পূর্ণসংখ্যা | প্রকল্প নম্বরটি সেই প্রকল্পটিকে চিহ্নিত করে যেটি বার্তাটি পাঠিয়েছে |
| মেসেজ_আইডি | স্ট্রিং | মেসেজ আইডি একটি মেসেজ শনাক্ত করে। অ্যাপ আইডি এবং টাইমস্ট্যাম্প থেকে তৈরি, মেসেজ আইডি কিছু ক্ষেত্রে বিশ্বব্যাপী অনন্য নাও হতে পারে। |
| ইনস্ট্যান্স_আইডি | স্ট্রিং | যে অ্যাপে বার্তাটি পাঠানো হয় (যখন উপলব্ধ থাকে) তার অনন্য আইডি। এটি একটি ইনস্ট্যান্স আইডি অথবা একটি Firebase ইনস্টলেশন আইডি হতে পারে। |
| বার্তার ধরণ | স্ট্রিং | বার্তার ধরণ। বিজ্ঞপ্তি বার্তা বা ডেটা বার্তা হতে পারে। কোনও বিষয় বা প্রচারণা প্রেরণের জন্য মূল বার্তাটি সনাক্ত করতে টপিক ব্যবহার করা হয়; পরবর্তী বার্তাগুলি হয় একটি বিজ্ঞপ্তি বা ডেটা বার্তা। |
| sdk_platform | স্ট্রিং | The platform of the recipient app |
| app_name | স্ট্রিং | অ্যান্ড্রয়েড অ্যাপের প্যাকেজের নাম অথবা iOS অ্যাপের বান্ডেল আইডি |
| collapse_key | স্ট্রিং | collapse key এমন কিছু বার্তার গ্রুপকে শনাক্ত করে যেগুলো collapse করা যেতে পারে। যখন একটি ডিভাইস সংযুক্ত না থাকে, তখন শুধুমাত্র একটি নির্দিষ্ট collapse key সহ শেষ বার্তাটি শেষ ডেলিভারির জন্য সারিবদ্ধ থাকে। |
| অগ্রাধিকার | পূর্ণসংখ্যা | বার্তার অগ্রাধিকার। বৈধ মানগুলি হল "স্বাভাবিক" এবং "উচ্চ"। iOS-এ, এগুলি APN-এর অগ্রাধিকার 5 এবং 10-এর সাথে সঙ্গতিপূর্ণ। |
| টিটিএল | পূর্ণসংখ্যা | এই প্যারামিটারটি নির্দিষ্ট করে যে ডিভাইসটি অফলাইনে থাকলে বার্তাটি কতক্ষণ (সেকেন্ডে) FCM স্টোরেজে রাখা উচিত। |
| বিষয় | স্ট্রিং | যে বিষয়ে বার্তা পাঠানো হয়েছে তার নাম (যখন প্রযোজ্য) |
| bulk_id | পূর্ণসংখ্যা | বাল্ক আইডি সম্পর্কিত বার্তাগুলির একটি গ্রুপকে শনাক্ত করে, যেমন কোনও বিষয়ে পাঠানো একটি নির্দিষ্ট বার্তা |
| ঘটনা | স্ট্রিং | ইভেন্টের ধরণ। সম্ভাব্য মানগুলি হল:
|
| বিশ্লেষণ_লেবেল | স্ট্রিং | HTTP v1 API ব্যবহার করে, বার্তা পাঠানোর সময় বিশ্লেষণ লেবেল সেট করা যেতে পারে, যাতে বিশ্লেষণের উদ্দেশ্যে বার্তাটি চিহ্নিত করা যায়। |
রপ্তানি করা ডেটা দিয়ে আপনি কী করতে পারেন?
নিম্নলিখিত বিভাগগুলিতে আপনার রপ্তানি করা FCM ডেটার বিপরীতে BigQuery-তে চালানো যেতে পারে এমন প্রশ্নের উদাহরণ দেওয়া হয়েছে।
Count sent messages by app
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';Count notification messages sent
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';Count data messages sent
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';Count messages sent to a topic or campaign
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;