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

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

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

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

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

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

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

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

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

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

  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 লেভেল 25) বা তার আগের যেকোনও ভার্সনে রান করা ডিভাইসকে সাপোর্ট করতে, আপনাকে অবশ্যই 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-তে একটি আইটেম যোগ করুন যা এইসব সিস্টেম সেটিংস খোলে।

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

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

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))
}

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

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