এই কোডল্যাবে, আপনি বিজ্ঞপ্তিগুলি পরিচালনা করতে একজন পরিষেবা কর্মী ব্যবহার করবেন৷ এখানে নির্দেশাবলী অনুমান করে যে আপনি ইতিমধ্যেই পরিষেবা কর্মীদের সাথে পরিচিত এবং বিজ্ঞপ্তি অনুমতির অনুরোধ এবং বিজ্ঞপ্তি পাঠানোর মূল বিষয়গুলি সম্পর্কে জানেন৷ আপনার যদি বিজ্ঞপ্তিগুলির উপর একটি রিফ্রেশারের প্রয়োজন হয়, বিজ্ঞপ্তি API কোডল্যাব দিয়ে শুরু করুন দেখুন৷ পরিষেবা কর্মীদের সম্পর্কে আরও জানতে, ম্যাট গান্টের পরিষেবা কর্মীদের পরিচিতি দেখুন।
নমুনা অ্যাপ এবং শুরুর কোডের সাথে পরিচিত হন
নতুন Chrome ট্যাবে লাইভ অ্যাপটি দেখে শুরু করুন:
- DevTools খুলতে `Control+Shift+J` (বা Mac এ `Command+Option+J`) টিপুন।
কনসোল ট্যাবে ক্লিক করুন।
ফিল্টার বাক্সের পাশের স্তর ড্রপডাউনে তথ্য বিকল্পটি নির্বাচন করা হয়েছে তা নিশ্চিত করুন।
আপনার লাইভ অ্যাপের জন্য DevTools কনসোলে, আপনি একটি কনসোল বার্তা দেখতে পাবেন:
TODO: Implement getRegistration()।এটি একটি ফাংশন স্টাব থেকে একটি বার্তা যা আপনি এই কোডল্যাবে প্রয়োগ করবেন।
এখন নমুনা অ্যাপের কোড দেখে নেওয়া যাক।
public/index.jsএ একবার দেখুন:আপনি যে ফাংশনগুলি বাস্তবায়ন করবেন তার জন্য চারটি স্টাব রয়েছে:
registerServiceWorker,getRegistration,unRegisterServiceWorker, এবংsendNotification৷requestPermissionফাংশন ব্যবহারকারীর বিজ্ঞপ্তি পাঠানোর অনুমতির অনুরোধ করে। আপনি যদি Notifications API কোডল্যাব দিয়ে Get start করে থাকেন, তাহলে আপনি লক্ষ্য করবেন যে এটিরrequestPermissionফাংশন এখানে ব্যবহার করা হয়েছে। শুধুমাত্র পার্থক্য হল যে এটি এখন অনুমতি অনুরোধের সমাধান করার পরে ব্যবহারকারী ইন্টারফেস আপডেট করে।updateUIফাংশন অ্যাপের সমস্ত বোতাম এবং বার্তা রিফ্রেশ করে।initializePageফাংশন ব্রাউজারে পরিষেবা কর্মী সক্ষমতার জন্য বৈশিষ্ট্য সনাক্তকরণ সম্পাদন করে এবং অ্যাপ ব্যবহারকারী ইন্টারফেস আপডেট করে।পৃষ্ঠাটি লোড না হওয়া পর্যন্ত স্ক্রিপ্টটি অপেক্ষা করে এবং তারপর এটি শুরু করে।
public/service-worker.jsখুলুন।নাম অনুসারে, আপনি এই ফাইলটিকে পরিষেবা কর্মী হিসাবে নিবন্ধন করতে অ্যাপটিতে কোড যোগ করবেন৷
যদিও ফাইলটি এখনও অ্যাপের দ্বারা ব্যবহার করা হয়নি, এতে কিছু শুরুর কোড রয়েছে যা পরিষেবা কর্মী সক্রিয় হলে কনসোলে একটি বার্তা প্রিন্ট করবে।
পরিষেবা কর্মী যখন সেগুলি পাবেন তখন বিজ্ঞপ্তিগুলি পরিচালনা করতে আপনি
public/service-worker.jsএ কোড যোগ করবেন৷
সেবা কর্মী নিবন্ধন
এই ধাপে, আপনি কোড লিখবেন যেটি চলে যখন ব্যবহারকারী অ্যাপ UI-তে পরিষেবা কর্মী নিবন্ধন করুন ক্লিক করেন। এই কোড একটি পরিষেবা কর্মী হিসাবে public/service-worker.js নিবন্ধন করবে।
public/index.jsখুলুন। নিম্নলিখিত কোড দিয়েregisterServiceWorkerফাংশন প্রতিস্থাপন করুন:// Use the Service Worker API to register a service worker. async function registerServiceWorker() { await navigator.serviceWorker.register('./service-worker.js') updateUI(); }মনে রাখবেন যে
registerServiceWorkerহ্যান্ডলিং প্রতিশ্রুতি আরো সুবিধাজনক করতেasync functionঘোষণা ব্যবহার করে। এটি আপনাকে একটিPromiseসমাধান করা মূল্যের জন্যawaitদেয়৷ উদাহরণস্বরূপ, উপরের ফাংশনটি UI আপডেট করার আগে একজন পরিষেবা কর্মীকে নিবন্ধিত করার ফলাফলের জন্য অপেক্ষা করছে৷ আরও তথ্যের জন্য MDN-এawaitদেখুন।এখন যেহেতু ব্যবহারকারী একটি পরিষেবা কর্মী নিবন্ধন করতে পারেন, আপনি পরিষেবা কর্মী নিবন্ধন বস্তুর একটি রেফারেন্স পেতে পারেন।
public/index.jsএ,getRegistrationফাংশনটি নিম্নলিখিত কোড দিয়ে প্রতিস্থাপন করুন:// Get the current service worker registration. function getRegistration() { return navigator.serviceWorker.getRegistration(); }উপরের ফাংশনটি বর্তমান পরিষেবা কর্মী নিবন্ধন পেতে পরিষেবা কর্মী API ব্যবহার করে, যদি এটি বিদ্যমান থাকে। এটি পরিষেবা কর্মী নিবন্ধনের একটি রেফারেন্স পেতে একটু বেশি সুবিধাজনক করে তোলে।
পরিষেবা কর্মী নিবন্ধন কার্যকারিতা সম্পূর্ণ করতে, পরিষেবা কর্মীকে নিবন্ধনমুক্ত করতে কোড যোগ করুন৷ নিম্নলিখিত কোড দিয়ে
unRegisterServiceWorkerফাংশন প্রতিস্থাপন করুন:// Unregister a service worker, then update the UI. async function unRegisterServiceWorker() { // Get a reference to the service worker registration. let registration = await getRegistration(); // Await the outcome of the unregistration attempt // so that the UI update is not superceded by a // returning Promise. await registration.unregister(); updateUI(); }
আপনি যে ট্যাবে লাইভ অ্যাপটি দেখছেন সেখানে পৃষ্ঠাটি আবার লোড করুন। নিবন্ধন পরিষেবা কর্মী এবং নিবন্ধনমুক্ত পরিষেবা কর্মী বোতামগুলি এখন কাজ করা উচিত৷
পরিষেবা কর্মীকে বিজ্ঞপ্তি পাঠান
এই ধাপে, আপনি কোড লিখবেন যা ব্যবহারকারী যখন অ্যাপ UI-তে একটি বিজ্ঞপ্তি পাঠান ক্লিক করবে তখন চলবে। এই কোডটি একটি বিজ্ঞপ্তি তৈরি করবে, একজন পরিষেবা কর্মী নিবন্ধিত কিনা তা পরীক্ষা করবে এবং তারপরে postMessage পদ্ধতি ব্যবহার করে পরিষেবা কর্মীকে বিজ্ঞপ্তি পাঠাবে।
public/index.js খুলুন এবং নিম্নলিখিত কোড দিয়ে sendNotification ফাংশন প্রতিস্থাপন করুন:
// Create and send a test notification to the service worker.
async function sendNotification() {
// Use a random number as part of the notification data
// (so you can tell the notifications apart during testing!)
let randy = Math.floor(Math.random() * 100);
let notification = {
title: 'Test ' + randy,
options: { body: 'Test body ' + randy }
};
// Get a reference to the service worker registration.
let registration = await getRegistration();
// Check that the service worker registration exists.
if (registration) {
// Check that a service worker controller exists before
// trying to access the postMessage method.
if (navigator.serviceWorker.controller) {
navigator.serviceWorker.controller.postMessage(notification);
} else {
console.log('No service worker controller found. Try a soft reload.');
}
}
}
এই কোডটি কী করছে তা এখানে:
sendNotificationএকটি অ্যাসিঙ্ক্রোনাস ফাংশন, তাই আপনি পরিষেবা কর্মী নিবন্ধনের একটি রেফারেন্স পেতেawaitব্যবহার করতে পারেন।পরিষেবা কর্মীর
postMessageপদ্ধতি অ্যাপ থেকে পরিষেবা কর্মীর কাছে ডেটা পাঠায়। আরও তথ্যের জন্য পোস্টমেসেজে MDN ডকুমেন্টেশন দেখুন।কোডটি
postMessageফাংশন অ্যাক্সেস করার চেষ্টা করার আগেnavigator.serviceWorker.controllerপ্রপার্টির উপস্থিতি পরীক্ষা করে।navigator.serviceWorker.controllernullহবে যদি কোনো সক্রিয় পরিষেবা কর্মী না থাকে, অথবা যদি পৃষ্ঠাটি জোর করে রিফ্রেশ করা হয় (Shift+রিলোড )। আরও তথ্যের জন্য MDN-এ ServiceWorker কন্ট্রোলার ডকুমেন্টেশন দেখুন।
পরিষেবা কর্মীর বিজ্ঞপ্তিগুলি পরিচালনা করুন
এই ধাপে, আপনি পরিষেবা কর্মীতে কোড লিখবেন যা এটিতে পোস্ট করা বার্তাগুলি পরিচালনা করবে এবং ব্যবহারকারীকে বিজ্ঞপ্তিগুলি প্রদর্শন করবে৷
public/service-worker.js খুলুন। ফাইলের শেষে নিম্নলিখিত কোড যোগ করুন:
// Show notification when received
self.addEventListener('message', (event) => {
let notification = event.data;
self.registration.showNotification(
notification.title,
notification.options
).catch((error) => {
console.log(error);
});
});
এখানে একটি দ্রুত ব্যাখ্যা:
selfহল পরিষেবা কর্মী নিজেই একটি রেফারেন্স।যদিও পরিষেবা কর্মী এখন বিজ্ঞপ্তিগুলি প্রদর্শন করে, প্রধান অ্যাপ UI এখনও ব্যবহারকারীর কাছ থেকে বিজ্ঞপ্তির অনুমতি পাওয়ার জন্য দায়ী৷ যদি অনুমতি না দেওয়া হয়,
showNotificationদ্বারা প্রত্যাবর্তিত প্রতিশ্রুতি প্রত্যাখ্যান করা হয়। উপরের কোডটি একটি ধরা না পড়াPromiseপ্রত্যাখ্যান ত্রুটি এড়াতে একটিcatchব্লক ব্যবহার করে এবং এই ত্রুটিটিকে আরও একটু সুন্দরভাবে পরিচালনা করে।
এই সিরিজের পরবর্তী কোডল্যাবে যান: একটি পুশ নোটিফিকেশন সার্ভার তৈরি করুন ।