Notification Channel (bildirishnoma kanali) — bu Android-ning 8.0 (API 26) versiyasida joriy qilingan mexanizm bo'lib, u bildirishnomalarni toifalarga guruhlaydi va foydalanuvchiga ularning xatti-harakatlari ustidan nazorat beradi. Har bir kanal o'zi orqali yuborilgan barcha bildirishnomalar uchun muhimlik darajasini, ovozni, tebranishni va vizual ko'rinishni belgilaydi. Android Developers ma'lumotlariga ko'ra, NotificationChannel Android 8+ da barcha bildirishnomalar uchun majburiydir — usiz bildirishnomalar ko'rsatilmaydi.
Asosiy fikrlar
Notification Channel — Android 8+ (Oreo) da bir xil turdagi bildirishnomalar uchun mantiqiy konteynerdir. Dasturchi noyob ID bilan kanal yaratadi, uning parametrlarini o'rnatadi va keyin har bir bildirishnomani ushbu kanalni ko'rsatib yuboradi. Bitta kanaldagi barcha bildirishnomalar uning sozlamalarini meros qilib oladi.
Android 8 dan oldin bildirishnomalarni boshqarish ikkilik edi: hammasi yoki hech narsa. Foydalanuvchi faqat ilovaning barcha bildirishnomalarini butunlay o'chirib qo'yishi mumkin edi. Kanallar bu muammoni hal qildi: endi reklama bildirishnomalarini o'chirib, do'stlardan kelgan xabarlarni saqlab qolish mumkin.
Kanal yaratilgandan so'ng, uning muhimligi (importance) foydalanuvchi tomonidan istalgan vaqtda Sozlamalar → Ilovalar → Bildirishnomalar orqali o'zgartirilishi mumkin. Dasturchi kanal yaratilgandan keyin importance-ni dasturiy ravishda o'zgartira olmaydi — bu Android xavfsizlik cheklovidir.
Android 8+ da har bir bildirishnoma NotificationChannel orqali yuborilishi kerak. Agar ilova kanalsiz bildirishnoma ko'rsatishga urinsa — tizim uni indamay e'tiborsiz qoldiradi. Istisno — kutubxona tomonidan avtomatik yaratilgan standart kanal bilan NotificationCompat orqali bildirishnomalar.
Bildirishnoma kanali NotificationChannel sinfi orqali yaratilganda o'rnatiladigan parametrlar to'plami bilan belgilanadi. Asosiy parametr — bildirishnomaning foydalanuvchi bilan o'zaro ta'sirini belgilaydigan importance darajasi (importance level).
Yaratilgandan so'ng, kanal tizim bildirishnoma sozlamalarida paydo bo'ladi. Foydalanuvchi importance-ni o'zgartirishi, ovozni, tebranishni o'chirishi yoki kanalni butunlay bloklashi mumkin. Barcha o'zgarishlar keyingi bildirishnomalar uchun darhol kuchga kiradi.
NotificationChannel yaratishda quyidagilarni sozlash mumkin: ovoz (maxsus yoki tizim), tebranish (naqsh va davomiylik), yorug'lik indikatori (LED rangi), belgi (setShowBadge), qulflangan ekranda ko'rinish (setLockscreenVisibility) va Bezovta qilmaslik rejimi (setBypassDnd). Ushbu parametrlar kanal yaratishda mustahkamlanadi va keyinchalik faqat foydalanuvchi tomonidan o'zgartirilishi mumkin.
Muhimlik darajasi (importance) — kanalning asosiy parametridir. U bildirishnomaning ovoz chiqarishini, ekranda paydo bo'lishini yoki shunchaki soyaga joylashishini belgilaydi. Muhimlikni ustuvorlik bilan adashtirmang — importance kanal tomonidan o'rnatiladi, ustuvorlik (setPriority) esa Android 8+ da e'tiborga olinmaydi.
| Daraja | Doimiy | Xatti-harakat | Ovoz |
|---|---|---|---|
| HIGH | IMPORTANCE_HIGH (4) | Heads-up bannerni ko'rsatadi, pardada paydo bo'ladi | Ha |
| DEFAULT | IMPORTANCE_DEFAULT (3) | Pardada paydo bo'ladi, heads-upsiz | Ha |
| LOW | IMPORTANCE_LOW (2) | Ovozsiz pardada paydo bo'ladi | Yo'q |
| MIN | IMPORTANCE_MIN (1) | Faqat soyada, ovoz va tebranishsiz | Yo'q |
| NONE | IMPORTANCE_NONE (0) | Umuman ko'rsatilmaydi | Yo'q |
Aksariyat foydalanuvchi stsenariylari uchun IMPORTANCE_DEFAULT (3) dan foydalaning — bildirishnoma pardada ovoz bilan paydo bo'ladi, lekin ochiladigan bannersiz. IMPORTANCE_HIGH dan faqat muhim hodisalar uchun foydalaning: kiruvchi qo'ng'iroq, suhbatdoshdan xabar, taymer bilan eslatma.
Kanal bir marta — ilova ishga tushirilganda yoki birinchi foydalanishda yaratiladi. Eng yaxshi amaliyot — barcha kanallarni ilova ishga tushirilganda, Application.onCreate metodida yaratish. Mavjud kanalni qayta yaratish xavfsizdir — kanal allaqachon mavjud bo'lsa, Android so'rovni e'tiborsiz qoldiradi.
class App : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannels()
}
private fun createNotificationChannels() {
val messagesChannel = NotificationChannel(
CHANNEL_MESSAGES,
"Xabarlar",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Yangi xabarlar haqida bildirishnomalar"
enableVibration = true
setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
}
val promoChannel = NotificationChannel(
CHANNEL_PROMO,
"Aksiyalar va yangiliklar",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Marketing bildirishnomalari va maxsus takliflar"
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"
}
}
Bildirishnoma yuborishda kanal ID-sini setChannelId (NotificationCompat uchun) yoki Notification.Builder konstruktorida ko'rsating. Belgilangan ID bilan kanal mavjud bo'lmasa — bildirishnoma ko'rsatilmaydi, lekin xato yuz bermaydi.
Android kanallarni dasturiy boshqarish uchun bir nechta API-larni taqdim etadi: ro'yxatni olish, o'chirish va joriy sozlamalarni tekshirish. Kanalni o'chirish uning barcha bildirishnomalarini tizim tomonidan tarixdan o'chirilishiga olib keladi.
val manager =
getSystemService(NotificationManager::class.java)
// Barcha kanallar ro'yxatini olish
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
Log.d("Kanallar", "${channel.id}: ${channel.importance}")
}
// Joriy importance ni bilish (foydalanuvchi o'zgartirgan bo'lishi mumkin)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
// Foydalanuvchi kanalni o'chirgan
suggestEnablingChannel()
}
// Kanalni o'chirish
manager.deleteNotificationChannel(CHANNEL_PROMO)
Kanal yaratilgandan so'ng, dasturchi uning importance-ni dasturiy ravishda o'zgartira olmaydi — bu Android-ning foydalanuvchini suiiste'moldan himoya qilish cheklovidir. Agar kanalning muhimligini o'zgartirish kerak bo'lsa, boshqa ID bilan yangi kanal yarating va bildirishnomalarni ko'chiring.
Agar mavjud kanalning muhimligini o'zgartirish talab etilsa, boshqa ID bilan (masalan, “messages_v2”) yangi kanal yarating va unga bildirishnomalar yuborishni boshlang. Eski kanalni deleteNotificationChannel orqali o'chirish mumkin — uning barcha bildirishnomalari tarixdan o'chiriladi. Foydalanuvchini migratsiya haqida ilova interfeysi orqali ogohlantiring, shunda u sozlamalarini yo'qotmasin.
NotificationChannelGroup bir nechta kanallarni Android sozlamalar interfeysida bitta vizual guruhga birlashtiradi. Guruhlar ilova 5+ kanaldan foydalanganda foydalanuvchiga yo'nalishni topishga yordam beradi: masalan, “Ijtimoiy”, “Tizim”, “Marketing”.
Guruh createNotificationChannelGroup orqali yaratiladi va setGroup metodi orqali kanalga uzatiladi. Guruhni o'chirish uning barcha kanallarini ham o'chiradi. Har bir kanal faqat bitta guruhga tegishli bo'lishi mumkin.
Amalda, kanal guruhlari 3 dan ortiq kanalga ega ilovalar uchun tavsiya etiladi. Ular sozlamalarda navigatsiyani soddalashtiradi va foydalanuvchining kanallar ro'yxatini tushunmay turib barcha bildirishnomalarni birdan o'chirib qo'yish ehtimolini kamaytiradi.
Guruh noyob ID va nom bilan createNotificationChannelGroup orqali yaratiladi. Keyin har bir kanal setGroup metodi orqali guruhga bog'lanadi. Tizim sozlamalarida guruh sarlavhali bo'lim sifatida ko'rsatiladi, uning ostida ushbu guruhning barcha kanallari joylashgan. Agar guruh o'chirilsa, uning barcha kanallari ham tizim tomonidan avtomatik ravishda tiklanmasdan o'chiriladi.
Bildirishnoma kanallarining to'g'ri loyihalanishi foydalanuvchi tajribasi va saqlab qolishga bevosita ta'sir qiladi. Asosiy namuna — uch muhimlik darajasi: xabarlar va qo'ng'iroqlar uchun muhim kanal (IMPORTANCE_HIGH), umumiy bildirishnomalar uchun standart (IMPORTANCE_DEFAULT) va marketing va yangiliklar uchun sokin (IMPORTANCE_LOW). Bunday gradatsiya foydalanuvchiga ortiqcha yuklamasdan tushunarli tanlov beradi.
Ikkinchi namuna — funksional modul bo'yicha kanal. Ilovaning har bir katta moduli (chat, buyurtmalar, lent, marketing) o'z kanalini oladi. Agar modullar 5 dan ko'p bo'lsa, ularni NotificationChannelGroup da birlashtiring. Tizim sozlamalarida guruh yashiriladigan elementlarga ega bo'lim sifatida ko'rsatiladi — bu navigatsiyani soddalashtiradi.
Uchinchi namuna — dasturchi uchun kanal. Nosozliklarni tuzatish va xizmat bildirishnomalari uchun IMPORTANCE_MIN bilan alohida kanal yarating. Foydalanuvchilar ularni pardada ko'rmaydilar, ammo dasturchi adb orqali jurnallarni tahlil qilishi mumkin. Ishlab chiqarishda bu kanal o'chirilishi yoki sozlamalardagi Intent orqali interfeysdan yashirilishi mumkin.
To'rtinchi namuna — kanallar haqida qayta aloqa. Foydalanuvchiga interfeysda qaysi kanallar faol va ularning joriy importance darajasi qanday ekanligini ko'rsating. Android 8+ da kanal holatini getNotificationChannel orqali olish va agar kanal o'chirilgan bo'lsa, foydalanuvchiga sozlamalarni o'zgartirishni taklif qilish mumkin. Bu, ayniqsa, ilovaning muhim funksiyalari uchun muhimdir.
Ko'p beriladigan savollar
Bildirishnoma ko'rsatilmaydi na pardada, na soyada. Tizim notify() chaqiruvini indamay e'tiborsiz qoldiradi. Istisnolar: NotificationCompat dan foydalanganda kutubxona standart kanal yaratadi, ammo uning importance har doim DEFAULT bo'ladi. Har doim o'z kanallaringizni yaratish tavsiya etiladi.
Kanalning nomini, tavsifini va ovozini o'zgartirish mumkin. Importance ni o'zgartirish mumkin emas — bu qaror dasturchidan tizim tomonidan himoyalangan. Agar muhimlikni oshirish kerak bo'lsa — boshqa ID bilan yangi kanal yarating va uni yangi bildirishnomalar uchun ishlating. Foydalanuvchi importance-ni istalgan vaqtda o'zgartirishi mumkin.
getNotificationChannel dan foydalaning va importance-ni tekshiring: agar qiymat IMPORTANCE_NONE bo'lsa, kanal o'chirilgan. Shuningdek, kanalning tizim sozlamalarini Intent orqali ochishingiz mumkin: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS app_package va channel_id parametrlari bilan.
Hech qanday cheklov yo'q — Android kanallar soniga limit qo'ymaydi. Biroq, foydalanuvchini tanlov bilan ortiqcha yuklamaslik uchun 5–10 dan ortiq kanal yaratmaslik tavsiya etiladi. Eng maqbul minimum 2–3 kanal: muhim bildirishnomalar, oddiy bildirishnomalar va marketing.
Android 7.1 (API 25) va undan eski versiyalarda kanallar qo'llab-quvvatlanmaydi. NotificationChannel sinfi faqat API 26 dan boshlab mavjud. Orqaga moslik uchun NotificationCompat dan foydalaning va kanal yaratishni if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) shartiga o'rab qo'ying.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.