Notification Permission — bu ilovaga foydalanuvchiga push-bildirishnomalar va mahalliy bildirishnomalarni yuborish uchun zarur bo‘lgan ruxsatdir. Android 13 va iOS 12 dan boshlab, ilovalar ushbu ruxsatni ish vaqtida tizim dialogi orqali so‘rashi shart. Android Developers, 2024 ma’lumotlariga ko‘ra, foydalanuvchining aniq roziligisiz ilova Android 13 va undan yuqori qurilmalarda bildirishnomalarni ko‘rsata olmaydi.
Asosiy narsalar
Notification Permission — bu ilovaning foydalanuvchiga bildirishnomalar yuborish qobiliyatini tartibga soluvchi tizim ruxsatidir. Android 13 gacha barcha ilovalar so‘rovsiz bildirishnomalarni ko‘rsata olardi — ruxsatni manifestda e’lon qilish kifoya edi. Ammo spam va bezovta qiluvchi bildirishnomalarning ko‘payishi bilan Google iOS dagi kabi majburiy ish vaqti so‘rovini joriy qildi.
iOS da bildirishnoma ruxsati iOS 8 dan majburiy edi va iOS 12 dan boshlab vaqtinchalik (provisional) bildirishnomalar paydo bo‘ldi — ovozsiz yetkaziladigan va aniq so‘rovsiz Bildirishnomalar Markazida ko‘rsatiladigan bildirishnomalar. Vaqtinchalik bildirishnomalar dasturchiga to‘liq ruxsatni so‘rashdan oldin foydalanuvchiga bildirishnomalarning qiymatini ko‘rsatishga imkon beradi.
Localytics (2024) ma’lumotlariga ko‘ra, iOS foydalanuvchilarining 61% va Android foydalanuvchilarining 55% so‘rovdan so‘ng push bildirishnomalarini qabul qiladi. Rozilik konversiyasi bevosita so‘rov kontekstiga bog‘liq: birinchi qimmatli o‘zaro aloqadan so‘ng ruxsat so‘raydigan ilovalar birinchi ishga tushirishda so‘raydiganlarga qaraganda 40% ko‘proq rozilik oladi.
Bildirishnoma ruxsatlarining evolyutsiyasi platformalar ilovalarning ushbu aloqa kanaliga kirishini bosqichma-bosqich qanday cheklaganligini ko‘rsatadi. Ushbu evolyutsiyani tushunish dasturchiga operatsion tizimning turli versiyalarini to‘g‘ri boshqarishga yordam beradi.
Android 13 (2022) gacha har qanday ilova foydalanuvchining roziligisiz bildirishnomalarni ko‘rsata olardi. Android 8.0 (2017) bildirishnoma kanallarini joriy qildi, Android 12 (2021) bezovta qiluvchi bildirishnomalarni avtomatik bloklashni qo‘shdi va nihoyat Android 13 ish vaqtida POST_NOTIFICATIONS so‘rashni majburiy qildi. targetSdkVersion 33 dan past bo‘lgan ilovalar uchun tizim avtomatik ravishda ruxsat beradi, ammo Google Play 2023 yil avgustidan boshlab targetSdkVersion ni 33+ ga yangilashni talab qiladi.
iOS 8 (2014) UIUserNotificationSettings orqali majburiy ruxsat so‘rovini joriy qildi. iOS 10 (2016) boy bildirishnomalarni qo‘llab-quvvatlovchi UNUserNotificationCenter ni taqdim etdi. iOS 12 (2018) vaqtinchalik bildirishnomalar va guruhlangan bildirishnomalarni qo‘shdi. iOS 15 (2021) ilova ruxsatidan qat’i nazar bildirishnomalarni bloklashi mumkin bo‘lgan Focus Mode ni joriy qildi. App Tracking Transparency (iOS 14.5) bildirishnomalar bilan bog‘liq emas, ammo ruxsat so‘rash madaniyatiga ta’sir ko‘rsatdi.
Hozirda ikkala platforma ham Notification Permission ni ish vaqtida so‘rashni talab qiladi. Dasturchi endi bildirishnomalarning avtomatik yoqilishiga tayanishi mumkin emas. Foydalanuvchi qaysi ilovalar uni xabardor qilishi mumkinligini to‘liq nazorat qiladi. Android dagi Notification kanallari va iOS dagi bildirishnoma kategoriyalari foydalanuvchiga olingan bildirishnoma turlarini nozik sozlash imkonini beradi.
Android-da Notification Permission manifestda e’lon qilingan POST_NOTIFICATIONS ruxsati orqali amalga oshiriladi va Android 13+ uchun ish vaqti so‘rovi bilan to‘ldiriladi.
Android 13+ uchun AndroidManifest.xml da POST_NOTIFICATIONS ruxsatini e’lon qilish kerak. Android 12 va undan past bilan orqaga qarab muvofiqlik uchun ruxsat tizim tomonidan avtomatik ravishda beriladi — qo‘shimcha harakatlar talab qilinmaydi.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
POST_NOTIFICATIONS ruxsati so‘rovi Activity Result API orqali amalga oshiriladi. SDK versiyasini tekshirish muhim: Android 12 va undan pastda so‘rov talab qilinmaydi, ruxsat avtomatik ravishda berilgan deb hisoblanadi.
private val notificationPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
createNotificationChannel()
showPushNotification()
} else {
logPermissionDenied()
}
}
fun requestNotificationAccess() {
if (Build.version.SDK_INT <= Build.VERSION_CODES.S_V2) {
// Android 12 va undan past — ruxsat avtomatik beriladi
showNotification()
return
}
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
showNotification()
} else {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
Android 8.0+ da ilova birinchi bildirishnomani yuborishdan oldin NotificationChannel orqali bildirishnoma kanalini yaratishi kerak. Kanal IMPORTANCE_NONE dan IMPORTANCE_HIGH gacha bo‘lgan ahamiyatga (importance) ega bo‘lib, u bildirishnomaning ovoz bilan va banner sifatida ko‘rsatilishini aniqlaydi. Agar foydalanuvchi ilova uchun bildirishnomalarni o‘chirgan bo‘lsa, yangi kanallar sozlamalarda qayta yoqilgunga qadar ta’sir qilmaydi. Har xil turdagi bildirishnomalar uchun alohida kanallar yaratish tavsiya etiladi: xabarlar, reklama, tizim hodisalari.
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID_MESSAGES,
"Xabarlar",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Yangi xabarlar haqida bildirishnomalar"
enableVibration = true
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
iOS-da Notification Permission UNUserNotificationCenter orqali so‘raladi. Apple ikki bosqichli yondashuvni tavsiya qiladi: avval vaqtinchalik bildirishnomalarni so‘rang, so‘ngra qiymatni ko‘rsatgandan keyin to‘liq ruxsatni so‘rang.
Vaqtinchalik bildirishnomalar — ovoz va bannersiz Bildirishnomalar Markaziga keladigan ovozsiz bildirishnomalardir. Ular foydalanuvchining aniq roziligini talab qilmaydi va ilovaga to‘liq so‘rovdan oldin bildirishnomalarning qiymatini ko‘rsatishga imkon beradi. Bir nechta vaqtinchalik bildirishnomalarni olgandan so‘ng, foydalanuvchi bildirishnomaning o‘zidagi menyu orqali to‘liq bildirishnomalarni yoqishi mumkin.
import UserNotifications
func requestNotificationPermission() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
if let error = error {
print("Notification error: \(error.localizedDescription)")
return
}
if granted {
registerForRemoteNotifications()
} else {
handleDeniedPermission()
}
}
}
func requestProvisionalOnly() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.provisional, .alert, .badge, .sound]) { granted, error in
// Provisional — foydalanuvchi dialogni ko'rmaydi
// Bildirishnomalar Bildirishnomalar Markaziga ovozsiz keladi
registerForRemoteNotifications()
}
}
iOS da Notification Permission ning joriy holatini UNUserNotificationCenter.current().getNotificationSettings orqali olish mumkin. .authorized, .denied, .provisional yoki .notDetermined holatlari ilovaga to‘g‘ri xatti-harakatni tanlash imkonini beradi. Birinchi rad etishdan so‘ng tizim dialogi qayta ko‘rsatilmaydi — foydalanuvchini UIApplication.openSettingsURLString orqali Sozlamalarga yo‘naltirish kerak. Apple shuningdek, ma’lum stsenariylar uchun vaqtinchalik bildirishnomalarni ta’minlaydigan .ephemeral (iOS 17+) holatini boshqarishni tavsiya qiladi.
Eng yaxshi amaliyotlar Notification Permission so‘rovinining rozilik konversiyasini oshirish va foydalanuvchi chiqib ketishini kamaytirishga qaratilgan. Noto‘g‘ri so‘rov nafaqat ilovani bildirishnomalar yuborish imkoniyatidan mahrum qilishi, balki ilovani o‘chirishga ham olib kelishi mumkin.
Eng keng tarqalgan anti-na’muna — birinchi ishga tushirishda Notification Permission so‘rash. Foydalanuvchi hali ilovaning qiymatini tushunmaydi va katta ehtimol bilan rad etadi. Optimal vaqt — foydalanuvchi birinchi maqsadli harakatni amalga oshirgandan so‘ng: buyurtma berdi, xabar yubordi, yangilanishlarga obuna bo‘ldi. Qiymatdan keyingi so‘rov rozilik konversiyasini 65-75% gacha oshiradi.
Tizim dialogidan oldin foydalanuvchi oladigan bildirishnomalar misollari bilan o‘z ekraningizni ko‘rsating. Matn va belgi bilan kelajakdagi bildirishnoma maketini ko‘rsating. Agar foydalanuvchi bildirishnomalar foydali va bezovta qilmaydigan bo‘lishini ko‘rsa, rozi bo‘lish ehtimoli yuqoriroq. Bildirishnoma namunasi oldindan ko‘rsatilgan ekranda konversiyani 35-50% ga oshiradigan samarali texnikadir.
iOS da vaqtinchalik bildirishnomalarning proaktiv so‘rovi foydalanuvchining aniq roziligisiz bildirishnomalarni yetkazish imkonini beradi. Agar foydalanuvchi ushbu bildirishnomalarda qiymat ko‘rsa, bildirishnomaning kontekst menyusi orqali to‘liq bildirishnomalarni yoqishi mumkin. Apple tavsiya qiladi bu yondashuvni yangiliklar, ob-havo va bildirishnomalar informativ bo‘lgan, ammo tranzaksion bo‘lmagan boshqa xizmatlar uchun. Apple WWDC 2024 ma’lumotlariga ko‘ra, bu yondashuv to‘liq rozilik konversiyasini 20-30% ga oshiradi.
Tez-tez so‘raladigan savollar
Rad etishdan so‘ng tizim dialogi qayta ko‘rsatilmaydi. Bildirishnomalarni yoqishning yagona usuli — foydalanuvchini tizim sozlamalariga yo‘naltirish: Android da Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) yoki iOS da UIApplication.openSettingsURLString orqali. Ko‘rsatma va o‘tish tugmasi bilan ekranni ko‘rsating.
Android 12 va undan pastda Notification Permission talab qilinmaydi — barcha ilovalar so‘rovsiz bildirishnomalar yuborishi mumkin. Biroq, foydalanuvchi istalgan vaqtda tizim sozlamalari orqali bildirishnomalarni o‘chirishi mumkin. Android 13 dan boshlab, ish vaqti so‘rovi targetSdkVersion 33+ uchun majburiy.
NotificationChannel — Android 8.0 da joriy qilingan bildirishnoma kategoriyasi. Har bir kanal nom, tavsif, ahamiyat (importance) va guruhga ega. Foydalanuvchi ilovaning barcha bildirishnomalarini o‘chirmasdan alohida kanallarni o‘chirishi mumkin. Masalan, „Yangi xabarlar” kanali va „Reklamalar” kanali turlicha sozlanishi mumkin.
Android 13+ da POST_NOTIFICATIONSsiz NotificationManager.notify ga har qanday qo‘ng‘iroq tizim tomonidan e’tiborga olinmaydi. iOS da UNUserNotificationCenter ruxsatisiz bildirishnomalar yetkazilmaydi. Istisno: iOS da Provisional (ovozsiz, faqat Bildirishnomalar Markazida) va Android 12- (ruxsat talab qilinmaydi).
Android da NotificationManagerCompat.areNotificationsEnabled() dan foydalaning. iOS da UNUserNotificationCenter.current().getNotificationSettings ni chaqiring va authorizationStatus xususiyatini tekshiring. Android uchun qo‘shimcha ravishda kanal ahamiyatini tekshiring: NotificationChannel.getImportance() IMPORTANCE_NONE bo‘lmasligi kerak.
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.