Firebase ক্লাউড মেসেজিং ব্যবহার করে বার্তা গ্রহণ করুন

এই নির্দেশিকাটি বর্ণনা করে কিভাবে আপনার মোবাইল এবং ওয়েব ক্লায়েন্ট অ্যাপগুলিতে Firebase Cloud Messaging সেট আপ করবেন যাতে আপনি নির্ভরযোগ্যভাবে বার্তা গ্রহণ করতে পারেন।

পৃষ্ঠাটি ফোরগ্রাউন্ডে আছে (ফোকাস আছে), নাকি ব্যাকগ্রাউন্ডে আছে, অন্য ট্যাবের পিছনে লুকানো আছে, নাকি সম্পূর্ণ বন্ধ আছে তার উপর নির্ভর করে বার্তাগুলির আচরণ ভিন্ন হয়। সব ক্ষেত্রেই পৃষ্ঠাটিকে onMessage কলব্যাক পরিচালনা করতে হবে, তবে ব্যাকগ্রাউন্ডের ক্ষেত্রে আপনাকে onBackgroundMessage পরিচালনা করতে হতে পারে অথবা ব্যবহারকারীকে আপনার ওয়েব অ্যাপটি ফোরগ্রাউন্ডে আনতে অনুমতি দেওয়ার জন্য ডিসপ্লে বিজ্ঞপ্তি কনফিগার করতে হতে পারে।

অ্যাপের অবস্থা বিজ্ঞপ্তি উপাত্ত উভয়ই
অগ্রভাগ onMessage onMessage onMessage
পটভূমি (সেবা কর্মী) onBackgroundMessage (প্রদর্শন বিজ্ঞপ্তি স্বয়ংক্রিয়ভাবে প্রদর্শিত হবে) onBackgroundMessage onBackgroundMessage (প্রদর্শন বিজ্ঞপ্তি স্বয়ংক্রিয়ভাবে প্রদর্শিত হবে)

জাভাস্ক্রিপ্ট কুইকস্টার্ট নমুনা বার্তা গ্রহণের জন্য প্রয়োজনীয় সমস্ত কোড প্রদর্শন করে।

যখন আপনার ওয়েব অ্যাপটি ফোরগ্রাউন্ডে থাকে তখন বার্তাগুলি পরিচালনা করুন

onMessage ইভেন্টটি গ্রহণ করার জন্য, আপনার অ্যাপটিকে firebase-messaging-sw.js এ Firebase মেসেজিং সার্ভিস ওয়ার্কার নির্ধারণ করতে হবে। বিকল্পভাবে, আপনি getToken(): Promise<string> এর মাধ্যমে SDK-তে একটি বিদ্যমান সার্ভিস ওয়ার্কার সরবরাহ করতে পারেন।

Web

import { initializeApp } from "firebase/app";
import { getMessaging } from "firebase/messaging/sw";

// Initialize the Firebase app in the service worker by passing in
// your app's Firebase config object.
// https://firebase.google.com/docs/web/setup#config-object
const firebaseApp = initializeApp({
  apiKey: 'api-key',
  authDomain: 'project-id.firebaseapp.com',
  databaseURL: 'https://project-id.firebaseio.com',
  projectId: 'project-id',
  storageBucket: 'project-id.appspot.com',
  messagingSenderId: 'sender-id',
  appId: 'app-id',
  measurementId: 'G-measurement-id',
});

// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = getMessaging(firebaseApp);

Web

// Give the service worker access to Firebase Messaging.
// Note that you can only use Firebase Messaging here. Other Firebase libraries
// are not available in the service worker.
// Replace 10.13.2 with latest version of the Firebase JS SDK.
importScripts('https://www.gstatic.com/firebasejs/10.13.2/firebase-app-compat.js');
importScripts('https://www.gstatic.com/firebasejs/10.13.2/firebase-messaging-compat.js');

// Initialize the Firebase app in the service worker by passing in
// your app's Firebase config object.
// https://firebase.google.com/docs/web/setup#config-object
firebase.initializeApp({
  apiKey: 'api-key',
  authDomain: 'project-id.firebaseapp.com',
  databaseURL: 'https://project-id.firebaseio.com',
  projectId: 'project-id',
  storageBucket: 'project-id.appspot.com',
  messagingSenderId: 'sender-id',
  appId: 'app-id',
  measurementId: 'G-measurement-id',
});

// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = firebase.messaging();

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

Web

// Handle incoming messages. Called when:
// - a message is received while the app has focus
// - the user clicks on an app notification created by a service worker
//   `messaging.onBackgroundMessage` handler.
import { getMessaging, onMessage } from "firebase/messaging";

const messaging = getMessaging();
onMessage(messaging, (payload) => {
  console.log('Message received. ', payload);
  // ...
});

Web

// Handle incoming messages. Called when:
// - a message is received while the app has focus
// - the user clicks on an app notification created by a service worker
//   `messaging.onBackgroundMessage` handler.
messaging.onMessage((payload) => {
  console.log('Message received. ', payload);
  // ...
});

আপনার ওয়েব অ্যাপ ব্যাকগ্রাউন্ডে থাকা অবস্থায় বার্তাগুলি পরিচালনা করুন

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

প্রেরণ অনুরোধে বিজ্ঞপ্তি বিকল্পগুলি সেট করুন

অ্যাপ সার্ভার থেকে পাঠানো বিজ্ঞপ্তি বার্তাগুলির জন্য, FCM JavaScript API fcm_options.link কী সমর্থন করে। সাধারণত এটি আপনার ওয়েব অ্যাপের একটি পৃষ্ঠায় সেট করা থাকে:

    https://fcm.googleapis.com/v1/projects/<YOUR-PROJECT-ID>/messages:send
    Content-Type: application/json
    Authorization: bearer <YOUR-ACCESS-TOKEN>

    {
      "message": {
        ,
        "notification": {
          "title": "Background Message Title",
          "body": "Background message body"
        },
        "webpush": {
          "fcm_options": {
            "link": "https://dummypage.com"
          }
        }
      }
    }

যদি লিঙ্কের মানটি এমন একটি পৃষ্ঠার দিকে নির্দেশ করে যা ইতিমধ্যেই একটি ব্রাউজার ট্যাবে খোলা আছে, তাহলে বিজ্ঞপ্তিতে ক্লিক করলে সেই ট্যাবটি সামনে চলে আসে। যদি পৃষ্ঠাটি ইতিমধ্যেই খোলা না থাকে, তাহলে একটি বিজ্ঞপ্তিতে ক্লিক করলে পৃষ্ঠাটি একটি নতুন ট্যাবে খোলে।

যেহেতু ডেটা মেসেজ fcm_options.link সমর্থন করে না, তাই আপনাকে সমস্ত ডেটা মেসেজে একটি নোটিফিকেশন পেলোড যোগ করার পরামর্শ দেওয়া হচ্ছে। বিকল্পভাবে, আপনি পরিষেবা কর্মী ব্যবহার করে নোটিফিকেশন পরিচালনা করতে পারেন।

বিজ্ঞপ্তি এবং ডেটা বার্তার মধ্যে পার্থক্য ব্যাখ্যার জন্য, বার্তার ধরণ দেখুন।

সার্ভিস ওয়ার্কারে বিজ্ঞপ্তি বিকল্প সেট করুন

ডেটা বার্তার জন্য, আপনি পরিষেবা কর্মীতে বিজ্ঞপ্তি বিকল্প সেট করতে পারেন। প্রথমে, পরিষেবা কর্মীতে আপনার অ্যাপটি শুরু করুন:

Web

import { initializeApp } from "firebase/app";
import { getMessaging } from "firebase/messaging/sw";

// Initialize the Firebase app in the service worker by passing in
// your app's Firebase config object.
// https://firebase.google.com/docs/web/setup#config-object
const firebaseApp = initializeApp({
  apiKey: 'api-key',
  authDomain: 'project-id.firebaseapp.com',
  databaseURL: 'https://project-id.firebaseio.com',
  projectId: 'project-id',
  storageBucket: 'project-id.appspot.com',
  messagingSenderId: 'sender-id',
  appId: 'app-id',
  measurementId: 'G-measurement-id',
});

// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = getMessaging(firebaseApp);

Web

// Give the service worker access to Firebase Messaging.
// Note that you can only use Firebase Messaging here. Other Firebase libraries
// are not available in the service worker.
// Replace 10.13.2 with latest version of the Firebase JS SDK.
importScripts('https://www.gstatic.com/firebasejs/10.13.2/firebase-app-compat.js');
importScripts('https://www.gstatic.com/firebasejs/10.13.2/firebase-messaging-compat.js');

// Initialize the Firebase app in the service worker by passing in
// your app's Firebase config object.
// https://firebase.google.com/docs/web/setup#config-object
firebase.initializeApp({
  apiKey: 'api-key',
  authDomain: 'project-id.firebaseapp.com',
  databaseURL: 'https://project-id.firebaseio.com',
  projectId: 'project-id',
  storageBucket: 'project-id.appspot.com',
  messagingSenderId: 'sender-id',
  appId: 'app-id',
  measurementId: 'G-measurement-id',
});

// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = firebase.messaging();

বিকল্প সেট করতে, firebase-messaging-sw.jsonBackgroundMessage কল করুন। এই উদাহরণে, আমরা শিরোনাম, বডি এবং আইকন ক্ষেত্র সহ একটি বিজ্ঞপ্তি তৈরি করি।

Web

import { getMessaging } from "firebase/messaging/sw";
import { onBackgroundMessage } from "firebase/messaging/sw";

const messaging = getMessaging();
onBackgroundMessage(messaging, (payload) => {
  console.log('[firebase-messaging-sw.js] Received background message ', payload);
  // Customize notification here
  const notificationTitle = 'Background Message Title';
  const notificationOptions = {
    body: 'Background Message body.',
    icon: '/firebase-logo.png'
  };

  self.registration.showNotification(notificationTitle,
    notificationOptions);
});

Web

messaging.onBackgroundMessage((payload) => {
  console.log(
    '[firebase-messaging-sw.js] Received background message ',
    payload
  );
  // Customize notification here
  const notificationTitle = 'Background Message Title';
  const notificationOptions = {
    body: 'Background Message body.',
    icon: '/firebase-logo.png'
  };

  self.registration.showNotification(notificationTitle, notificationOptions);
});

বিজ্ঞপ্তির জন্য সেরা পদ্ধতি

FCM for Web এর মাধ্যমে বিজ্ঞপ্তি পাঠানোর জন্য ডেভেলপারদের জন্য সবচেয়ে গুরুত্বপূর্ণ বিবেচ্য বিষয় হল নির্ভুলতা এবং প্রাসঙ্গিকতা। আপনার বিজ্ঞপ্তিগুলি সুনির্দিষ্ট এবং প্রাসঙ্গিক রাখার জন্য এখানে কিছু নির্দিষ্ট সুপারিশ দেওয়া হল:

  • একটি অর্থপূর্ণ ছবি পাঠাতে আইকন ক্ষেত্রটি ব্যবহার করুন। অনেক ব্যবহারের ক্ষেত্রে, এটি এমন একটি কোম্পানি বা অ্যাপের লোগো হওয়া উচিত যা আপনার ব্যবহারকারীরা তাৎক্ষণিকভাবে চিনতে পারবেন। অথবা, একটি চ্যাট অ্যাপ্লিকেশনের জন্য, এটি প্রেরণকারী ব্যবহারকারীর প্রোফাইল ছবি হতে পারে।
  • বার্তার সুনির্দিষ্ট প্রকৃতি প্রকাশ করতে শিরোনাম ক্ষেত্রটি ব্যবহার করুন। উদাহরণস্বরূপ, "জিমি উত্তর দিয়েছেন" "নতুন বার্তা" এর চেয়ে বেশি সুনির্দিষ্ট তথ্য প্রদান করে। আপনার কোম্পানি বা অ্যাপের নামের জন্য এই মূল্যবান স্থানটি ব্যবহার করবেন না - সেই উদ্দেশ্যে আইকনটি ব্যবহার করুন।
  • আপনার ওয়েবসাইটের নাম বা ডোমেন প্রদর্শনের জন্য বিজ্ঞপ্তির শিরোনাম বা বডি ব্যবহার করবেন না; বিজ্ঞপ্তিতে ইতিমধ্যেই আপনার ডোমেন নাম রয়েছে।
  • fcm_options.link যোগ করুন, সাধারণত ব্যবহারকারীকে আপনার ওয়েব অ্যাপে লিঙ্ক করতে এবং ব্রাউজারে এটিকে ফোকাসে আনতে। বিরল ক্ষেত্রে যেখানে আপনার প্রয়োজনীয় সমস্ত তথ্য বিজ্ঞপ্তিতে ফিট করা যেতে পারে, সেখানে আপনার লিঙ্কের প্রয়োজন নাও হতে পারে।