Android অ্যাপে মেসেজ পাওয়া

প্ল্যাটফর্ম বেছে নিন: iOS+ Android ওয়েব Flutter Unity C++


মেসেজ পেতে, আপনি এমন পরিষেবা ব্যবহার করতে পারেন যা FirebaseMessagingService-এর পরিধি বাড়ায়। আপনি AndroidConfigV2-এ মাইগ্রেট করলে, Android ক্লায়েন্ট কলব্যাক আপডেট করুন লিঙ্কে যেভাবে বর্ণনা করা হয়েছে সেই অনুযায়ী বিশেষায়িত onNotificationReceived ও onBackgroundSyncReceived কলব্যাক প্রয়োগ করুন। পুরনো AndroidConfig (v1) মেসেজের জন্য, আপনার পরিষেবাকে 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 কনসোলে বিজ্ঞপ্তি কম্পোজার থেকে পাঠানো সব মেসেজ) সহ মেসেজ অন্তর্ভুক্ত। এইসব ক্ষেত্রে, বিজ্ঞপ্তি ডিভাইসের সিস্টেম ট্রেতে ডেলিভার করা হয় এবং ডেটা পে-লোড আপনার লঞ্চার অ্যাক্টিভিটির ইনটেন্টের এক্সট্রাতে ডেলিভার করা হয়।

আপনার অ্যাপে মেসেজ ডেলিভারি সম্পর্কে ইনসাইট পেতে, Firebase কনসোলে DevOps ও এনগেজমেন্ট > মেসেজিং > রিপোর্ট ড্যাশবোর্ড বিকল্পে যান। এই ড্যাশবোর্ড Apple ও Android ডিভাইসে পাঠানো ও খোলা মেসেজের সংখ্যা রেকর্ড করে, এর সাথে Android অ্যাপের জন্য "ইম্প্রেশন" (ব্যবহারকারীদের দেখা বিজ্ঞপ্তি) সংক্রান্ত ডেটাও রেকর্ড করে।