Notification Channel (নিউটিফিকেশন চ্যানেল) হল Android এর একটি প্রক্রিয়া, যা সংস্করণ 8.0 (API 26) এ চালু করা হয়েছে, যা বিজ্ঞপ্তিগুলোকে বিভাগ অনুযায়ী শ্রেণীবদ্ধ করে এবং ব্যবহারকারীকে তাদের আচরণের উপর নিয়ন্ত্রণ দেয়। প্রতিটি চ্যানেল এর মাধ্যমে পাঠানো সকল বিজ্ঞপ্তির জন্য গুরুত্বের স্তর, শব্দ, কম্পন এবং ভিজুয়াল আবরণ নির্ধারণ করে। Android Developers অনুযায়ী, NotificationChannel Android 8+ এ সকল বিজ্ঞপ্তির জন্য বাধ্যতামূলক — এটি ছাড়া বিজ্ঞপ্তিগুলো প্রদর্শিত হয় না।
মূখ্য বিষয়াবলি
Notification Channel হল Android 8+ (Oreo) এ একই ধরনের বিজ্ঞপ্তির জন্য একটি লজিক্যাল কন্টেইনার। ডিভেলপার একটি অনন্য ID সহ একটি চ্যানেল তৈরি করে, এর প্যারামিটার সেট করে, এবং তারপর প্রতিটি বিজ্ঞপ্তি এই চ্যানেল নির্দিষ্ট করে পাঠায়। একই চ্যানেলের সকল বিজ্ঞপ্তি এর সেটিংস উত্তরাধিকার করে।
Android 8 এর আগে, বিজ্ঞপ্তি পরিচালনা দ্বিভাগিক ছিল: সকল অথবা কিছু না। ব্যবহারকারী শুধুমাত্র অ্যাপ্লিকেশনের সকল বিজ্ঞপ্তি সম্পূর্ণরূপ বন্ধ করতে পারতেন। চ্যানেলগুলো এই সমস্যা সমাধান করেছে: এখন আপনি “বিজ্ঞাপন” বিজ্ঞপ্তি বন্ধ করতে পারেন কিন্তু “বন্ধুদের কাছে বার্তা” রাখতে পারেন।
একটি চ্যানেল তৈরি করার পর, ব্যবহারকারী যেকোনো সময় সেটিংস → অ্যাপ্লিকেশন → বিজ্ঞপ্তির মাধ্যমে এর গুরুত্ব পরিবর্তন করতে পারে। ডিভেলপার চ্যানেল তৈরি হওয়ার পর প্রোগ্রামেটিকালি ভাবে গুরুত্ব পরিবর্তন করতে পারে না — এটি একটি Android নিরাপত্তা সীমাবদ্ধতা।
Android 8+ এ, প্রতিটি বিজ্ঞপ্তি NotificationChannel এর মাধ্যমে পাঠানো হবে। যদি একটি অ্যাপ্লিকেশন চ্যানেল ছাড়া একটি বিজ্ঞপ্তি দেখানোর চেষ্টা করে, তাহলে সিস্টেম নির্বিকারে এটিকে উপেক্ষা করে। ব্যতিক্রম হল NotificationCompat এর মাধ্যমে একটি ডিফল্ট চ্যানেল সহ বিজ্ঞপ্তি, যা লাইব্রেরি দ্বারা স্বচালিতভাবে তৈরি করা হয়।
একটি নিউটিফিকেশন চ্যানেল প্যারামিটারের একটি সেট দ্বারা সংজ্ঞায়িত হয় যা NotificationChannel ক্লাসের মাধ্যমে এটি তৈরি করার সময় সেট করা হয়। মূল প্যারামিটার হল গুরুত্বের স্তর, যা নির্ধারণ করে যে বিজ্ঞপ্তিটি ব্যবহারকারীর সাথে কিভাবে যোগাযোগ করে।
তৈরির পর, চ্যানেলটি সিস্টেম বিজ্ঞপ্তি সেটিংসে উপস্থিত হয়। ব্যবহারকারী গুরুত্ব পরিবর্তন করতে পারে, শব্দ বন্ধ করতে পারে, কম্পন বন্ধ করতে পারে, অথবা সম্পূর্ণরূপ চ্যানেলটি অবরুদ্ধ করতে পারে। সকল পরিবর্তন পরবর্তী সকল বিজ্ঞপ্তির জন্য তাড়াতাড়ি কার্যকর হয়।
NotificationChannel তৈরি করার সময়, আপনি কনফিগার করতে পারেন: শব্দ (কাস্টম বা সিস্টেম), কম্পন (প্যাটার্ন এবং দৈর্ঘ্য), আলো সংকেতক (LED রঙ), বেজ আইকন (setShowBadge), লক স্ক্রিন (setLockscreenVisibility) এবং ডো নট ডিস্টার্ব মোড (setBypassDnd)। এই প্যারামিটারগুলো চ্যানেল তৈরির সময় নির্দিষ্ট করা হয় এবং পরে শুধুমাত্র ব্যবহারকারী এগুলো পরিবর্তন করতে পারেন।
গুরুত্বের স্তর হল একটি চ্যানেলের মূল প্যারামিটার। এটি নির্ধারণ করে যে বিজ্ঞপ্তিটি একটি শব্দ বাজাবে কিনা, স্ক্রিনে উপস্থিত হবে কিনা, অথবা কেবল ছায়ায় রাখা হবে। গুরুত্বকে অগ্রাধিকার সাথে দিবান্ত করা উচিত নয় — গুরুত্ব চ্যানেল দ্বারা সেট করা হয়, এবং অগ্রাধিকার (setPriority) Android 8+ এ উপেক্ষিত হয়।
| স্তর | ধ্রুবক | আচরণ | শব্দ |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | heads-up ব্যানার দেখায়, ছায়ায় উপস্থিত হয় | হ্যাঁ |
| DEFAULT | IMPORTANCE_DEFAULT (3) | ছায়ায় উপস্থিত হয়, heads-up ছাড়া | হ্যাঁ |
| LOW | IMPORTANCE_LOW (2) | শব্দ ছাড়া ছায়ায় উপস্থিত হয় | না |
| MIN | IMPORTANCE_MIN (1) | কেবল ছায়ায়, শব্দ বা কম্পন ছাড়া | না |
| NONE | IMPORTANCE_NONE (0) | আদৌ প্রদর্শিত হয় না | না |
বেশিরভাগ ব্যবহারকারী পরিদৃশ্যের জন্য, IMPORTANCE_DEFAULT (3) ব্যবহার করুন — বিজ্ঞপ্তিটি শব্দ সহ ছায়ায় উপস্থিত হবে কিন্তু পপ-আপ ব্যানার ছাড়া। IMPORTANCE_HIGH কেবল জরুরী ইভেন্টের জন্য ব্যবহার করুন: ইনকমিং কল, কোনো সংযোগের কাছ থেকে বার্তা, টাইমার রিমাইন্ডার।
চ্যানেলটি একবার তৈরি করা হয় যখন অ্যাপ্লিকেশন শুরু হয় অথবা প্রথম ব্যবহারে। সর্বোত্তম অভ্যাস হল অ্যাপ্লিকেশন স্টার্টআপে, Application.onCreate মেথডে সকল চ্যানেল তৈরি করা। একটি বিদ্যমান চ্যানেল পুনরায় তৈরি করা নিরাপদ — চ্যানেলটি ইতিমধ্যে থাকলে Android কলটিকে উপেক্ষা করে।
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"বার্তা",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "নতুন বার্তার বিজ্ঞপ্তি"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"প্রচার এবং খবর",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "মার্কেটিং বিজ্ঞপ্তি এবং বিশেষ অফার"
setShowBadge(false)
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(messagesChannel)
manager.createNotificationChannel(promoChannel)
}
companion object {
const val CHANNEL_MESSAGES = "messages"
const val CHANNEL_PROMO = "promo"
}
}
একটি বিজ্ঞপ্তি পাঠানোর সময়, setChannelId (NotificationCompat এর জন্য) অথবা Notification.Builder কনস্ট্রাক্টরে চ্যানেল ID নির্দিষ্ট করুন। যদি নির্দিষ্ট ID সহ চ্যানেলটি বিদ্যমান না থাকে, তাহলে বিজ্ঞপ্তিটি দেখানো হবে না, কিন্তু কোনো ত্রুটি হবে না।
Android চ্যানেলের প্রোগ্রামেটিক পরিচালনার জন্য বেশ কিছু API প্রদান করে: তালিকা পাওয়া, মুছে ফেলা এবং বর্তমান সেটিংস যাচাই করা। একটি চ্যানেল মুছে ফেললে এর সকল বিজ্ঞপ্তি সিস্টেম ইতিহাস থেকে সরিয়ে দেওয়া হয়।
val manager =
getSystemService(NotificationManager::class.java)
// সকল চ্যানেলের তালিকা পন
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Channels", "${channel.id}: ${channel.importance}")
}
// বর্তমান গুরুত্ব জানুন (ব্যবহারকারী পরিবর্তন করে থাকতে পারেন)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// ব্যবহারকারী চ্যানেলটি নিষ্ক্রিয় করেছেন
suggestEnablingChannel()
}
// চ্যানেল মুছুন
manager.deleteNotificationChannel(CHANNEL_PROMO)
একটি চ্যানেল তৈরি হওয়ার পর, ডিভেলপার পারে না প্রোগ্রামেটিকালি ভাবে এর গুরুত্ব পরিবর্তন করতে — এটি অপব্যবহার থেকে ব্যবহারকারীকে রক্ষা করার জন্য একটি Android সীমাবদ্ধতা। যদি আপনাকে একটি চ্যানেলের গুরুত্ব পরিবর্তন করতে হয়, তাহলে একটি ভিন্ন ID সহ একটি নতুন চ্যানেল তৈরি করুন এবং বিজ্ঞপ্তিগুলো স্থানান্তরিত করুন।
যদি আপনাকে একটি বিদ্যমান চ্যানেলের গুরুত্ব পরিবর্তন করতে হয়, তাহলে একটি ভিন্ন ID (যথা, “messages_v2”) সহ একটি নতুন চ্যানেল তৈরি করুন এবং এটিতে বিজ্ঞপ্তি পাঠানো শুরু করুন। পুরনো চ্যানেলটি deleteNotificationChannel এর মাধ্যমে মুছে ফেলা যায় — এর সকল বিজ্ঞপ্তি ইতিহাস থেকে সরিয়ে দেওয়া হবে। অ্যাপ্লিকেশন ইন্টারফেসের মাধ্যমে স্থানান্তরণ সম্পর্কে ব্যবহারকারীকে সাবধান করুন যাতে তিনি তার সেটিংস হারান।
NotificationChannelGroup Android সেটিংস ইন্টারফেসে একাধিক চ্যানেলকে একটি দৃশ্য গ্রুপে সংযুক্ত করে। গ্রুপগুলো ব্যবহারকারীকে নেভিগেট করতে সাহায্য করে যখন অ্যাপ্লিকেশন 5+ চ্যানেল ব্যবহার করে: যথা, “সামাজিক”, “সিস্টেম”, “মার্কেটিং”।
একটি গ্রুপ createNotificationChannelGroup এর মাধ্যমে তৈরি করা হয় এবং তৈরির সময় setGroup পদ্ধতির মাধ্যমে চ্যানেলে পাশ করা হয়। একটি গ্রুপ মুছে ফেললে এর সকল চ্যানেলও মুছে যায়। প্রতিটি চ্যানেল কেবলমাত্র একটি গ্রুপের অন্তর্ভুক্ত হতে পারে।
ব্যবহারিক ক্ষেত্রে, চ্যানেল গ্রুপগুলো সুপারিশ করা হয় 3 টির বেশি চ্যানেল থাকা অ্যাপ্লিকেশনের জন্য। এরা সেটিংসে নেভিগেশন সহজ করে এবং চ্যানেল তালিকা বুঝতে পারে না এমন সম্ভাবনা হ্রাস করে যে ব্যবহারকারী একসঙ্গে সকল বিজ্ঞপ্তি নিষ্ক্রিয় করে দেবে।
একটি গ্রুপ createNotificationChannelGroup এর মাধ্যমে একটি অনন্য ID এবং নাম সহ তৈরি করা হয়। তারপর setGroup পদ্ধতির মাধ্যমে প্রতিটি চ্যানেল গ্রুপের সাথে সংযুক্ত হয়। সিস্টেম সেটিংসে, গ্রুপটি একটি শিরোনাম সহ একটি বিভাগ হিসেবে উপস্থিত হয়, যার অধীনে এই গ্রুপের সকল চ্যানেল তালিকাভুক্ত থাকে। যদি একটি গ্রুপ মুছে ফেলা হয়, তাহলে এর সকল চ্যানেলও সিস্টেম দ্বারা স্বচালিতভাবে সরিয়ে দেওয়া হয় পুনরুদ্ধারের কোনো সম্ভাবনা ছাড়া।
সঠিক নিউটিফিকেশন চ্যানেল ডিজাইন সরাসরি ব্যবহারকারী অনুভব এবং ধারণকে প্রভাবিত করে। মূল প্যাটার্ন হল তিনটি গুরুত্বের স্তর: জরুরী চ্যানেল (IMPORTANCE_HIGH) বার্তা এবং কলের জন্য, স্ট্যান্ডার্ড (IMPORTANCE_DEFAULT) সাধারণ বিজ্ঞপ্তির জন্য, এবং নিশ্চিত (IMPORTANCE_LOW) মার্কেটিং এবং খবরের জন্য। এই গ্রেডেশন ব্যবহারকারীকে অতিভার ছাড়া একটি পরিষ্কার পছন্দ দেয়।
দ্বিতীয় প্যাটার্ন হল প্রতি কার্যকারী মডিউলে একটি চ্যানেল। অ্যাপ্লিকেশনের প্রতিটি প্রধান মডিউল (চ্যাট, অর্ডার, ফীড, মার্কেটিং) নিজের চ্যানেল পায়। যদি 5 এর বেশি মডিউল থাকে, তাহলে তাদের একটি NotificationChannelGroup এ সংযুক্ত করুন। সিস্টেম সেটিংসে, গ্রুপটি কলাপসিবল আইটেম সহ একটি বিভাগ হিসেবে উপস্থিত হয় — এটি নেভিগেশন সহজ করে।
তৃতীয় প্যাটার্ন হল একটি ডিভেলপার চ্যানেল। IMPORTANCE_MIN সহ একটি আলাদা চ্যানেল তৈরি করুন ডিবাগ এবং সার্ভিস বিজ্ঞপ্তির জন্য। ব্যবহারকারীরা ছায়ায় এগুলো দেখতে পাবেন না, কিন্তু ডিভেলপার adb এর মাধ্যমে লগ বিশ্লেষণ করতে পারেন। প্রোডাক্শনে, এই চ্যানেলটি সেটিংসে Intent এর মাধ্যমে মুছে ফেলা অথবা লুকানো যায়।
চতুর্থ প্যাটার্ন হল চ্যানেল ফিডব্যাক। ইন্টারফেসে ব্যবহারকারীকে দেখান কোন চ্যানেল সক্রিয় এবং তাদের বর্তমান গুরুত্ব কি। Android 8+ এ, আপনি getNotificationChannel এর মাধ্যমে চ্যানেলের অবস্থা পেতে পারেন এবং চ্যানেলটি নিষ্ক্রিয় হলে ব্যবহারকারীকে সেটিংস পরিবর্তনের প্রস্তাব দিতে পারেন। এটি অ্যাপ্লিকেশনের জরুরী কাজগুলোর জন্য বিশেষ গুরুত্বপূর্ণ।
সামন্য প্রশ্নাবলী
বিজ্ঞপ্তিটি প্রদর্শিত হবে না ছায়ায় বা ট্রেতে। সিস্টেম নির্বিকারে notify() কলটিকে উপেক্ষা করে। ব্যতিক্রম: NotificationCompat ব্যবহার করলে, লাইব্রেরি একটি ডিফল্ট চ্যানেল তৈরি করে, কিন্তু এর গুরুত্ব সর্বদা DEFAULT হয়। সবসময় নিজের চ্যানেল তৈরি করার পরামর্শ দেওয়া হয়।
আপনি পরিবর্তন করতে পারেন একটি চ্যানেলের নাম, বর্ণনা এবং শব্দ। আপনি গুরুত্ব পরিবর্তন করতে পারেন না — এই সিদ্ধান্টটি ডিভেলপার থেকে সিস্টেম দ্বারা সংরক্ষিত। যদি আপনাকে গুরুত্ব বাড়াতে হয়, একটি ভিন্ন ID সহ একটি নতুন চ্যানেল তৈরি করুন এবং নতুন বিজ্ঞপ্তির জন্য এটি ব্যবহার করুন। ব্যবহারকারী যেকোনো সময় গুরুত্ব পরিবর্তন করতে পারেন।
getNotificationChannel ব্যবহার করুন এবং গুরুত্ব যাচাই করুন: যদি মান IMPORTANCE_NONE হয়, তাহলে চ্যানেলটি নিষ্ক্রিয়। আপনি Intent: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS এর মাধ্যমে app_package এবং channel_id প্যারামিটার সহ চ্যানেলের সিস্টেম সেটিংস খুলতে পারেন।
কোনো সীমা নেই — Android চ্যানেলের সংখ্যার কোনো সীমা নির্ধারণ করে না। তবে, ব্যবহারকারীকে পছন্দের বোঝা না দেওয়ার জন্য 5–10 টির বেশি চ্যানেল না তৈরি করার পরামর্শ দেওয়া হয়। সর্বোত্তম ন্যূনতম হল 2–3 টি চ্যানেল: জরুরী বিজ্ঞপ্তি, নিয়মিত এবং মার্কেটিং।
Android 7.1 (API 25) এবং নিচে, চ্যানেল সমর্থিত নয়। NotificationChannel ক্লাস কেবল API 26 থেকে উপলব্ধ। পিছনের সঙ্গতিশীলতার জন্য, NotificationCompat ব্যবহার করুন এবং চ্যানেল তৈরিকে একটি শর্তে আবদ্ধ করুন: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O).
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন