Kotlin 01.2-এ উন্নত Android: Android Firebase ক্লাউড মেসেজিং

এই কোডল্যাবটি অ্যাডভান্সড অ্যান্ড্রয়েড ইন কোটলিন কোর্সের অংশ। আপনি যদি কোডল্যাবগুলি ক্রমানুসারে কাজ করেন তবে আপনি এই কোর্সের সর্বাধিক মূল্য পাবেন, তবে এটি বাধ্যতামূলক নয়। সমস্ত কোর্স কোডল্যাবগুলি কোটলিন কোডল্যাবস ল্যান্ডিং পৃষ্ঠায় অ্যাডভান্সড অ্যান্ড্রয়েডে তালিকাভুক্ত করা হয়েছে।

ভূমিকা

পূর্ববর্তী কোডল্যাবে , আপনি আপনার ডিম টাইমারে বিজ্ঞপ্তিগুলি যোগ করেছেন যা আপনার অ্যাপের মধ্যে তৈরি এবং ট্রিগার করা হয়েছে। বিজ্ঞপ্তিগুলির আরেকটি গুরুত্বপূর্ণ ব্যবহারের ক্ষেত্রে দূরবর্তীভাবে পুশ বিজ্ঞপ্তিগুলি প্রেরণ করা যা আপনার অ্যাপটি না চলাকালীনও গ্রহণ করা যেতে পারে।

একটি পুশ বিজ্ঞপ্তি কি?

পুশ বিজ্ঞপ্তিগুলি হল বিজ্ঞপ্তি যা সার্ভার মোবাইল ডিভাইসে "পুশ" করে৷ আপনার অ্যাপ চলছে কিনা তা নির্বিশেষে সেগুলি একটি ডিভাইসে বিতরণ করা যেতে পারে।

পুশ বিজ্ঞপ্তিগুলি ব্যবহারকারীদের একটি আপডেট সম্পর্কে জানাতে বা একটি কাজ বা বৈশিষ্ট্যের কথা মনে করিয়ে দেওয়ার একটি দুর্দান্ত উপায়৷ একটি পণ্য আবার স্টক থাকার জন্য অপেক্ষার কল্পনা করুন. একটি পুশ বিজ্ঞপ্তির মাধ্যমে, একটি শপিং অ্যাপ আপনাকে প্রতিদিন স্টক স্ট্যাটাস চেক করার পরিবর্তে স্টক আপডেট সম্পর্কে জানাতে পারে।

পুশ বিজ্ঞপ্তিগুলি প্রকাশ/সাবস্ক্রাইব প্যাটার্ন ব্যবহার করে, যা ব্যাকএন্ড অ্যাপগুলিকে আগ্রহী ক্লায়েন্টদের কাছে প্রাসঙ্গিক বিষয়বস্তু পুশ করতে দেয়। একটি প্রকাশ/সাবস্ক্রাইব মডেল ছাড়া, আপনার অ্যাপের ব্যবহারকারীদের আপনার অ্যাপে আপডেটের জন্য পর্যায়ক্রমে পরীক্ষা করতে হবে। এই প্রক্রিয়াটি ব্যবহারকারীদের জন্য ক্লান্তিকর এবং অবিশ্বস্ত। অধিকন্তু, ক্লায়েন্টের সংখ্যা বাড়ার সাথে সাথে, এই পর্যায়ক্রমিক চেকগুলি আপনার অ্যাপের সার্ভার এবং ব্যবহারকারীর ডিভাইস উভয়ের জন্য নেটওয়ার্কিং এবং প্রক্রিয়াকরণ সংস্থানগুলিতে খুব বেশি লোড রাখবে।

অন্যান্য সমস্ত ধরণের বিজ্ঞপ্তিগুলির মতো, নিশ্চিত করুন যে আপনি পুশ বিজ্ঞপ্তিগুলির মাধ্যমে আপনার ব্যবহারকারীদের সম্মান করছেন৷ বিজ্ঞপ্তি বিষয়বস্তু ব্যবহারকারীর জন্য আকর্ষণীয় বা সময়োপযোগী না হলে, তারা সহজেই আপনার অ্যাপ থেকে সমস্ত বিজ্ঞপ্তি বন্ধ করতে পারে।

ফায়ারবেস ক্লাউড মেসেজিং কি?

Firebase ক্লাউড মেসেজিং হল মোবাইল ডেভেলপমেন্টের জন্য Firebase প্ল্যাটফর্মের অংশ। সাধারণত আপনাকে স্ক্র্যাচ থেকে একটি সার্ভার সেট আপ করতে হবে যা বিজ্ঞপ্তিগুলি ট্রিগার করতে মোবাইল ডিভাইসগুলির সাথে যোগাযোগ করতে পারে৷ ফায়ারবেস ক্লাউড মেসেজিংয়ের মাধ্যমে, আপনি সার্ভার সেট আপ না করেই আপনার ইনস্টল করা অ্যাপ ব্যবহারকারীদের বা তাদের একটি উপসেটকে বিজ্ঞপ্তি পাঠাতে পারেন। উদাহরণস্বরূপ, আপনি ব্যবহারকারীদের একটি অনুস্মারক পাঠাতে পারেন বা তাদের একটি বিশেষ প্রচার দিতে পারেন, যেমন একটি বিনামূল্যের উপহার৷ আপনি দূরবর্তীভাবে একটি একক ডিভাইস বা একাধিক ডিভাইসে একটি বিজ্ঞপ্তি পুশ করতে পারেন৷

আপনি আপনার ব্যাকএন্ড অ্যাপ বা ফায়ারবেস প্রকল্প থেকে আপনার ব্যবহারকারীদের কাছে ডেটা স্থানান্তর করতে Firebase ক্লাউড বার্তাগুলিও ব্যবহার করতে পারেন।

এই কোডল্যাবে, আপনি শিখবেন কিভাবে ফায়ারবেস ক্লাউড মেসেজিং ব্যবহার করে আপনার অ্যান্ড্রয়েড অ্যাপের জন্য পুশ বিজ্ঞপ্তি পাঠাতে হয়, সেইসাথে ডেটা পাঠাতে হয়।

এই কোডল্যাবের মাধ্যমে কাজ করার সময় আপনি যদি কোনো সমস্যায় পড়েন (কোড বাগ, ব্যাকরণগত ত্রুটি, অস্পষ্ট শব্দ, ইত্যাদি) তাহলে অনুগ্রহ করে কোডল্যাবের নিচের বাম কোণে একটি ভুল প্রতিবেদন করুন লিঙ্কের মাধ্যমে সমস্যাটি রিপোর্ট করুন।

আপনি ইতিমধ্যে কি জানা উচিত

আপনার সাথে পরিচিত হওয়া উচিত:

  • কোটলিনে কীভাবে অ্যান্ড্রয়েড অ্যাপ তৈরি করবেন। বিশেষ করে, Android SDK এর সাথে কাজ করুন।
  • আর্কিটেকচার উপাদান এবং ডেটা বাইন্ডিং ব্যবহার করে কীভাবে আপনার অ্যাপ ডিজাইন করবেন।
  • সম্প্রচার রিসিভার একটি মৌলিক বোঝার.
  • AlarmManager-এর একটি প্রাথমিক ধারণা।
  • নোটিফিকেশন ম্যানেজার ব্যবহার করে কীভাবে বিজ্ঞপ্তি তৈরি এবং পাঠাতে হয়।

আপনি কি শিখবেন

  • ফায়ারবেস ক্লাউড মেসেজিংয়ের মাধ্যমে কীভাবে ব্যবহারকারীর কাছে বার্তাগুলি পুশ করবেন।
  • ফায়ারবেস ক্লাউড মেসেজিং-এর একটি অংশ ডেটা বার্তাগুলি ব্যবহার করে কীভাবে ব্যাকএন্ড থেকে আপনার অ্যাপে ডেটা পাঠাবেন।

আপনি কি করবেন

  • স্টার্টার অ্যাপে পুশ বিজ্ঞপ্তি যোগ করুন।
  • আপনার অ্যাপ চলাকালীন Firebase ক্লাউড মেসেজিং পরিচালনা করুন।
  • Firebase ক্লাউড মেসেজিংয়ের মাধ্যমে ডেটা স্থানান্তর করুন।

এই কোডল্যাবে আপনি অ্যান্ড্রয়েড অ্যাপস কোডল্যাবে আগের ইউজিং নোটিফিকেশন থেকে কোড নিয়ে কাজ করবেন। আগের কোডল্যাবে, আপনি একটি ডিম টাইমার অ্যাপ তৈরি করেছেন যা রান্নার টাইমার শেষ হলে বিজ্ঞপ্তি পাঠায়। এই কোডল্যাবে, আপনি আপনার অ্যাপ ব্যবহারকারীদের ডিম খাওয়ার কথা মনে করিয়ে দেওয়ার জন্য পুশ বিজ্ঞপ্তি পাঠাতে Firebase ক্লাউড মেসেজিং যোগ করবেন।

নমুনা অ্যাপ্লিকেশন পেতে, আপনি হয় করতে পারেন:

GitHub থেকে সংগ্রহস্থল ক্লোন করুন এবং স্টার্টার শাখায় স্যুইচ করুন:

$  git clone https://github.com/googlecodelabs/android-kotlin-notifications-fcm


বিকল্পভাবে, আপনি একটি জিপ ফাইল হিসাবে সংগ্রহস্থলটি ডাউনলোড করতে পারেন, এটি আনজিপ করতে পারেন এবং এটি অ্যান্ড্রয়েড স্টুডিওতে খুলতে পারেন।

জিপ ডাউনলোড করুন

ধাপ 1: একটি ফায়ারবেস প্রকল্প তৈরি করুন

আপনার Android অ্যাপে Firebase যোগ করার আগে, আপনার Android অ্যাপে সংযোগ করার জন্য আপনাকে একটি Firebase প্রকল্প তৈরি করতে হবে।

  1. Firebase কনসোলে লগ ইন করুন।
  2. প্রকল্প যোগ করুন ক্লিক করুন, তারপর একটি প্রকল্পের নাম নির্বাচন করুন বা লিখুন। আপনার প্রকল্পের নাম দিন fcm-codelab
  3. অবিরত ক্লিক করুন.
  4. আপনি এই প্রকল্পের জন্য Google Analytics সক্ষম করুন বোতামটি বন্ধ করে Google Analytics সেট আপ করা এড়িয়ে যেতে পারেন।
  5. Firebase প্রকল্প সেট আপ শেষ করতে প্রকল্প তৈরি করুন ক্লিক করুন।

ধাপ 2: Firebase-এ আপনার অ্যাপ নিবন্ধন করুন

এখন আপনার কাছে একটি ফায়ারবেস প্রকল্প আছে, আপনি এতে আপনার অ্যান্ড্রয়েড অ্যাপ যোগ করতে পারেন।

  1. Firebase কনসোলের প্রোজেক্ট ওভারভিউ পৃষ্ঠার কেন্দ্রে, সেটআপ ওয়ার্কফ্লো চালু করতে Android আইকনে ক্লিক করুন।

  1. Android প্যাকেজ নামের ক্ষেত্রে, com.example.android.eggtimernotifications লিখুন।
  2. রেজিস্টার অ্যাপে ক্লিক করুন।

গুরুত্বপূর্ণ: নিশ্চিত করুন যে আপনি আপনার অ্যাপের জন্য সঠিক আইডি লিখছেন কারণ আপনি আপনার ফায়ারবেস প্রোজেক্টে আপনার অ্যাপটি নিবন্ধিত করার পরে এই মানটি যোগ বা সংশোধন করতে পারবেন না।

ধাপ 3: আপনার প্রকল্পে Firebase কনফিগারেশন ফাইল যোগ করুন

আপনার অ্যাপে Firebase Android কনফিগারেশন ফাইল যোগ করুন।

  1. আপনার ফায়ারবেস অ্যান্ড্রয়েড কনফিগার ফাইল ( google-services.json ) পেতে ডাউনলোড google-services.json এ ক্লিক করুন। নিশ্চিত করুন যে কনফিগার ফাইলটি অতিরিক্ত অক্ষর সহ সংযুক্ত করা হয়নি এবং ঠিক google-services.json নামে পরিচিত।
  2. আপনার অ্যাপের মডিউল (অ্যাপ-লেভেল) ডিরেক্টরিতে আপনার কনফিগার ফাইলটি সরান।

ধাপ 4: Firebase পণ্য সক্ষম করতে আপনার Android প্রকল্প কনফিগার করুন

আপনার অ্যাপে Firebase পণ্যগুলি সক্ষম করতে, আপনাকে অবশ্যই আপনার Gradle ফাইলগুলিতে google-services প্লাগইন যোগ করতে হবে।

  1. আপনার রুট-লেভেল (প্রজেক্ট-লেভেল) গ্রেডল ফাইলে ( build.gradle ), আপনার কাছে Google এর Maven সংগ্রহস্থল আছে কিনা তা পরীক্ষা করুন।
  2. তারপর, Google পরিষেবা প্লাগইন অন্তর্ভুক্ত করতে নিয়ম যোগ করুন।

build.gradle

buildscript {

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }

  dependencies {
    // ...

    // Add the following line:
    classpath 'com.google.gms:google-services:4.3.2'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
    // ...
  }
}
  1. আপনার মডিউলে (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত app/build.gradle ), ফাইলের নীচে প্লাগইন প্রয়োগ করতে একটি লাইন যোগ করুন।

app/build.gradle

apply plugin: 'com.android.application'

android {
  // ...
}

// Add the following line to the bottom of the file:
apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin

এই টাস্কে, আপনি পুশ নোটিফিকেশন ব্যবহার করতে আপনার প্রোজেক্টে Firebase ক্লাউড মেসেজিং (FCM) যোগ করবেন।

এই কোডল্যাবের FCM-এর জন্য Android পরিষেবা কোড MyFirebaseMessagingService.kt এ দেওয়া আছে। নিম্নলিখিত ধাপে আপনি আপনার Android অ্যাপে কোড যোগ করবেন।

আপনি আপনার বাস্তবায়ন পরীক্ষা করতে বিজ্ঞপ্তি কম্পোজার ব্যবহার করবেন। নোটিফিকেশন কম্পোজার হল একটি টুল যা আপনাকে Firebase কনসোল ওয়েবসাইট থেকে বার্তা রচনা এবং পাঠাতে সাহায্য করে।

  1. MyFirebaseMessagingService.kt খুলুন
  2. ফাইল এবং বিশেষ করে নিম্নলিখিত ফাংশন পরিদর্শন করুন:
  • onNewToken() — আপনার পরিষেবা Android ম্যানিফেস্টে নিবন্ধিত হলে স্বয়ংক্রিয়ভাবে কল করা হবে৷ এই ফাংশনটি বলা হয় যখন আপনি প্রথমবার আপনার অ্যাপ চালান এবং প্রতিবার Firebase আপনার অ্যাপের জন্য একটি নতুন টোকেন ইস্যু করে। একটি টোকেন হল আপনার Firebase ব্যাকএন্ড প্রকল্পের একটি অ্যাক্সেস কী। এটি আপনার নির্দিষ্ট ক্লায়েন্ট ডিভাইসের জন্য তৈরি করা হয়েছে। এই টোকেনের সাহায্যে, Firebase জানে ব্যাকএন্ড কোন ক্লায়েন্টকে বার্তা পাঠাতে হবে। Firebase এটাও জানে যে এই ক্লায়েন্টটি বৈধ কিনা এবং এই Firebase প্রোজেক্টে অ্যাক্সেস আছে কিনা।
  • onMessageReceived — যখন আপনার অ্যাপ চালু থাকে এবং Firebase আপনার অ্যাপে একটি বার্তা পাঠায় তখন কল করা হয়। এই ফাংশনটি একটি RemoteMessage অবজেক্ট পায় যা একটি বিজ্ঞপ্তি বা ডেটা বার্তা পেলোড বহন করতে পারে। আপনি এই কোডল্যাবে পরে বিজ্ঞপ্তি এবং ডেটা বার্তা পেলোডের মধ্যে পার্থক্য সম্পর্কে আরও শিখবেন।

ধাপ 1: একটি একক ডিভাইসে FCM বিজ্ঞপ্তি পাঠানো

বিজ্ঞপ্তি কনসোল আপনাকে একটি বিজ্ঞপ্তি পাঠানোর পরীক্ষা করতে দেয়। কনসোল ব্যবহার করে একটি নির্দিষ্ট ডিভাইসে একটি বার্তা পাঠাতে, আপনাকে সেই ডিভাইসের নিবন্ধন টোকেনটি জানতে হবে।

যখন ফায়ারবেস ব্যাকএন্ড একটি নতুন বা রিফ্রেশ করা টোকেন তৈরি করে, তখন onNewToken() ফাংশনটিকে কল করা হবে, নতুন টোকেনটি একটি আর্গুমেন্ট হিসেবে পাস করা হবে। আপনি যদি একটি একক ডিভাইসকে টার্গেট করতে চান বা ডিভাইসগুলির একটি গ্রুপ তৈরি করতে চান যেখানে আপনি একটি সম্প্রচার বার্তা পাঠাতে চান, তাহলে আপনাকে FirebaseMessagingService প্রসারিত করে এবং onNewToken() ওভাররাইড করে এই টোকেনটি অ্যাক্সেস করতে হবে।

  1. AndroidManifest.xml খুলুন এবং ডিম টাইমার অ্যাপের জন্য MyFirebaseMessagingService সক্ষম করতে নিম্নলিখিত কোডটি আনকমেন্ট করুন। অ্যান্ড্রয়েড ম্যানিফেস্টে পরিষেবা মেটা-ডেটা MyFirebaseMessagingService কে একটি পরিষেবা হিসাবে নিবন্ধিত করে এবং একটি অভিপ্রায় ফিল্টার যোগ করে তাই এই পরিষেবাটি FCM থেকে পাঠানো বার্তাগুলি পাবে৷ মেটাডেটার শেষ অংশ ফায়ারবেসের জন্য breakfast_notification_channel_id default_notification_channel_id হিসেবে ঘোষণা করে। আপনি পরবর্তী ধাপে এই আইডিটি ব্যবহার করবেন।
<!-- AndroidManifest.xml -->
<!-- TODO: Step 3.0 uncomment to start the service  -->

        <service
                android:name=".MyFirebaseMessagingService"
                android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
        <!-- [START fcm_default_icon] -->
        <!--
 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/common_google_signin_btn_icon_dark"/>
        <!--
 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"/> <!-- [END fcm_default_icon] -->
        <!-- [START fcm_default_channel] -->
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_channel_id"
            android:value="@string/breakfast_notification_channel_id" />
        <!-- [END fcm_default_channel] -->

এফসিএম-এর জন্য একটি নতুন বিজ্ঞপ্তি চ্যানেল তৈরি করা একটি ভাল ধারণা কারণ আপনার ব্যবহারকারীরা আলাদাভাবে ডিম টাইমার বা FCM পুশ বিজ্ঞপ্তিগুলি সক্ষম/অক্ষম করতে চাইতে পারেন।

  1. ui/EggTimerFragment.kt খুলুন। onCreateView() এ, নিম্নলিখিত চ্যানেল তৈরির কোড যোগ করুন।
// EggTimerFragment.kt

   // TODO: Step 3.1 create a new channel for FCM
    createChannel(
        getString(R.string.breakfast_notification_channel_id),
        getString(R.string.breakfast_notification_channel_name)
    )
  1. MyFirebaseMessagingService.kt খুলুন এবং onNewToken() ফাংশনটি আনকমেন্ট করুন। একটি নতুন টোকেন তৈরি হলে এই ফাংশনটি কল করা হবে।
// MyFirebaseMessagingService.kt

   // TODO: Step 3.2 log registration token
    // [START on_new_token]
    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the     
     * InstanceID token is initially generated so this is where you would retrieve     
     * the token.
     */
    override fun onNewToken(token: String?) {
        Log.d(TAG, "Refreshed token: $token")

        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // Instance ID token to your app server.
        sendRegistrationToServer(token)
    }
    // [END on_new_token]
  1. ডিম টাইমার অ্যাপ চালান।
  2. logcat পর্যবেক্ষণ করুন ( দেখুন > টুল উইন্ডোজ > Logcat )। আপনি নীচের মত আপনার টোকেন দেখানো একটি লগ লাইন দেখতে হবে. এই ডিভাইসে একটি বার্তা পাঠাতে আপনার প্রয়োজন এই টোকেন। এই ফাংশনটি শুধুমাত্র তখনই বলা হয় যখন একটি নতুন টোকেন তৈরি করা হয়।
2019-07-23 13:09:15.243 2312-2459/com.example.android.eggtimernotifications D/MyFirebaseMsgService: Refreshed token: f2esflBoQbI:APA91bFMzNNFaIskjr6KIV4zKjnPA4hxekmrtbrtba2aDbh593WQnm11ed54Mv6MZ9Yeerver7pzgwfKx7R9BHFffLBItLEgPvrtF0TtX9ToCrXZ5y7Hd-m

দ্রষ্টব্য: আপনি যদি লগক্যাট বার্তাগুলিতে টোকেনটি দেখতে না পান তবে আপনার অ্যাপ ইতিমধ্যেই টোকেনটি পেয়ে থাকতে পারে। সেই ক্ষেত্রে, অ্যাপটি আনইনস্টল করা আপনাকে একটি নতুন টোকেন পেতে সহায়তা করবে।

এখন আপনি একটি বিজ্ঞপ্তি পাঠিয়ে পরীক্ষা করতে পারেন। একটি বিজ্ঞপ্তি পাঠানোর জন্য, আপনি বিজ্ঞপ্তি কম্পোজার ব্যবহার করবেন।

  1. ফায়ারবেস কনসোল খুলুন এবং আপনার প্রকল্প নির্বাচন করুন।
  2. এরপরে, বাম দিকের নেভিগেশন থেকে ক্লাউড মেসেজিং নির্বাচন করুন।
  3. আপনার প্রথম বার্তা পাঠান ক্লিক করুন.

  1. প্রাতঃরাশের Time for Breakfast! বিজ্ঞপ্তির শিরোনাম হিসাবে এবং Don't forget to eat eggs! বিজ্ঞপ্তি পাঠ্য হিসাবে, এবং পরীক্ষা বার্তা পাঠান নির্বাচন করুন। ডিভাইসে টেস্ট পপ-আপ ডায়ালগ প্রদর্শিত হবে, যাতে আপনি একটি FCM রেজিস্ট্রেশন টোকেন প্রদান করেন।

  1. লগক্যাট থেকে আপনার অ্যাপ টোকেন কপি করুন।

  1. এই টোকেনটি পপআপ উইন্ডোর মধ্যে একটি FCM নিবন্ধন টোকেন যোগ করুন ফিল্ডে আটকান, তারপর টোকেনের পাশে যোগ বোতামে ক্লিক করুন।
  2. প্রদর্শিত চেকবক্স তালিকায়, টোকেন নির্বাচন করুন। টেস্ট বোতামটি সক্রিয় হওয়া উচিত।

  1. আপনার ডিভাইসে, পটভূমিতে ডিম টাইমার অ্যাপটি রাখুন।
  2. পপআপে, টেস্টে ক্লিক করুন।
  1. আপনি পরীক্ষা ক্লিক করার পরে, আপনার অ্যাপটি ব্যাকগ্রাউন্ডে চলমান লক্ষ্যযুক্ত ক্লায়েন্ট ডিভাইসটি সিস্টেম বিজ্ঞপ্তি ট্রেতে বিজ্ঞপ্তিটি পাবে। (যখন আপনার অ্যাপটি ফোরগ্রাউন্ডে থাকবে তখন আপনি কীভাবে FCM বার্তাগুলি পরিচালনা করবেন সে সম্পর্কে আরও দেখতে পাবেন৷)

কাজ: একটি বিষয়ে FCM বিজ্ঞপ্তি পাঠানো

FCM টপিক মেসেজিং প্রকাশ/সাবস্ক্রাইব মডেলের উপর ভিত্তি করে।

একটি মেসেজিং অ্যাপ প্রকাশ/সাবস্ক্রাইব মডেলের জন্য একটি ভালো উদাহরণ হতে পারে। কল্পনা করুন যে একটি অ্যাপ প্রতি 10 সেকেন্ডে নতুন বার্তা পরীক্ষা করে। এটি শুধুমাত্র আপনার ফোনের ব্যাটারি নিষ্কাশন করবে না, তবে অপ্রয়োজনীয় নেটওয়ার্ক সংস্থানগুলিও ব্যবহার করবে এবং আপনার অ্যাপের সার্ভারে একটি অপ্রয়োজনীয় লোড তৈরি করবে৷ পরিবর্তে, একটি ক্লায়েন্ট ডিভাইস সাবস্ক্রাইব করতে পারে এবং যখন আপনার অ্যাপের মাধ্যমে নতুন বার্তা পাঠানো হয় তখন বিজ্ঞপ্তি দেওয়া যেতে পারে।

বিষয়গুলি আপনাকে একাধিক ডিভাইসে একটি বার্তা পাঠানোর অনুমতি দেয় যেগুলি সেই নির্দিষ্ট বিষয়ে নির্বাচন করেছে৷ ক্লায়েন্টদের জন্য, বিষয়গুলি হল নির্দিষ্ট ডেটা উত্স যা ক্লায়েন্ট আগ্রহী৷ সার্ভারের জন্য, বিষয়গুলি হল ডিভাইসগুলির গ্রুপ যা একটি নির্দিষ্ট ডেটা উত্সের আপডেটগুলি পেতে বেছে নিয়েছে৷ বিষয়গুলি বিজ্ঞপ্তির বিভাগগুলি উপস্থাপন করতে ব্যবহার করা যেতে পারে, যেমন খবর, আবহাওয়ার পূর্বাভাস এবং খেলার ফলাফল। কোডল্যাবের এই অংশের জন্য, আপনি আগ্রহী অ্যাপ ব্যবহারকারীদের তাদের সকালের নাস্তার সাথে ডিম খাওয়ার কথা মনে করিয়ে দেওয়ার জন্য একটি "ব্রেকফাস্ট" বিষয় তৈরি করবেন।

একটি বিষয়ের সদস্যতা নিতে, ক্লায়েন্ট অ্যাপটি ফায়ারবেস ক্লাউড মেসেজিং subscribeToTopic( ) ফাংশনটিকে টপিক নামের breakfast সাথে কল করে। এই কল দুটি ফলাফল হতে পারে. কলকারী সফল হলে, OnCompleteListener কলব্যাক সাবস্ক্রাইব করা বার্তা সহ কল ​​করা হবে। ক্লায়েন্ট সদস্যতা নিতে ব্যর্থ হলে, কলব্যাক পরিবর্তে একটি ত্রুটি বার্তা পাবে।

আপনার অ্যাপে, আপনি স্বয়ংক্রিয়ভাবে আপনার ব্যবহারকারীদের প্রাতঃরাশের বিষয়ে সদস্যতা নেবেন। বেশিরভাগ প্রোডাকশন অ্যাপ্লিকেশানে, যাইহোক, কোন বিষয়গুলিতে সদস্যতা নেবেন তার উপর ব্যবহারকারীদের নিয়ন্ত্রণ দেওয়া ভাল।

  1. EggTimerFragment.kt খুলুন এবং খালি subscribeTopic() ফাংশন খুঁজুন।
  2. FirebaseMessaging এর একটি উদাহরণ পান এবং বিষয়ের নামের সাথে subscibeToTopic() ফাংশনটি কল করুন।
  3. আপনার সাবস্ক্রিপশন সফল বা ব্যর্থ হয়েছে কিনা সে বিষয়ে FCM থেকে পুনরায় বিজ্ঞপ্তি পেতে একটি addOnCompleteListener যোগ করুন।
// EggTimerFragment.kt

   // TODO: Step 3.3 subscribe to breakfast topic
    private fun subscribeTopic() {
        // [START subscribe_topics]
        FirebaseMessaging.getInstance().subscribeToTopic(TOPIC)
            .addOnCompleteListener { task ->
                var msg = getString(R.string.message_subscribed)
                if (!task.isSuccessful) {
                    msg = getString(R.string.message_subscribe_failed)
                }
                Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
            }
        // [END subscribe_topics]
    }
  1. অ্যাপটি শুরু হলে একটি বিষয়ের সদস্যতা subscribeTopic() কল করুন। onCreateView() পর্যন্ত স্ক্রোল করুন এবং subscribeTopic() এ একটি কল যোগ করুন।
// EggTimerFragment.kt

   // TODO: Step 3.4 call subscribe topics on start
    subscribeTopic()

    return binding.root
  1. প্রাতঃরাশের বিষয়ে সদস্যতা নিতে, অ্যাপটি আবার চালান। আপনি "বিষয় সাবস্ক্রাইব করেছেন" বলে একটি টোস্ট বার্তা দেখতে পাবেন।

এখন আপনি একটি বিষয়ে বার্তা পাঠানোর পরীক্ষা করতে পারেন:

  1. নোটিফিকেশন কম্পোজার খুলুন এবং কম্পোজ নোটিফিকেশন নির্বাচন করুন।
  2. বিজ্ঞপ্তি বিজ্ঞপ্তি শিরোনাম এবং বিজ্ঞপ্তি পাঠ আগের মত সেট করুন।
  3. এইবার, একটি একক ডিভাইসে বার্তা পাঠানোর পরিবর্তে, লক্ষ্যের অধীনে বিষয় ক্লিক করুন এবং বার্তার বিষয় হিসাবে breakfast লিখুন।

  1. সময় নির্ধারণের জন্য এখন নির্বাচন করুন।

  1. নিশ্চিত করুন যে আপনার অ্যাপটি আপনার টেস্টিং ডিভাইসে ব্যাকগ্রাউন্ডে চলছে।
  1. পর্যালোচনা ক্লিক করুন, এবং তারপর প্রকাশ করুন ক্লিক করুন। আপনি যদি একাধিক ডিভাইসে অ্যাপটি চালাতে পারেন, তাহলে আপনি পরীক্ষা করে দেখতে পারেন যে এই বিষয়ে সদস্যতা নেওয়া সমস্ত ডিভাইসে বিজ্ঞপ্তিটি প্রাপ্ত হয়েছে।

অ্যাপটিতে এখন বিজ্ঞপ্তির জন্য নিম্নলিখিত চ্যানেল রয়েছে, ডিম এবং ব্রেকফাস্ট । একটি ক্লায়েন্ট ডিভাইসে, অ্যাপ আইকনে দীর্ঘ-ক্লিক করুন, তথ্য নির্বাচন করুন এবং বিজ্ঞপ্তিতে ক্লিক করুন। নিচের স্ক্রিনশটে দেখানো হিসাবে আপনি ডিম এবং ব্রেকফাস্ট বিজ্ঞপ্তি চ্যানেলগুলি দেখতে পাবেন। আপনি যদি ব্রেকফাস্ট চ্যানেল অনির্বাচন করেন, আপনার অ্যাপ এই চ্যানেলে পাঠানো কোনো বিজ্ঞপ্তি পাবে না।

বিজ্ঞপ্তিগুলি ব্যবহার করার সময়, সর্বদা মনে রাখবেন যে ব্যবহারকারীরা যে কোনও সময় যে কোনও বিজ্ঞপ্তি চ্যানেল বন্ধ করতে পারেন।

ধাপ 1: ডেটা বার্তা

FCM বার্তাগুলিতে একটি ডেটা পেলোডও থাকতে পারে যা ক্লায়েন্ট অ্যাপে বার্তাগুলিকে প্রক্রিয়া করে, বিজ্ঞপ্তি বার্তাগুলির পরিবর্তে ডেটা বার্তাগুলি ব্যবহার করে৷

ডেটা বার্তাগুলি পরিচালনা করার জন্য, আপনাকে MyFirebaseMessagingService-এর MyFirebaseMessagingService onMessageReceived() ফাংশনে ডেটা পেলোড পরিচালনা করতে হবে। remoteMessage অবজেক্টের data বৈশিষ্ট্যে সংরক্ষণ করা হয়। remoteMessage অবজেক্ট এবং data প্রপার্টি উভয়ই null হতে পারে।

  1. MyFirebaseMessagingService.
  2. remoteMessage অবজেক্টের data বৈশিষ্ট্যের কিছু মান আছে কিনা তা পরীক্ষা করুন এবং লগে ডেটা মুদ্রণ করুন।
// MyFirebaseMessagingService.kt

    // [START receive_message]
    override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
        Log.d(TAG, "From: ${remoteMessage?.from}")
        
       // TODO: Step 3.5 check messages for data
        // Check if the message contains a data payload.
        remoteMessage?.data?.let {
            Log.d(TAG, "Message data payload: " + remoteMessage.data)
        }

    }
    // [END receive_message]

আপনার কোড পরীক্ষা করতে, আপনি আবার বিজ্ঞপ্তি কম্পোজার ব্যবহার করতে পারেন।

  1. নোটিফিকেশন কম্পোজার খুলুন, একটি নতুন বার্তা তৈরি করুন, "প্রাতঃরাশ" বিষয়ের লক্ষ্য নির্ধারণ করুন।
  2. এইবার, আপনি যখন ধাপ 4-এ যান, অতিরিক্ত বিকল্পগুলি , কাস্টম ডেটা কী এবং মান বৈশিষ্ট্যগুলি নিম্নরূপ সেট করুন:
  1. কী: eggs
  2. মান: 3

  1. আপনার অ্যাপটি ফোরগ্রাউন্ডে চলছে তা নিশ্চিত করুন। যদি আপনার অ্যাপটি ব্যাকগ্রাউন্ডে থাকে, তাহলে FCM বার্তাটি একটি স্বয়ংক্রিয় বিজ্ঞপ্তি ট্রিগার করবে এবং ব্যবহারকারী যখন বিজ্ঞপ্তিতে ক্লিক করবে তখন onMessageReceived() ফাংশন শুধুমাত্র remoteMessage অবজেক্ট পাবে।
  2. নোটিফিকেশন কম্পোজার থেকে বার্তা পাঠান এবং লগক্যাটে উপস্থিত ডেটা মেসেজ লগ পর্যবেক্ষণ করুন।

ধাপ 2: ফোরগ্রাউন্ড এবং ব্যাকগ্রাউন্ডে বার্তা পরিচালনা করা

যখন আপনার অ্যাপটি চালানো একটি ক্লায়েন্ট ডিভাইস একটি বার্তা পায় যাতে বিজ্ঞপ্তি এবং ডেটা পেলোড উভয়ই অন্তর্ভুক্ত থাকে, তখন অ্যাপটির আচরণ নির্ভর করে আপনার অ্যাপটি ব্যাকগ্রাউন্ডে আছে নাকি সেই ডিভাইসের অগ্রভাগে রয়েছে:

  • যদি অ্যাপটি ব্যাকগ্রাউন্ডে চলমান থাকে, যদি বার্তাটির একটি বিজ্ঞপ্তি পেলোড থাকে, বিজ্ঞপ্তিটি স্বয়ংক্রিয়ভাবে বিজ্ঞপ্তি ট্রেতে প্রদর্শিত হয়। বার্তাটিতে যদি ডেটা পেলোডও থাকে, ব্যবহারকারী বিজ্ঞপ্তিতে ট্যাপ করলে ডেটা পেলোড অ্যাপটি পরিচালনা করবে।
  • অ্যাপটি ফোরগ্রাউন্ডে চলমান থাকলে, বার্তা বিজ্ঞপ্তিতে একটি বিজ্ঞপ্তি পেলোড থাকলে, বিজ্ঞপ্তি স্বয়ংক্রিয়ভাবে প্রদর্শিত হবে না। onMessageReceived() ফাংশনে কীভাবে বিজ্ঞপ্তিটি পরিচালনা করবেন তা অ্যাপটিকে সিদ্ধান্ত নিতে হবে। যদি বার্তাটিতে ডেটা পেলোড থাকে তবে উভয় পেলোড অ্যাপ দ্বারা পরিচালনা করা হবে।

এই কোডল্যাবের উদ্দেশ্যে, আপনি অ্যাপ ব্যবহারকারীকে প্রাতঃরাশের জন্য কিছু ডিম রাখার কথা মনে করিয়ে দিতে চান। আপনি কোনও ডেটা পাঠানোর পরিকল্পনা করছেন না, তবে আপনি নিশ্চিত করতে চান যে অনুস্মারক বিজ্ঞপ্তিটি সর্বদা উপস্থিত হয়, অ্যাপটি অগ্রভাগে বা পটভূমিতে থাকুক না কেন।

আপনি যখন যে ডিভাইসগুলিতে ডিম টাইমার অ্যাপ ইনস্টল করা আছে সেগুলিতে একটি FCM বার্তা পাঠান, অ্যাপটি চলমান না থাকলে বা ব্যাকগ্রাউন্ডে থাকলে বিজ্ঞপ্তি বার্তাটি স্বয়ংক্রিয়ভাবে প্রদর্শিত হবে। তবে, যদি অ্যাপটি ফোরগ্রাউন্ডে চলছে, তবে বিজ্ঞপ্তি স্বয়ংক্রিয়ভাবে প্রদর্শিত হয় না; পরিবর্তে, অ্যাপের কোড বার্তাটির সাথে কী করতে হবে তা নির্ধারণ করে। যদি অ্যাপটি একটি FCM বার্তা গ্রহণ করার সময় অগ্রভাগে থাকে, তাহলে onMessageReceived() ফাংশনটি FCM বার্তার সাথে স্বয়ংক্রিয়ভাবে ট্রিগার হবে। এখানেই আপনার অ্যাপ নীরবে বিজ্ঞপ্তি এবং ডেটা পেলোড পরিচালনা করতে পারে বা একটি বিজ্ঞপ্তি ট্রিগার করতে পারে।

আপনার অ্যাপের জন্য, আপনি নিশ্চিত করতে চান যে অ্যাপটি ফোরগ্রাউন্ডে থাকলে ব্যবহারকারী রিমাইন্ডার পায়, তাই আসুন একটি বিজ্ঞপ্তি ট্রিগার করতে কিছু কোড প্রয়োগ করি:

  1. MyFirebaseMessagingService-এ MyFirebaseMessagingService onMessageReceived() ফাংশনটি আবার খুলুন।
  2. ডেটা বার্তা পরীক্ষা করার জন্য আপনি সম্প্রতি যে কোডটি যোগ করেছেন তার পরপরই, নিম্নলিখিত কোডটি যোগ করুন যা বিজ্ঞপ্তি কাঠামো ব্যবহার করে একটি বিজ্ঞপ্তি পাঠায়।
// MyFirebaseMessagingService.kt

    // TODO: Step 3.6 check messages for notification and call sendNotification
    // Check if the message contains a notification payload.
    remoteMessage.notification?.let {
        Log.d(TAG, "Message Notification Body: ${it.body}")
        sendNotification(it.body as String)
    }
  1. আপনি যদি আবার অ্যাপটি চালান এবং নোটিফিকেশন কম্পোজার ব্যবহার করে একটি বিজ্ঞপ্তি পাঠান, তাহলে অ্যাপটি অগ্রভাগে বা ব্যাকগ্রাউন্ডে থাকুক না কেন আপনি কোডল্যাবের প্রথম অংশে যেমন দেখতেন তেমনই একটি বিজ্ঞপ্তি দেখতে পাবেন।

সমাধান কোডটি আপনার ডাউনলোড করা কোডের মাস্টার শাখায় রয়েছে

  • FirebaseMessagingService প্রসারিত করে একটি FCM BroadcastReceiver প্রয়োগ করুন।
  • একটি Firebase ক্লাউড মেসেজিং (FCM) প্রজেক্ট সেট আপ করুন এবং আপনার Android অ্যাপে FCM যোগ করুন।
  • বিজ্ঞপ্তি কম্পোজার থেকে পুশ বিজ্ঞপ্তি পাঠিয়ে আপনার অ্যাপ পরীক্ষা করুন।
  • FirebaseMessaging ক্লাসের subscribeToTopic() ফাংশনে কল করে FCM বিষয়ের সদস্যতা নিন।
  • একটি RemoteMessage অবজেক্ট ব্যবহার করে একটি ডেটা পেলোড পাঠান।
  • onMessageReceived() ফাংশনে ডেটা পরিচালনা করুন।
  • যখন অ্যাপটি ফোরগ্রাউন্ডে থাকে এবং যখন এটি ব্যাকগ্রাউন্ডে থাকে তখন FCM পরিচালনা করতে যুক্তি যোগ করুন।

উদাসীনতা কোর্স:

ফায়ারবেস ডকুমেন্টেশন:

এই কোর্সে অন্যান্য কোডল্যাবগুলির লিঙ্কগুলির জন্য, কোটলিন কোডল্যাবগুলির ল্যান্ডিং পৃষ্ঠায় উন্নত Android দেখুন৷