রিয়েল-টাইম এনগেজমেন্ট: Rails 8-এ Web Push Notifications

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

Web Push API এই চিত্রটি বদলে দিচ্ছে। এটি iOS-এর Safari সহ প্রায় প্রতিটি ব্রাউজারে কাজ করে। আপনি আপনার Rails অ্যাপ থেকে সরাসরি ব্যবহারকারীর ডিভাইসে অ্যালার্ট পাঠাতে পারেন। তাদের App Store থেকে কিছু ডাউনলোড করার প্রয়োজন নেই।

Rails 8-এ এটি কীভাবে সেটআপ করবেন তা নিচে দেওয়া হলো।

কাজের ধারা (Workflow)

  • সাবস্ক্রিপশন: ব্যবহারকারী তার ব্রাউজারে 'allow' ক্লিক করেন। ব্রাউজার একটি subscription object প্রদান করে।
  • স্টোরেজ: আপনি এই অবজেক্টটি ব্যবহারকারীর সাথে যুক্ত করে আপনার ডাটাবেসে সেভ করেন।
  • পুশ: আপনার Rails সার্ভার ব্রাউজার পুশ সার্ভিসে একটি সাইন করা (signed) মেসেজ পাঠায়।
  • ডেলিভারি: ডিভাইসের service worker নোটিফিকেশনটি দেখায়।

সেটআপ করার ধাপসমূহ

১. সিকিউরিটি (Security)

আপনার সার্ভার শনাক্ত করার জন্য VAPID keys প্রয়োজন। এটি হ্যাকারদের ভুয়া অ্যালার্ট পাঠানো থেকে বিরত রাখে।

  • আপনার Gemfile-এ web-push gem যোগ করুন।
  • আপনার টার্মিনালে web-push generate-vapid-keys কমান্ডটি চালান।
  • এই কী (keys) গুলো আপনার credentials ফাইলে সেভ করুন।

২. ডাটাবেস (Database)

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

  • চালান: rails g model WebPushSubscription user:references endpoint:string p256dh_key:string auth_key:string
  • চালান: rails db:migrate

৩. Service Worker

public/service-worker.js ফাইলটি তৈরি করুন। আপনার ওয়েবসাইট বন্ধ থাকলেও এই ফাইলটি চলতে থাকে। এটি push event-এর জন্য অপেক্ষা করে এবং নোটিফিকেশন দেখায়।

৪. ফ্রন্টএন্ড (Frontend)

  • আপনার application.js-এ worker-টি রেজিস্টার করুন।
  • পারমিশন চাওয়ার জন্য একটি Stimulus controller ব্যবহার করুন। একটি POST রিকোয়েস্টের মাধ্যমে আপনার Rails controller-এ সাবস্ক্রিপশন ডেটা পাঠান।

৫. ব্যাকগ্রাউন্ড জবস (Background Jobs)

মেইন রিকোয়েস্ট সাইকেলে কখনোই নোটিফিকেশন পাঠাবেন না। আপনার অ্যাপের গতি ধীর হওয়া এড়াতে একটি background job ব্যবহার করুন।

  • একটি SendWebPushJob তৈরি করুন।
  • ব্যবহারকারীর সাবস্ক্রিপশনগুলোর মধ্য দিয়ে লুপ চালান।
  • পেলোড (payload) পাঠানোর জন্য web-push gem ব্যবহার করুন।
  • সাবস্ক্রিপশনগুলো আর বৈধ না থাকলে সেগুলো ডিলিট করে দিন।

আপনি শুধুমাত্র Rails এবং সামান্য Javascript ব্যবহার করেই এমন একটি অ্যাপ তৈরি করতে পারেন যা একটি নেটিভ মোবাইল অভিজ্ঞতার মতো মনে হবে।

উৎস: https://dev.to/zilton7/real-time-engagement-web-push-notifications-in-rails-8-5gdp