| প্ল্যাটফর্ম বেছে নিন: | iOS+ Android ওয়েব Flutter Unity C++ |
মেসেজ পেতে, আপনি এমন পরিষেবা ব্যবহার করতে পারেন যা
FirebaseMessagingService-এর পরিধি বাড়ায়।
আপনার পরিষেবার onMessageReceived এবং onDeletedMessages
কলব্যাক ওভাররাইড করা উচিত। সম্পূর্ণ উদাহরণের জন্য, Firebase Cloud Messaging কুইকস্টার্ট
স্যাম্পেল দেখুন।
onMessageReceived বেশিরভাগ মেসেজের ধরনের জন্য প্রদান করা হয়, তবে নিম্নলিখিত
ব্যতিক্রমগুলি রয়েছে:
আপনার অ্যাপ ব্যাকগ্রাউন্ডে থাকাকালীন বিজ্ঞপ্তি মেসেজ ডেলিভার করা হয়। এই ক্ষেত্রে, ডিভাইসের সিস্টেম ট্রেতে বিজ্ঞপ্তি ডেলিভার করা হয়। ব্যবহারকারী কোনও বিজ্ঞপ্তিতে ট্যাপ করলে, ডিফল্ট হিসেবে অ্যাপ লঞ্চার খুলে যায়।
বিজ্ঞপ্তি ও ডেটা পেলোড সহ মেসেজ, ব্যাকগ্রাউন্ডে রিসিভ করা হলে। এই ক্ষেত্রে, বিজ্ঞপ্তিটি ডিভাইসের সিস্টেম ট্রেতে ডেলিভার করা হয় এবং ডেটা পেলোডটি আপনার লঞ্চার অ্যাক্টিভিটির ইনটেন্টের এক্সট্রাতে ডেলিভার করা হয়।
সংক্ষেপে:
| অ্যাপের স্ট্যাটাস | বিজ্ঞপ্তি | ডেটা | উভয়ই |
|---|---|---|---|
| ফোরগ্রাউন্ড | onMessageReceived |
onMessageReceived |
onMessageReceived |
| ব্যাকগ্রাউন্ড | সিস্টেম ট্রে | onMessageReceived |
বিজ্ঞপ্তি: সিস্টেম ট্রে ডেটা: ইনটেন্টের অতিরিক্ত অংশে। |
মেসেজের ধরন সম্পর্কে আরও তথ্য পেতে, বিজ্ঞপ্তি ও ডেটা মেসেজ দেখুন।
onMessageReceived কলব্যাকের এক্সিকিউশন উইন্ডো ছোট। এই উইন্ডো কতক্ষণ চলবে তা বিভিন্ন বিষয়
দ্বারা প্রভাবিত হতে পারে, যার মধ্যে রয়েছে OS সংক্রান্ত বিলম্ব, অ্যাপ চালু হওয়ার সময়, অন্যান্য অপারেশন দ্বারা প্রধান
থ্রেড ব্লক করা বা আগের onMessageReceived কল
অনেক বেশি সময় নেওয়া।
এই কারণে, onMessageReceived-এ দীর্ঘ সময় ধরে চলা টাস্ক (যেমন, বিজ্ঞপ্তিতে দেখানোর জন্য
সার্ভার থেকে ছবি নিয়ে আসা) এড়িয়ে চলা উচিত এবং এর পরিবর্তে
WorkManager ব্যবহার করে এমন টাস্ক শিডিউল করা উচিত যা সম্পূর্ণ হতে
কয়েক সেকেন্ডের বেশি সময় লাগতে পারে। মেসেজের অগ্রাধিকার এবং এটি কীভাবে প্রসেসিংকে প্রভাবিত করে সেই সম্পর্কে আরও তথ্যের জন্য, উচ্চ এবং স্বাভাবিক অগ্রাধিকার মেসেজের জন্য মেসেজ প্রসেসিং দেখুন।
অ্যাপ ম্যানিফেস্ট এডিট করা
FirebaseMessagingService ব্যবহার করতে, আপনার অ্যাপের
ম্যানিফেস্টে নিম্নলিখিত বিষয়গুলি যোগ করতে হবে:
<service
android:name=".java.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
বিজ্ঞপ্তির চেহারা কাস্টমাইজ করতে ডিফল্ট ভ্যালু সেট করার পরামর্শ দেওয়া হয়। আপনি একটি কাস্টম ডিফল্ট আইকন এবং একটি কাস্টম ডিফল্ট রঙ নির্দিষ্ট করতে পারেন যা বিজ্ঞপ্তি পেলোডে সমতুল্য মান সেট না করা থাকলে প্রয়োগ করা হয়।
কাস্টম ডিফল্ট আইকন এবং কাস্টম রঙ সেট করতে application ট্যাগের মধ্যে এইসব লাইন যোগ করুন:
<!-- Set custom default icon. This is used when no icon is set for incoming notification messages.
See README(https://goo.gl/l4GJaQ) for more. -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_stat_ic_notification" />
<!-- Set color used with incoming notification messages. This is used when no color is set for the incoming
notification message. See README(https://goo.gl/6BKBk7) for more. -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorAccent" />
Android, কাস্টম ডিফল্ট আইকন দেখায় এবং ব্যবহার করে
Firebase কনসোলে Notifications composer থেকে পাঠানো সব বিজ্ঞপ্তি মেসেজ।
বিজ্ঞপ্তি পেলোডের মধ্যে আইকন স্পষ্টভাবে সেট না করা যেকোনও বিজ্ঞপ্তি মেসেজ।
কাস্টম ডিফল্ট আইকন সেট করা না থাকলে এবং বিজ্ঞপ্তি পে লোডে আইকন সেট করা না থাকলে, Android সাদা রঙে রেন্ডার করা অ্যাপ্লিকেশন আইকন দেখায়।
onMessageReceived ওভাররাইড করুন
FirebaseMessagingService.onMessageReceived মেথড ওভাররাইড করে, আপনি
প্রাপ্ত
RemoteMessage
অবজেক্টের উপর ভিত্তি করে অ্যাকশন পারফর্ম করতে এবং মেসেজ ডেটা পেতে পারেন:
Kotlin
override fun onMessageReceived(remoteMessage: RemoteMessage) { // TODO(developer): Handle FCM messages here. // Not getting messages here? See why this may be: https://goo.gl/39bRNJ Log.d(TAG, "From: ${remoteMessage.from}") // Check if message contains a data payload. if (remoteMessage.data.isNotEmpty()) { Log.d(TAG, "Message data payload: ${remoteMessage.data}") // Check if data needs to be processed by long running job if (needsToBeScheduled()) { // For long-running tasks (10 seconds or more) use WorkManager. scheduleJob() } else { // Handle message within 10 seconds handleNow() } } // Check if message contains a notification payload. remoteMessage.notification?.let { Log.d(TAG, "Message Notification Body: ${it.body}") } // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. }
Java
@Override public void onMessageReceived(RemoteMessage remoteMessage) { // TODO(developer): Handle FCM messages here. // Not getting messages here? See why this may be: https://goo.gl/39bRNJ Log.d(TAG, "From: " + remoteMessage.getFrom()); // Check if message contains a data payload. if (remoteMessage.getData().size() > 0) { Log.d(TAG, "Message data payload: " + remoteMessage.getData()); if (/* Check if data needs to be processed by long running job */ true) { // For long-running tasks (10 seconds or more) use WorkManager. scheduleJob(); } else { // Handle message within 10 seconds handleNow(); } } // Check if message contains a notification payload. if (remoteMessage.getNotification() != null) { Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); } // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. }
onDeletedMessages ওভাররাইড করুন
কিছু কিছু ক্ষেত্রে, FCM মেসেজ ডেলিভার নাও করতে পারে। এটি তখনই হয় যখন
কোনও নির্দিষ্ট ডিভাইসে আপনার অ্যাপের জন্য অনেক মেসেজ (>১০০) পেন্ডিং থাকে
এবং সেই সময় ডিভাইসটি কানেক্ট হয় অথবা ডিভাইসটি এক মাসের বেশি সময় ধরে
FCM-এর সাথে কানেক্ট না হয়ে থাকে। এইসব ক্ষেত্রে, আপনি FirebaseMessagingService.onDeletedMessages()-এ
কলব্যাক পেতে পারেন। অ্যাপ ইনস্ট্যান্স এই কলব্যাক পেলে, এটি আপনার অ্যাপ সার্ভারের সাথে সম্পূর্ণ সিঙ্ক করবে। আপনি যদি
গত ৪ সপ্তাহের মধ্যে সেই ডিভাইসে অ্যাপে কোনও মেসেজ না পাঠিয়ে থাকেন,
FCM কল করা হবে না onDeletedMessages()।
ব্যাকগ্রাউন্ডে থাকা অ্যাপে বিজ্ঞপ্তি মেসেজ ম্যানেজ করা
আপনার অ্যাপ ব্যাকগ্রাউন্ডে থাকলে, Android বিজ্ঞপ্তি মেসেজকে সিস্টেম ট্রেতে ডাইরেক্ট করে। ব্যবহারকারী বিজ্ঞপ্তিতে ট্যাপ করলে ডিফল্ট হিসেবে অ্যাপ লঞ্চার খুলে যায়।
এর মধ্যে বিজ্ঞপ্তি ও ডেটা পেলোড (এবং Firebase কনসোলে Notifications composer থেকে পাঠানো সব মেসেজ) উভয়ই আছে এমন মেসেজ অন্তর্ভুক্ত। এইসব ক্ষেত্রে, ডিভাইসের সিস্টেম ট্রেতে বিজ্ঞপ্তি পাঠানো হয় এবং আপনার লঞ্চার অ্যাক্টিভিটির ইনটেন্টের অতিরিক্ত অংশে ডেটা পেলোড পাঠানো হয়।
আপনার অ্যাপে মেসেজ ডেলিভারি সম্পর্কে ইনসাইট পেতে, Firebase কনসোলে DevOps ও এনগেজমেন্ট > মেসেজিং > রিপোর্ট ড্যাশবোর্ড বিকল্পে যান। এই ড্যাশবোর্ড Apple ও Android ডিভাইসে পাঠানো ও খোলা মেসেজের সংখ্যা রেকর্ড করে, এর সাথে Android অ্যাপের জন্য "ইম্প্রেশন" (ব্যবহারকারীদের দেখা বিজ্ঞপ্তি) সংক্রান্ত ডেটাও রেকর্ড করে।