বিজ্ঞপ্তির চ্যানেল তৈরি ও ম্যানেজ করা

Android 8.0 (API লেভেল ২৬) থেকে শুরু করে, সব বিজ্ঞপ্তি কোনও চ্যানেলে অ্যাসাইন করতে হবে। প্রতিটি চ্যানেলের জন্য, আপনি ভিজ্যুয়াল এবং অডিটরি আচরণ সেট করতে পারেন যা সেই চ্যানেলের সমস্ত বিজ্ঞপ্তিতে প্রয়োগ করা হয়। ব্যবহারকারীরা এই সেটিংস পরিবর্তন করতে পারবেন এবং আপনার অ্যাপের কোন বিজ্ঞপ্তি চ্যানেলগুলি অনুপ্রবেশকারী বা দৃশ্যমান হতে পারে তা নির্ধারণ করতে পারবেন।

Android 8.0-এ চ্যানেল ও অন্যান্য বিজ্ঞপ্তি ফিচার সম্পর্কে ওভারভিউ পেতে, নিচের ভিডিওটি দেখুন।

বিজ্ঞপ্তি চ্যানেলের জন্য ব্যবহারকারীর সেটিংস সিস্টেম সেটিংসে প্রতিটি অ্যাপের জন্য উপলভ্য, যেমনটি চিত্র ১-এ দেখানো হয়েছে।

ছবি ১. 'ঘড়ি' অ্যাপ ও এর একটি চ্যানেলের জন্য বিজ্ঞপ্তির সেটিংস।

বিজ্ঞপ্তি চ্যানেল তৈরি করার পরে, আপনি বিজ্ঞপ্তির আচরণ পরিবর্তন করতে পারবেন না। সেই সময় ব্যবহারকারীর কাছে সম্পূর্ণ কন্ট্রোল থাকে। তবে, আপনি এখনও চ্যানেলের নাম ও বিবরণ পরিবর্তন করতে পারবেন।

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

আপনি Android 8.0 (API লেভেল ২৬) বা তার পরবর্তী যেকোনও ভার্সন টার্গেট করলে, আপনাকে এক বা একাধিক বিজ্ঞপ্তি চ্যানেল বাস্তবায়ন করতে হবে। আপনার targetSdkVersion ২৫ বা তার কম হিসেবে সেট করা থাকলে, আপনার অ্যাপ Android 8.0 (API লেভেল ২৬) বা তার পরবর্তী যেকোনও ভার্সনে রান করলে, এটি Android 7.1 (API লেভেল ২৫) বা তার পূর্ববর্তী যেকোনও ভার্সনে রান করা ডিভাইসের মতোই কাজ করে।

বিজ্ঞপ্তি চ্যানেল তৈরি করুন

বিজ্ঞপ্তি চ্যানেল তৈরি করতে, এই ধাপগুলি অনুসরণ করুন:

  1. অনন্য চ্যানেল আইডি, ব্যবহারকারী দেখতে পাবেন এমন নাম এবং গুরুত্বের লেভেল সহ NotificationChannel অবজেক্ট তৈরি করুন।

  2. বিকল্প হিসেবে, setDescription()-এর মাধ্যমে সিস্টেম সেটিংসে ব্যবহারকারী যে বিবরণ দেখতে পান তা নির্দিষ্ট করুন।

  3. createNotificationChannel()-এ পাস করে বিজ্ঞপ্তি চ্যানেল রেজিস্টার করুন।

নিম্নলিখিত উদাহরণ থেকে কীভাবে বিজ্ঞপ্তি চ্যানেল তৈরি ও রেজিস্টার করতে হয় তা জানুন:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Create the NotificationChannel.
    val importance = NotificationManager.IMPORTANCE_DEFAULT
    val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
    mChannel.description = descriptionText
    // Register the channel with the system. You can't change the importance
    // or other notification behaviors after this.
    val notificationManager =
        context.getSystemService(NotificationManager::class.java)
    notificationManager?.createNotificationChannel(mChannel)
}

আগে থেকে থাকা কোনও বিজ্ঞপ্তি চ্যানেলকে তার আসল ভ্যালু দিয়ে আবার তৈরি করলে কোনও অপারেশন হয় না, তাই অ্যাপ চালু করার সময় এই কোড কল করা নিরাপদ।

ডিফল্ট হিসেবে, কোনও চ্যানেলে পোস্ট করা সব বিজ্ঞপ্তি NotificationManagerCompat ক্লাস থেকে গুরুত্ব লেভেল দ্বারা নির্ধারিত ভিজ্যুয়াল ও অডিটরি আচরণ ব্যবহার করে, যেমন IMPORTANCE_DEFAULT বা IMPORTANCE_HIGH। গুরুত্বের লেভেল সম্পর্কে আরও তথ্য পেতে পরবর্তী বিভাগটি দেখুন।

আপনার চ্যানেলের ডিফল্ট বিজ্ঞপ্তি আচরণ আরও কাস্টমাইজ করতে চাইলে, আপনি NotificationChannel-এ enableLights(), setLightColor(), এবং setVibrationPattern()-এর মতো পদ্ধতি কল করতে পারেন। মনে রাখবেন যে চ্যানেল তৈরি করার পরে আপনি এইসব সেটিংস পরিবর্তন করতে পারবেন না এবং এই আচরণগুলি অ্যাক্টিভ থাকবে কিনা তার উপর ব্যবহারকারীর চূড়ান্ত নিয়ন্ত্রণ থাকবে।

এছাড়াও, আপনি createNotificationChannels() কল করে একটি সিঙ্গেল অপারেশনে একাধিক বিজ্ঞপ্তি চ্যানেল তৈরি করতে পারবেন।

গুরুত্বের লেভেল সেট করুন

চ্যানেলের গুরুত্ব, চ্যানেলে পোস্ট করা সব বিজ্ঞপ্তির ইন্টারাপশন লেভেলকে প্রভাবিত করে। NotificationChannel কনস্ট্রাক্টরে এটি উল্লেখ করুন, পাঁচটি গুরুত্ব লেভেলের মধ্যে একটি ব্যবহার করে, IMPORTANCE_NONE(0) থেকে IMPORTANCE_HIGH(4) পর্যন্ত।

Android 7.1 (API লেভেল ২৫) বা তার আগের যেকোনও ভার্সনে রান করা ডিভাইসে কাজ করার জন্য, আপনাকে NotificationCompat ক্লাস থেকে একটি প্রায়োরিটি কনস্ট্যান্ট ব্যবহার করে প্রতিটি বিজ্ঞপ্তির জন্য setPriority() কল করতে হবে।

গুরুত্ব (NotificationManager.IMPORTANCE_*) এবং অগ্রাধিকার (NotificationCompat.PRIORITY_*) কনস্ট্যান্ট ব্যবহারকারীর কাছে দৃশ্যমান গুরুত্ব বিকল্পে ম্যাপ করা হয়, যেমনটি নিম্নলিখিত টেবিলে দেখানো হয়েছে।

ব্যবহারকারীর-দৃশ্যমান গুরুত্বের লেভেল গুরুত্ব (Android 8.0 এবং তার পরবর্তী যেকোনও ভার্সন) অগ্রাধিকার (Android 7.1 এবং তার আগের যেকোনও ভার্সন)
জরুরি
সাউন্ড করে এবং হেডস-আপ বিজ্ঞপ্তি হিসেবে দেখা যায়।
IMPORTANCE_HIGH PRIORITY_HIGH অথবা PRIORITY_MAX
বেশি
সাউন্ড করে।
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
মাঝারি
কোনও সাউন্ড হয় না।
IMPORTANCE_LOW PRIORITY_LOW
কম
কোনও সাউন্ড হয় না এবং স্ট্যাটাস বারে দেখা যায় না।
IMPORTANCE_MIN PRIORITY_MIN
কিছুই নয়
কোনও সাউন্ড হয় না এবং স্ট্যাটাস বার বা শেডে দেখা যায় না।
IMPORTANCE_NONE N/A

গুরুত্ব নির্বিশেষে সব বিজ্ঞপ্তি, সিস্টেম UI-এর এমন লোকেশনে দেখানো হয় যেখানে কোনও বাধা সৃষ্টি হয় না, যেমন বিজ্ঞপ্তি ড্রয়ারে এবং লঞ্চার আইকনে ব্যাজ হিসেবে, যদিও আপনি বিজ্ঞপ্তি ব্যাজের উপস্থিতি পরিবর্তন করতে পারবেন।

NotificationManager-এ চ্যানেল জমা দেওয়ার পরে, আপনি গুরুত্বের লেভেল পরিবর্তন করতে পারবেন না। তবে, ব্যবহারকারী যেকোনও সময় আপনার অ্যাপের চ্যানেলের জন্য পছন্দ পরিবর্তন করতে পারবেন।

অগ্রাধিকারের উপযুক্ত লেভেল বেছে নেওয়ার ব্যাপারে আরও তথ্য পেতে, বিজ্ঞপ্তির ডিজাইন সংক্রান্ত নির্দেশিকা-তে "অগ্রাধিকারের লেভেল" দেখুন।

বিজ্ঞপ্তি চ্যানেল সেটিংস পড়ুন

ব্যবহারকারীরা বিজ্ঞপ্তি চ্যানেলের সেটিংস পরিবর্তন করতে পারেন, যার মধ্যে ভাইব্রেশন এবং অ্যালার্ট সাউন্ডের মতো আচরণ অন্তর্ভুক্ত। কোনও ব্যবহারকারী আপনার বিজ্ঞপ্তি চ্যানেলে কী সেটিংস প্রয়োগ করেছেন তা জানতে চাইলে, এই ধাপগুলি অনুসরণ করুন:

  1. getNotificationChannel() অথবা getNotificationChannels()-এ কল করে NotificationChannel অবজেক্ট পান।

  2. নির্দিষ্ট চ্যানেল সেটিংস কোয়েরি করুন, যেমন getVibrationPattern(), getSound() এবং getImportance()।

আপনি যদি এমন কোনও চ্যানেল সেটিং শনাক্ত করেন যা আপনার অ্যাপের জন্য অভিপ্রেত আচরণকে বাধা দেয় বলে আপনি মনে করেন, তাহলে আপনি ব্যবহারকারীকে এটি পরিবর্তন করার পরামর্শ দিতে পারেন এবং পরবর্তী বিভাগে দেখানো হিসাবে চ্যানেল সেটিংস খোলার জন্য একটি অ্যাকশন প্রদান করতে পারেন।

বিজ্ঞপ্তি চ্যানেল সেটিংস খুলুন

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

আপনি Intent-এর মাধ্যমে বিজ্ঞপ্তি চ্যানেলের জন্য সিস্টেম সেটিংস খুলতে পারবেন যা ACTION_CHANNEL_NOTIFICATION_SETTINGS অ্যাকশন ব্যবহার করে।

যেমন, নিম্নলিখিত স্যাম্পেল কোড থেকে আপনি জানতে পারবেন যে কীভাবে কোনও ব্যবহারকারীকে বিজ্ঞপ্তি চ্যানেলের সেটিংসে রিডাইরেক্ট করতে হয়:

val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
    putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)
    putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID)
}
Button(onClick = {
    context.startActivity(intent)
}) {
    Text("Open Channel Settings")
}

লক্ষ্য করুন যে ইন্টেন্টের জন্য দুটি অতিরিক্ত তথ্য প্রয়োজন যা আপনার অ্যাপের প্যাকেজের নাম (অ্যাপ্লিকেশন আইডি নামেও পরিচিত) এবং এডিট করার জন্য চ্যানেল নির্দিষ্ট করে।

বিজ্ঞপ্তি চ্যানেল মুছে দেওয়া

আপনি deleteNotificationChannel()-এ কল করে বিজ্ঞপ্তি চ্যানেল মুছে দিতে পারবেন। এই প্রসেস কীভাবে সম্পূর্ণ করতে হয় তা নিম্নলিখিত স্যাম্পেল কোড থেকে জানতে পারবেন:

val notificationManager =
    ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java)
notificationManager?.deleteNotificationChannel(channelId)

বিজ্ঞপ্তি চ্যানেল গ্রুপ তৈরি করুন

সেটিংস UI-তে আপনার চ্যানেলের উপস্থিতি আরও সাজাতে চাইলে, আপনি চ্যানেল গ্রুপ তৈরি করতে পারেন। আপনার অ্যাপে একাধিক ব্যবহারকারীর অ্যাকাউন্ট থাকলে এটি করা ভাল, কারণ এর ফলে আপনি প্রতিটি অ্যাকাউন্টের জন্য একটি করে বিজ্ঞপ্তি চ্যানেল গ্রুপ তৈরি করতে পারবেন। চ্যানেল গ্রুপ ব্যবহারকারীদের একই নামের একাধিক বিজ্ঞপ্তি চ্যানেলকে আলাদা করতে এবং নিয়ন্ত্রণ করতে সাহায্য করে।

ছবি ২. ব্যক্তিগত ও অফিস অ্যাকাউন্টের জন্য গ্রুপের সাথে বিজ্ঞপ্তি চ্যানেল সেটিংস।

যেমন, কোনও সোশ্যাল নেটওয়ার্কিং অ্যাপে ব্যক্তিগত ও অফিস অ্যাকাউন্টের জন্য সহায়তা অন্তর্ভুক্ত থাকতে পারে। এই পরিস্থিতিতে, প্রতিটি অ্যাকাউন্টের জন্য একই ফাংশন ও নাম সহ একাধিক বিজ্ঞপ্তি চ্যানেলের প্রয়োজন হতে পারে, যেমন:

  • দুটি চ্যানেল সহ একটি ব্যক্তিগত অ্যাকাউন্ট:

    • নতুন মন্তব্য

    • পোস্ট সংক্রান্ত সাজেশন

  • দুটি চ্যানেল সহ একটি ব্যবসায়িক অ্যাকাউন্ট:

    • নতুন মন্তব্য

    • পোস্ট সংক্রান্ত সাজেশন

প্রতিটি অ্যাকাউন্টের জন্য বিজ্ঞপ্তি চ্যানেলগুলিকে গ্রুপে সাজানো ব্যবহারকারীদের তাদের মধ্যে পার্থক্য করতে দেয়।

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

fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) {
    val notificationManager =
        ContextCompat.getSystemService(context, NotificationManager::class.java)
    notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
}

আপনি নতুন গ্রুপ তৈরি করার পরে, গ্রুপের সাথে নতুন NotificationChannel অবজেক্ট যুক্ত করতে setGroup() কল করতে পারবেন।

আপনি বিজ্ঞপ্তি ম্যানেজারে চ্যানেল জমা দেওয়ার পরে, বিজ্ঞপ্তি চ্যানেল ও গ্রুপের মধ্যে সম্পর্ক পরিবর্তন করতে পারবেন না।