চলমান মেসেজ ডেলিভারি ব্যর্থতার সমস্যা সমাধানের জন্য, FCM ট্রাবলশুটার ব্যবহার করুন এবং আপনার মেসেজ দেখতে না পাওয়ার বিভিন্ন কারণ বুঝতে এই ব্লগ পোস্টটি দেখুন। এছাড়াও, FCM-কে প্রভাবিত করছে এমন কোনো চলমান পরিষেবা বিঘ্ন আছে কিনা তা শনাক্ত করতে আপনি FCM স্ট্যাটাস ড্যাশবোর্ডেও যেতে পারেন।
মেসেজিংয়ের সাফল্য এবং কৌশলের ব্যাপক মূল্যায়ন সম্পর্কে অন্তর্দৃষ্টি পেতে সাহায্য করার জন্য এফসিএম তিন সেট টুলও প্রদান করে:
- Firebase কনসোল বার্তা বিতরণ প্রতিবেদন
- Firebase Cloud Messaging ডেটা এপিআই থেকে প্রাপ্ত অ্যান্ড্রয়েড এসডিকে ডেলিভারির সম্মিলিত মেট্রিক্স
- Google BigQuery-তে পূর্ণাঙ্গ ডেটা রপ্তানি
BigQuery ডেটা এক্সপোর্ট এবং Firebase কনসোলের রিপোর্টস ট্যাব কাজ করার জন্য Google Analytics প্রয়োজন। যদি আপনার প্রোজেক্টের জন্য Google Analytics সক্রিয় করা না থাকে, তাহলে আপনি আপনার Firebase প্রোজেক্ট সেটিংসের ইন্টিগ্রেশন ট্যাবে এটি সেট আপ করতে পারেন। অ্যাগ্রিগেটেড ডেলিভারি ডেটা কাজ করার জন্য Google Analytics প্রয়োজন হয় না।
মনে রাখবেন যে, অ্যানালিটিক্স ডেটা ব্যাচিং করার কারণে এই পৃষ্ঠার অনেক পরিসংখ্যান প্রকাশ হতে ২৪ ঘণ্টা পর্যন্ত বিলম্ব হতে পারে।
বার্তা বিতরণ প্রতিবেদন
Firebase কনসোলের Reports ট্যাবে, আপনি Android বা Apple প্ল্যাটফর্মের FCM SDK-তে পাঠানো মেসেজগুলির জন্য নিম্নলিখিত ডেটা দেখতে পারেন, যার মধ্যে Notifications composer এবং FCM API ব্যবহার করে পাঠানো মেসেজগুলিও অন্তর্ভুক্ত:
- প্রেরণ করা হয়েছে — ডেটা বার্তা বা বিজ্ঞপ্তি বার্তাটি বিতরণের জন্য সারিতে যুক্ত করা হয়েছে অথবা বিতরণের জন্য APNs-এর মতো কোনো তৃতীয় পক্ষের পরিষেবাতে সফলভাবে পাঠানো হয়েছে। উল্লেখ্য যে, প্রেরণের পরিসংখ্যান প্রকাশ পেতে কয়েক ঘণ্টা দেরি হতে পারে। আরও তথ্যের জন্য একটি বার্তার জীবনকাল দেখুন।
- প্রাপ্ত (শুধুমাত্র অ্যান্ড্রয়েড ডিভাইসের জন্য উপলব্ধ) — ডেটা মেসেজ বা নোটিফিকেশন মেসেজটি অ্যাপে গৃহীত হয়েছে। যে অ্যান্ড্রয়েড ডিভাইসটি মেসেজটি গ্রহণ করছে, তাতে FCM SDK 18.0.1 বা তার উচ্চতর সংস্করণ ইনস্টল করা থাকলে এই ডেটা পাওয়া যাবে।
- ইম্প্রেশন (শুধুমাত্র অ্যান্ড্রয়েড ডিভাইসের নোটিফিকেশন মেসেজের জন্য উপলব্ধ) — অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় ডিভাইসে ডিসপ্লে নোটিফিকেশনটি প্রদর্শিত হয়েছে।
- খোলে — ব্যবহারকারী নোটিফিকেশন বার্তাটি খুলেছেন। শুধুমাত্র সেইসব নোটিফিকেশনের জন্য রিপোর্ট করা হয় যা অ্যাপটি ব্যাকগ্রাউন্ডে থাকাকালীন পাওয়া যায়।
এই ডেটা নোটিফিকেশন পেলোড সহ সমস্ত মেসেজ এবং সমস্ত লেবেলযুক্ত ডেটা মেসেজের জন্য উপলব্ধ। লেবেল সম্পর্কে আরও জানতে, “মেসেজে অ্যানালিটিক্স লেবেল যোগ করা” দেখুন।
মেসেজ রিপোর্ট দেখার সময়, আপনি প্রদর্শিত ডেটার জন্য একটি তারিখের সীমা নির্ধারণ করতে পারেন এবং CSV-তে এক্সপোর্ট করার বিকল্পও রয়েছে। এছাড়াও আপনি এই মানদণ্ডগুলো দ্বারা ফিল্টার করতে পারেন:
- প্ল্যাটফর্ম (iOS বা Android)
- অ্যাপ
- কাস্টম অ্যানালিটিক্স লেবেল
মেসেজে অ্যানালিটিক্স লেবেল যোগ করা
কাস্টম বিশ্লেষণের জন্য মেসেজ লেবেল করা খুবই কার্যকরী, যা আপনাকে লেবেল বা একাধিক লেবেলের মাধ্যমে ডেলিভারি পরিসংখ্যান ফিল্টার করার সুযোগ দেয়। HTTP v1 API ব্যবহার করে পাঠানো যেকোনো মেসেজে, মেসেজ অবজেক্টের fcmOptions.analyticsLabel ফিল্ডে অথবা প্ল্যাটফর্ম-নির্দিষ্ট AndroidFcmOptions বা ApnsFcmOptions ফিল্ডে লেবেল সেট করে আপনি একটি লেবেল যোগ করতে পারেন।
অ্যানালিটিক্স লেবেল হলো ^[a-zA-Z0-9-_.~%]{1,50}$ ফরম্যাটের টেক্সট স্ট্রিং। লেবেলে ছোট ও বড় হাতের অক্ষর, সংখ্যা এবং নিম্নলিখিত চিহ্নগুলো অন্তর্ভুক্ত থাকতে পারে:
-
- -
~ -
%
সর্বোচ্চ দৈর্ঘ্য ৫০ অক্ষর। আপনি প্রতিদিন সর্বোচ্চ ১০০টি স্বতন্ত্র লেবেল নির্দিষ্ট করতে পারবেন; এই সীমার বাইরে লেবেল যুক্ত করা বার্তাগুলো রিপোর্ট করা হয় না।
Firebase কনসোল মেসেজিং-এর রিপোর্টস ট্যাবে, আপনি বিদ্যমান সমস্ত লেবেলের একটি তালিকা অনুসন্ধান করতে পারেন এবং প্রদর্শিত পরিসংখ্যান ফিল্টার করার জন্য সেগুলিকে এককভাবে বা সম্মিলিতভাবে প্রয়োগ করতে পারেন।
FCM ডেটা এপিআই ব্যবহার করে একত্রিত ডেলিভারি ডেটা
ফায়ারবেস ক্লাউড মেসেজিং ডেটা এপিআই আপনাকে এমন তথ্য পুনরুদ্ধার করতে দেয় যা অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলিতে পাঠানো মেসেজ অনুরোধগুলির ফলাফল বুঝতে সাহায্য করে। এই এপিআই একটি প্রোজেক্টের সমস্ত ডেটা সংগ্রহ-সক্ষম অ্যান্ড্রয়েড ডিভাইস জুড়ে একত্রিত ডেটা সরবরাহ করে। এর মধ্যে বিলম্ব ছাড়াই ডেলিভারি হওয়া মেসেজের শতাংশের বিবরণ এবং অ্যান্ড্রয়েড ট্রান্সপোর্ট লেয়ারের মধ্যে কতগুলি মেসেজ বিলম্বিত বা বাদ পড়েছে তার তথ্য অন্তর্ভুক্ত থাকে। এই ডেটা মূল্যায়ন করলে মেসেজ ডেলিভারির ব্যাপক প্রবণতা প্রকাশ পেতে পারে এবং আপনার সেন্ড রিকোয়েস্টের পারফরম্যান্স উন্নত করার কার্যকর উপায় খুঁজে পেতে সাহায্য করতে পারে। রিপোর্টগুলিতে নির্দিষ্ট তারিখের প্রাপ্যতা সম্পর্কে তথ্যের জন্য 'এগ্রিগেট ডেটা টাইমলাইনস' দেখুন।
এপিআই একটি নির্দিষ্ট অ্যাপ্লিকেশনের জন্য উপলব্ধ সমস্ত ডেটা সরবরাহ করে। এপিআই রেফারেন্স ডকুমেন্টেশন দেখুন।
ডেটা কীভাবে বিভক্ত করা হয়?
ডেলিভারি ডেটা অ্যাপ্লিকেশন, তারিখ এবং অ্যানালিটিক্স লেবেল অনুসারে ভাগ করা থাকে। এপিআই-তে কল করলে তারিখ, অ্যাপ্লিকেশন এবং অ্যানালিটিক্স লেবেলের প্রতিটি সমন্বয়ের জন্য ডেটা ফেরত আসবে। উদাহরণস্বরূপ, একটি একক 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
}
}
মেট্রিকগুলো কীভাবে ব্যাখ্যা করবেন
ডেলিভারি ডেটা নিম্নলিখিত প্রতিটি মেট্রিকের সাথে সামঞ্জস্যপূর্ণ মেসেজের শতাংশের রূপরেখা দেয়। এমন হতে পারে যে একটি একক মেসেজ একাধিক মেট্রিকের সাথে মিলে যায়। আমাদের ডেটা সংগ্রহের পদ্ধতি এবং মেট্রিকগুলোকে যে সূক্ষ্ম স্তরে একত্রিত করা হয়েছে, তার সীমাবদ্ধতার কারণে কিছু মেসেজের ফলাফল মেট্রিকগুলোতে একেবারেই অন্তর্ভুক্ত নয়, তাই নীচের শতাংশগুলোর যোগফল ১০০% হবে না।
গৃহীত বার্তার সংখ্যা
ডেটাসেটে শুধুমাত্র সেই মেসেজগুলোর সংখ্যা অন্তর্ভুক্ত করা হয়েছে, যেগুলো অ্যান্ড্রয়েড ডিভাইসে ডেলিভারির জন্য FCM দ্বারা গৃহীত হয়েছে। সমস্ত শতাংশ গণনার ক্ষেত্রে এই মানটিকে হর হিসেবে ব্যবহার করা হয়। মনে রাখবেন, যেসব ব্যবহারকারী তাদের ডিভাইসে ব্যবহার ও ডায়াগনস্টিক তথ্য সংগ্রহ নিষ্ক্রিয় করে রেখেছেন, তাদের উদ্দেশ্যে পাঠানো মেসেজগুলো এই গণনার অন্তর্ভুক্ত হবে না।
বার্তার ফলাফলের শতাংশ
MessageOutcomePercents অবজেক্টের অন্তর্ভুক্ত ফিল্ডগুলো মেসেজ রিকোয়েস্টের ফলাফল সম্পর্কে তথ্য প্রদান করে। ক্যাটাগরিগুলো সবই পরস্পর স্বতন্ত্র। এটি "আমার মেসেজগুলো কি ডেলিভার হচ্ছে?" এবং "কী কারণে মেসেজ ড্রপ হচ্ছে?"-এর মতো প্রশ্নের উত্তর দিতে পারে।
উদাহরণস্বরূপ, droppedTooManyPendingMessages ফিল্ডের একটি উচ্চ মান ইঙ্গিত দিতে পারে যে অ্যাপ ইনস্ট্যান্সগুলি FCM এর ১০০টি পেন্ডিং মেসেজের সীমা অতিক্রম করে বিপুল পরিমাণে নন-কোল্যাপসিবল মেসেজ পাচ্ছে। এটি সমাধান করতে, নিশ্চিত করুন যে আপনার অ্যাপ onDeletedMessages কলগুলি পরিচালনা করে এবং কোল্যাপসিবল মেসেজ পাঠানোর কথা বিবেচনা করুন। একইভাবে, droppedDeviceInactive এর উচ্চ শতাংশ আপনার সার্ভারে রেজিস্ট্রেশন টোকেন আপডেট করার একটি সংকেত হতে পারে, যা পুরনো টোকেনগুলি সরিয়ে দেয় এবং টপিক থেকে সেগুলিকে আনসাবস্ক্রাইব করে। এই ক্ষেত্রে সেরা অনুশীলনের জন্য Manage FCM registration tokens দেখুন।
ডেলিভারি পারফরম্যান্স শতাংশ
DeliveryPerformancePercents অবজেক্টের ফিল্ডগুলো সফলভাবে ডেলিভারি হওয়া মেসেজ সম্পর্কে তথ্য প্রদান করে। এটি "আমার মেসেজগুলো কি দেরিতে পৌঁছেছে?" এবং "মেসেজগুলো কেন দেরিতে পৌঁছাচ্ছে?"-এর মতো প্রশ্নের উত্তর দিতে পারে। উদাহরণস্বরূপ, delayedMessageThrottled এর একটি উচ্চ মান স্পষ্টভাবে নির্দেশ করে যে আপনি ডিভাইস-ভিত্তিক সর্বোচ্চ সীমা অতিক্রম করছেন, এবং আপনার মেসেজ পাঠানোর হার সামঞ্জস্য করা উচিত।
বার্তা অন্তর্দৃষ্টি শতাংশ
এই অবজেক্টটি সমস্ত বার্তা প্রেরণ সম্পর্কে অতিরিক্ত তথ্য প্রদান করে। priorityLowered ফিল্ডটি গৃহীত বার্তাগুলির শতাংশ প্রকাশ করে, যেগুলির প্রায়োরিটি HIGH থেকে NORMAL এ নামিয়ে আনা হয়েছে। যদি এই মান বেশি হয়, তাহলে কম সংখ্যক উচ্চ প্রায়োরিটির বার্তা পাঠানোর চেষ্টা করুন অথবা নিশ্চিত করুন যে একটি উচ্চ প্রায়োরিটির বার্তা পাঠানো হলে আপনি সর্বদা একটি বিজ্ঞপ্তি প্রদর্শন করছেন। আরও তথ্যের জন্য বার্তার প্রায়োরিটি সম্পর্কিত আমাদের ডকুমেন্টেশন দেখুন।
এই ডেটা BigQuery-তে এক্সপোর্ট করা ডেটা থেকে কীভাবে আলাদা?
BigQuery এক্সপোর্ট, FCM ব্যাকএন্ড দ্বারা মেসেজ গ্রহণ এবং ডিভাইসের SDK-তে মেসেজ ডেলিভারি সংক্রান্ত স্বতন্ত্র মেসেজ লগ প্রদান করে ( FCM আর্কিটেকচারের ধাপ ২ এবং ৪)। স্বতন্ত্র মেসেজগুলো গৃহীত ও ডেলিভারি হয়েছে কিনা, তা নিশ্চিত করতে এই ডেটা সহায়ক। পরবর্তী বিভাগে BigQuery ডেটা এক্সপোর্ট সম্পর্কে আরও পড়ুন।
এর বিপরীতে, ফায়ারবেস ক্লাউড মেসেজিং ডেটা এপিআই বিশেষভাবে অ্যান্ড্রয়েড ট্রান্সপোর্ট লেয়ারে (বা এফসিএম আর্কিটেকচারের ধাপ ৩-এ) কী ঘটে, সে সম্পর্কে সামগ্রিক বিবরণ প্রদান করে। এই ডেটা বিশেষভাবে এফসিএম ব্যাকএন্ড থেকে অ্যান্ড্রয়েড এসডিকে-তে মেসেজ ডেলিভারি সম্পর্কে ধারণা দেয়। এই ট্রান্সপোর্টের সময় কেন মেসেজ বিলম্বিত বা বাদ পড়েছিল, তার প্রবণতা দেখানোর জন্য এটি বিশেষভাবে উপযোগী।
কিছু ক্ষেত্রে, নিম্নলিখিত কারণগুলোর জন্য দুটি ডেটা সেট হুবহু নাও মিলতে পারে:
- সামগ্রিক মেট্রিকগুলো সমস্ত বার্তার কেবল একটি অংশকে নমুনা হিসেবে উপস্থাপন করে।
- সমষ্টিগত মেট্রিকগুলি নিকটতম পূর্ণসংখ্যায় রূপান্তর করা হয়েছে।
- আমরা গোপনীয়তার সীমার নিচের মেট্রিকগুলো উপস্থাপন করি না।
- বিপুল পরিমাণ ট্র্যাফিক ব্যবস্থাপনার পদ্ধতিতে অপ্টিমাইজেশন করার কারণে বার্তার ফলাফলের একটি অংশ অনুপস্থিত রয়েছে।
এপিআই-এর সীমাবদ্ধতা
সমষ্টিগত ডেটা টাইমলাইন
এপিআইটি ৭ দিনের ঐতিহাসিক ডেটা ফেরত দেবে; তবে, এই এপিআই দ্বারা ফেরত আসা ডেটা সর্বোচ্চ ৫ দিন পর্যন্ত বিলম্বিত হতে পারে। উদাহরণস্বরূপ, ২০শে জানুয়ারী তারিখে, ৯ই জানুয়ারী থেকে ১৫ই জানুয়ারী পর্যন্ত ডেটা পাওয়া যাবে, কিন্তু ১৬ই জানুয়ারী বা তার পরের ডেটা পাওয়া যাবে না। এছাড়াও, ডেটা সাধ্যমতো সরবরাহ করা হয়। ডেটা বিভ্রাটের ক্ষেত্রে, এফসিএম সমস্যাটি সমাধান করার জন্য কাজ করবে এবং সমস্যাটি সমাধান হওয়ার পরে ডেটা পুনরায় পূরণ করবে না। বড় ধরনের বিভ্রাটের ক্ষেত্রে, ডেটা এক সপ্তাহ বা তার বেশি সময় ধরে অনুপলব্ধ থাকতে পারে।
ডেটা কভারেজ
ফায়ারবেস ক্লাউড মেসেজিং ডেটা এপিআই দ্বারা প্রদত্ত মেট্রিকগুলো মেসেজ ডেলিভারির সাধারণ প্রবণতা সম্পর্কে ধারণা দেওয়ার জন্য তৈরি। তবে, এগুলো সব ধরনের মেসেজ পরিস্থিতির শতভাগ চিত্র তুলে ধরে না। নিম্নলিখিত পরিস্থিতিগুলো হলো এমন কিছু পরিচিত ফলাফল যা এই মেট্রিকগুলোতে প্রতিফলিত হয় না।
মেয়াদোত্তীর্ণ বার্তা
যদি প্রদত্ত লগ তারিখ শেষ হওয়ার পরে টাইম টু লিভ (TTL) এর মেয়াদ শেষ হয়ে যায়, তাহলে বার্তাটি এই তারিখে droppedTtlExpired হিসাবে গণ্য হবে না।
নিষ্ক্রিয় ডিভাইসগুলিতে বার্তা
নিষ্ক্রিয় ডিভাইসগুলিতে পাঠানো বার্তাগুলি ডেটাসেটে প্রদর্শিত হতেও পারে বা নাও হতে পারে, যা নির্ভর করে বার্তাগুলি কোন ডেটা পাথ অনুসরণ করছে তার উপর। এর ফলে droppedDeviceInactive এবং pending ফিল্ডগুলিতে গণনায় কিছু ভুল হতে পারে।
নির্দিষ্ট ব্যবহারকারী পছন্দ সহ ডিভাইসগুলিতে বার্তা
যেসব ব্যবহারকারী তাদের ডিভাইসে ব্যবহার ও ডায়াগনস্টিক তথ্য সংগ্রহ নিষ্ক্রিয় করেছেন, তাদের পছন্দ অনুযায়ী তাদের বার্তাগুলো আমাদের গণনার অন্তর্ভুক্ত করা হবে না।
আসন্নীকরণ এবং সর্বনিম্ন
যেসব ক্ষেত্রে ভলিউম যথেষ্ট বড় নয়, এফসিএম ইচ্ছাকৃতভাবে সেগুলোকে রাউন্ড করে এবং বাদ দেয়।
BigQuery ডেটা রপ্তানি
আরও বিশ্লেষণের জন্য আপনি আপনার মেসেজ ডেটা BigQuery- তে এক্সপোর্ট করতে পারেন। BigQuery আপনাকে BigQuery SQL ব্যবহার করে ডেটা বিশ্লেষণ করতে, অন্য কোনো ক্লাউড প্রোভাইডারে এক্সপোর্ট করতে, অথবা আপনার নিজস্ব ML মডেলের জন্য ডেটা ব্যবহার করতে দেয়। BigQuery-তে এক্সপোর্ট করলে মেসেজের জন্য উপলব্ধ সমস্ত ডেটা অন্তর্ভুক্ত থাকে, মেসেজের ধরন বা মেসেজটি API অথবা নোটিফিকেশন কম্পোজার ব্যবহার করে পাঠানো হয়েছে কিনা, তা নির্বিশেষে।
নিম্নলিখিত ন্যূনতম FCM SDK সংস্করণযুক্ত ডিভাইসগুলিতে পাঠানো বার্তাগুলির জন্য, আপনার অ্যাপের হয়ে বার্তা ডেলিভারি ডেটা এক্সপোর্ট সক্ষম করার অতিরিক্ত বিকল্প রয়েছে:
- অ্যান্ড্রয়েড ২০.১.০ বা উচ্চতর সংস্করণ।
- iOS 8.6.0 বা তার চেয়ে উচ্চতর
- ফায়ারবেস ওয়েব এসডিকে ৯.০.০ বা উচ্চতর
শুরু করতে, আপনার প্রজেক্টটি BigQuery-এর সাথে লিঙ্ক করুন:
নিম্নলিখিত বিকল্পগুলির মধ্যে একটি বেছে নিন:
নোটিফিকেশন কম্পোজারটি খুলুন, তারপর পেজের নিচের দিকে থাকা অ্যাক্সেস বিগকোয়েরি (Access BigQuery) -তে ক্লিক করুন।
Firebase কনসোলের ইন্টিগ্রেশন পেজ থেকে, BigQuery কার্ডে থাকা Link- এ ক্লিক করুন।
এই পৃষ্ঠাটি প্রোজেক্টের সমস্ত FCM সক্ষম অ্যাপের জন্য FCM এক্সপোর্ট অপশনগুলো প্রদর্শন করে।
BigQuery সক্রিয় করতে স্ক্রিনে দেওয়া নির্দেশাবলী অনুসরণ করুন।
আরও তথ্যের জন্য “Link Firebase to BigQuery” দেখুন।
যখন আপনি Cloud Messaging জন্য BigQuery এক্সপোর্ট সক্রিয় করেন:
Firebase আপনার ডেটা BigQuery তে এক্সপোর্ট করে। উল্লেখ্য যে, এক্সপোর্টের জন্য ডেটার প্রাথমিক প্রসারণ সম্পূর্ণ হতে ৪৮ ঘণ্টা পর্যন্ত সময় লাগতে পারে।
- আপনি ম্যানুয়ালি বিগত ৩০ দিন পর্যন্ত ডেটা ব্যাকফিল করার সময়সূচী নির্ধারণ করতে পারেন।
ডেটাসেট তৈরি করার পরে এর অবস্থান পরিবর্তন করা যায় না, তবে আপনি ডেটাসেটটি অন্য কোনো স্থানে কপি করতে পারেন অথবা ম্যানুয়ালি অন্য কোনো স্থানে সরিয়ে (পুনরায় তৈরি) করতে পারেন। আরও জানতে, ডেটাসেটের অবস্থান পরিবর্তন দেখুন।
Firebase আপনার Firebase প্রজেক্ট থেকে BigQuery তে নিয়মিত ডেটা সিঙ্ক করার ব্যবস্থা করে। এই দৈনিক এক্সপোর্ট প্রক্রিয়া প্যাসিফিক সময় ভোর ৪:০০ টায় শুরু হয় এবং সাধারণত ২৪ ঘণ্টার মধ্যে শেষ হয়।
ডিফল্টরূপে, আপনার প্রোজেক্টের সমস্ত অ্যাপ BigQuery এর সাথে লিঙ্ক করা থাকে এবং পরবর্তীতে আপনি প্রোজেক্টে যে অ্যাপগুলো যোগ করেন, সেগুলোও স্বয়ংক্রিয়ভাবে BigQuery এর সাথে লিঙ্ক হয়ে যায়। কোন কোন অ্যাপ ডেটা পাঠাবে, তা আপনি নিয়ন্ত্রণ করতে পারেন।
BigQuery এক্সপোর্ট নিষ্ক্রিয় করতে, Firebase কনসোলে আপনার প্রজেক্টটি আনলিঙ্ক করুন ।
বার্তা বিতরণ ডেটা রপ্তানি সক্ষম করুন
iOS+
FCM SDK 8.6.0 বা তার উচ্চতর সংস্করণযুক্ত iOS ডিভাইসগুলো তাদের অ্যাপের মেসেজ ডেলিভারি ডেটা এক্সপোর্ট চালু করতে পারে। FCM অ্যালার্ট এবং ব্যাকগ্রাউন্ড নোটিফিকেশন উভয়ের জন্যই ডেটা এক্সপোর্ট সমর্থন করে। অ্যাপ লেভেলে ডেটা এক্সপোর্ট ডিফল্টরূপে নিষ্ক্রিয় থাকে। অ্যাপ ইনস্ট্যান্স লেভেলে প্রোগ্রাম্যাটিকভাবে এটি সক্রিয় করলে, আপনি ব্যবহারকারীদের মেসেজ ডেলিভারি ডেটা বিশ্লেষণ করার জন্য তাদের কাছে অনুমতি চাইতে পারবেন (এটিই সুপারিশকৃত)। যখন উভয়ই সেট করা থাকে, তখন অ্যাপ ইনস্ট্যান্স লেভেলের মানটি অ্যাপ লেভেলের মানকে ওভাররাইড করে।
এই বিকল্পগুলি সক্রিয় করার আগে, আপনাকে প্রথমে BigQuery ডেটা এক্সপোর্ট- এ বর্ণিত পদ্ধতি অনুসারে আপনার প্রোজেক্টের জন্য FCM -BiqQuery লিঙ্কটি তৈরি করতে হবে।
সতর্কতা বিজ্ঞপ্তির জন্য ডেলিভারি ডেটা রপ্তানি সক্ষম করুন
যেহেতু শুধুমাত্র অ্যালার্ট নোটিফিকেশনই নোটিফিকেশন সার্ভিস অ্যাপ এক্সটেনশন চালু করতে পারে, তাই ডিসপ্লে মেসেজ ট্র্যাকিং সক্ষম করার জন্য আপনাকে অবশ্যই আপনার অ্যাপে একটি নোটিফিকেশন সার্ভিস এক্সটেনশন যোগ করতে হবে এবং একটি সার্ভিস এক্সটেনশনের ভিতরে এই API-টি কল করতে হবে। নতুন ডেলিভার হওয়া নোটিফিকেশনের বিষয়বস্তু পরিবর্তন করার বিষয়ে Apple-এর ডকুমেন্টেশন দেখুন।
প্রাপ্ত প্রতিটি বিজ্ঞপ্তির জন্য নিম্নলিখিত কলটি অবশ্যই করতে হবে:সুইফট
// 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
অ্যান্ড্রয়েড
FCM SDK 20.1.0 বা তার উচ্চতর সংস্করণযুক্ত অ্যান্ড্রয়েড ডিভাইসগুলো তাদের অ্যাপের মেসেজ ডেলিভারি ডেটা এক্সপোর্ট চালু করতে পারে। অ্যাপ লেভেলে ডেটা এক্সপোর্ট ডিফল্টরূপে নিষ্ক্রিয় থাকে। অ্যাপ ইনস্ট্যান্স লেভেলে প্রোগ্রাম্যাটিকভাবে এটি সক্রিয় করলে, আপনি ব্যবহারকারীদের মেসেজ ডেলিভারি ডেটা বিশ্লেষণ করার জন্য তাদের কাছে অনুমতি চাইতে পারবেন (যা সুপারিশ করা হয়)। যখন উভয়ই সেট করা থাকে, তখন অ্যাপ ইনস্ট্যান্স লেভেলের মানটি অ্যাপ লেভেলের মানকে ওভাররাইড করে।
এই বিকল্পগুলি সক্রিয় করার আগে, আপনাকে প্রথমে BigQuery ডেটা এক্সপোর্ট- এ বর্ণিত পদ্ধতি অনুসারে আপনার প্রোজেক্টের জন্য FCM -BiqQuery লিঙ্কটি তৈরি করতে হবে।
অ্যাপ ইনস্ট্যান্সগুলির জন্য ডেলিভারি ডেটা রপ্তানি সক্ষম করুন
বেশিরভাগ ক্ষেত্রে, আমরা সুপারিশ করি যে আপনি মেসেজ ডেলিভারি ডেটা এক্সপোর্ট শুধুমাত্র অ্যাপ ইনস্ট্যান্স লেভেলে সক্রিয় করুন এবং অ্যাপ লেভেলে এটি নিষ্ক্রিয় রাখুন।
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 9.0.0 ডেলিভারি ডেটা এক্সপোর্টের একটি আলফা রিলিজ প্রদান করে। অ্যাপ লেভেলে ডেটা এক্সপোর্ট ডিফল্টরূপে নিষ্ক্রিয় থাকে। অ্যাপ ইনস্ট্যান্স লেভেলে প্রোগ্রাম্যাটিকভাবে এটি সক্রিয় করলে, আপনি ব্যবহারকারীদের মেসেজ ডেলিভারি ডেটা বিশ্লেষণ করার জন্য তাদের কাছে অনুমতি চাইতে পারবেন (যা সুপারিশ করা হয়)। যখন উভয়ই সেট করা থাকে, তখন অ্যাপ ইনস্ট্যান্স লেভেলের মানটি অ্যাপ লেভেলের মানকে ওভাররাইড করে। যখন কোনো ব্যবহারকারী ডেটা সংগ্রহের জন্য সম্মতি দেন বা প্রত্যাখ্যান করেন, তখন অ্যাপটিকে প্রতিটি অ্যাপ ইনস্ট্যান্সের জন্য পরীক্ষামূলক সক্রিয় বা নিষ্ক্রিয় ফ্ল্যাগ সেট করতে হবে, যেমনটি দেখানো হয়েছে:
// userConsent holds the decision of the user to give big query export consent. const userConsent = ...; const messaging = getMessagingInSw(app); experimentalSetDeliveryMetricsExportedToBigQuery(messaging, userConsent);
BigQuery-তে কোন ডেটা এক্সপোর্ট করা হয়?
মনে রাখবেন যে, মেয়াদোত্তীর্ণ টোকেন বা নিষ্ক্রিয় নিবন্ধনগুলোকে লক্ষ্যবস্তু করলে এই পরিসংখ্যানগুলোর কয়েকটির মান বেড়ে যেতে পারে।
এক্সপোর্ট করা টেবিলের স্কিমাটি হলো:
| পার্টিশনটাইম | টাইমস্ট্যাম্প | এই সিউডো কলামটিতে সেই দিনের (UTC-তে) শুরুর একটি টাইমস্ট্যাম্প থাকে, যে সময়ে ডেটা লোড করা হয়েছিল। YYYYMMDD পার্টিশনের জন্য, এই সিউডো কলামটিতে TIMESTAMP('YYYY-MM-DD') মানটি থাকে। |
| ইভেন্টের সময়স্ট্যাম্প | টাইমস্ট্যাম্প | সার্ভার দ্বারা রেকর্ডকৃত ইভেন্টের টাইমস্ট্যাম্প |
| প্রকল্প_নম্বর | পূর্ণসংখ্যা | প্রজেক্ট নম্বরটি সেই প্রজেক্টকে শনাক্ত করে যেখান থেকে বার্তাটি পাঠানো হয়েছে। |
| বার্তা_আইডি | স্ট্রিং | মেসেজ আইডি একটি মেসেজকে শনাক্ত করে। অ্যাপ আইডি এবং টাইমস্ট্যাম্প থেকে তৈরি হওয়ায়, মেসেজ আইডিটি কিছু ক্ষেত্রে বিশ্বব্যাপী অনন্য নাও হতে পারে। |
| ইনস্ট্যান্স_আইডি | স্ট্রিং | যে অ্যাপে বার্তাটি পাঠানো হয় তার অনন্য আইডি (যদি থাকে)। এটি একটি ইনস্ট্যান্স আইডি বা Firebase ইনস্টলেশন আইডি হতে পারে। |
| বার্তার_ধরন | স্ট্রিং | বার্তার ধরণ। এটি নোটিফিকেশন বার্তা বা ডেটা বার্তা হতে পারে। কোনো টপিক বা ক্যাম্পেইন পাঠানোর জন্য মূল বার্তাটি শনাক্ত করতে টপিক ব্যবহার করা হয়; এর পরবর্তী বার্তাগুলো হয় নোটিফিকেশন অথবা ডেটা বার্তা। |
| এসডিকে_প্ল্যাটফর্ম | স্ট্রিং | প্রাপক অ্যাপের প্ল্যাটফর্ম |
| অ্যাপের নাম | স্ট্রিং | অ্যান্ড্রয়েড অ্যাপের জন্য প্যাকেজ নাম অথবা আইওএস অ্যাপের জন্য বান্ডেল আইডি |
| collapse_key | স্ট্রিং | কলাপস কী এমন একগুচ্ছ মেসেজকে চিহ্নিত করে যেগুলোকে কলাপস করা যায়। যখন কোনো ডিভাইস সংযুক্ত থাকে না, তখন একটি নির্দিষ্ট কলাপস কী-সহ শুধুমাত্র সর্বশেষ মেসেজটিই পরবর্তী ডেলিভারির জন্য কিউতে যুক্ত হয়। |
| অগ্রাধিকার | পূর্ণসংখ্যা | বার্তার অগ্রাধিকার। ৫ হলো 'সাধারণ' অগ্রাধিকার এবং ১০ হলো 'উচ্চ' অগ্রাধিকার। |
| টিটিএল | পূর্ণসংখ্যা | এই প্যারামিটারটি নির্দিষ্ট করে যে ডিভাইসটি অফলাইনে থাকলে বার্তাটি কতক্ষণ (সেকেন্ডে) FCM স্টোরেজে রাখা হবে। |
| বিষয় | স্ট্রিং | যে বিষয়ে বার্তা পাঠানো হয়েছিল তার নাম (প্রযোজ্য ক্ষেত্রে) |
| বাল্ক_আইডি | পূর্ণসংখ্যা | বাল্ক আইডি সম্পর্কিত বার্তাগুলির একটি গোষ্ঠীকে শনাক্ত করে, যেমন কোনো একটি টপিকে পাঠানো নির্দিষ্ট বার্তা। |
| অনুষ্ঠান | স্ট্রিং | ইভেন্টের ধরণ। সম্ভাব্য মানগুলো হলো:
|
| অ্যানালিটিক্স_লেবেল | স্ট্রিং | 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;