| প্ল্যাটফর্ম নির্বাচন করুন: | iOS+ অ্যান্ড্রয়েড ওয়েব ফ্লাটার ইউনিটি C++ |
পেজটি ফোরগ্রাউন্ডে (ফোকাস থাকা অবস্থায়), ব্যাকগ্রাউন্ডে, অন্য ট্যাবের আড়ালে লুকানো, বা পুরোপুরি বন্ধ আছে কিনা তার উপর নির্ভর করে মেসেজের আচরণ ভিন্ন হয়। সব ক্ষেত্রেই পেজটিকে অবশ্যই 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 জাভাস্ক্রিপ্ট 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.js ফাইলে onBackgroundMessage কল করুন। এই উদাহরণে, আমরা title, body এবং icon ফিল্ড সহ একটি নোটিফিকেশন তৈরি করি।
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যোগ করা হয়। এমন বিরল ক্ষেত্রে যেখানে আপনার প্রয়োজনীয় সমস্ত তথ্য একটি নোটিফিকেশনের মধ্যেই তুলে ধরা সম্ভব, সেখানে আপনার লিঙ্কের প্রয়োজন নাও হতে পারে।