এই নির্দেশিকা বর্ণনা করে কিভাবে আপনার মোবাইল এবং ওয়েব ক্লায়েন্ট অ্যাপে Firebase Cloud Messaging সেট আপ করবেন যাতে আপনি নির্ভরযোগ্যভাবে বার্তা পেতে পারেন।
বার্তাগুলি পেতে, আপনি FirebaseMessagingService
প্রসারিত করে এমন একটি পরিষেবা ব্যবহার করতে পারেন। আপনার পরিষেবা onMessageReceived
এবং onDeletedMessages
কলব্যাকগুলিকে ওভাররাইড করা উচিত৷ একটি সম্পূর্ণ উদাহরণের জন্য, Firebase ক্লাউড মেসেজিং কুইকস্টার্ট নমুনা দেখুন।
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 এর জন্য কাস্টম ডিফল্ট আইকন প্রদর্শন করে এবং ব্যবহার করে
- বিজ্ঞপ্তি কম্পোজার থেকে পাঠানো সমস্ত বিজ্ঞপ্তি বার্তা।
- কোনো বিজ্ঞপ্তি বার্তা যা স্পষ্টভাবে বিজ্ঞপ্তি পেলোডে আইকন সেট করে না।
যদি একটি কাস্টম ডিফল্ট আইকন সেট করা না থাকে এবং বিজ্ঞপ্তি পেলোডে একটি আইকন সেট না থাকে, তাহলে 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 একটি বার্তা প্রদান করতে পারে না। এটি তখন ঘটে যখন একটি নির্দিষ্ট ডিভাইসে আপনার অ্যাপের জন্য অনেক বেশি বার্তা (>100) মুলতুবি থাকে যখন এটি সংযুক্ত হয় বা ডিভাইসটি এক মাসের বেশি সময় ধরে FCM সাথে সংযুক্ত না থাকে। এই ক্ষেত্রে, আপনি FirebaseMessagingService.onDeletedMessages()
এ একটি কলব্যাক পেতে পারেন। যখন অ্যাপ ইনস্ট্যান্স এই কলব্যাকটি পায়, তখন এটি আপনার অ্যাপ সার্ভারের সাথে একটি সম্পূর্ণ সিঙ্ক সঞ্চালন করবে। আপনি যদি গত 4 সপ্তাহের মধ্যে সেই ডিভাইসে অ্যাপটিতে একটি বার্তা না পাঠিয়ে থাকেন, তাহলে FCM onDeletedMessages()
কল করবে না।
একটি ব্যাকগ্রাউন্ডেড অ্যাপে বিজ্ঞপ্তি বার্তা পরিচালনা করুন
যখন আপনার অ্যাপটি ব্যাকগ্রাউন্ডে থাকে, তখন Android সিস্টেম ট্রেতে বিজ্ঞপ্তি বার্তা পাঠায়। বিজ্ঞপ্তিতে একটি ব্যবহারকারীর ট্যাপ ডিফল্টরূপে অ্যাপ লঞ্চারটি খোলে।
এতে বিজ্ঞপ্তি এবং ডেটা পেলোড (এবং বিজ্ঞপ্তি কনসোল থেকে পাঠানো সমস্ত বার্তা) উভয়ই রয়েছে এমন বার্তাগুলি অন্তর্ভুক্ত করে৷ এই ক্ষেত্রে, বিজ্ঞপ্তিটি ডিভাইসের সিস্টেম ট্রেতে বিতরণ করা হয়, এবং ডেটা পেলোড আপনার লঞ্চার কার্যকলাপের অভিপ্রায়ের অতিরিক্ত হিসাবে বিতরণ করা হয়।
আপনার অ্যাপে মেসেজ ডেলিভারি সম্পর্কে আরও তথ্যের জন্য, FCM রিপোর্টিং ড্যাশবোর্ড দেখুন, যা অ্যাপল এবং অ্যান্ড্রয়েড ডিভাইসে পাঠানো এবং খোলা মেসেজের সংখ্যা রেকর্ড করে, সাথে অ্যান্ড্রয়েড অ্যাপের জন্য "ইম্প্রেশন" (ব্যবহারকারীদের দ্বারা দেখা বিজ্ঞপ্তি) ডেটা সহ।