Notification Permission — ово је дозвола потребна апликацији за слање пусх обавештења и локалних обавештења кориснику. Почевши од Android 13 и iOS 12, апликације су обавезне да затраже ову дозволу у време извршења кроз системски дијалог. Према Android Developers, 2024, без изричите сагласности корисника, апликација не може приказивати обавештења на уређајима са Android 13 и новијим.
Главне ствари
Notification Permission — ово је системска дозвола која регулише могућност апликације да шаље обавештења кориснику. До Android 13, све апликације су могле приказивати обавештења без захтева — било је довољно да декларишу дозволу у манифесту. Међутим, са порастом спама и наметљивих обавештења, Google је увео обавезни захтев у време извршења, слично iOS-у.
На iOS-у, дозвола за обавештења је била обавезна од iOS 8, а почевши од iOS 12 појавила су се привремена обавештења (provisional) — тиха обавештења која се достављају без звука и приказују у Центру за обавештења без изричитог захтева. Привремена обавештења омогућавају програмеру да покаже кориснику вредност обавештења пре него што затражи пуну дозволу.
Према Localytics (2024), 61% корисника iOS-а и 55% корисника Android-а пристаје на примање пусх обавештења након захтева. Стопа конверзије сагласности директно зависи од контекста захтева: апликације које траже дозволу након прве вредне интеракције добијају 40% више сагласности од оних које траже при првом покретању.
Еволуција дозвола за обавештења показује како су платформе постепено ограничавале приступ апликација овом комуникационом каналу. Разумевање ове еволуције помаже програмеру да правилно рукује различитим верзијама оперативног система.
До Android 13 (2022), свака апликација је могла приказивати обавештења без сагласности корисника. Android 8.0 (2017) је увео канале обавештења, Android 12 (2021) је додао аутоматско блокирање наметљивих обавештења, и коначно Android 13 је обавезао захтев POST_NOTIFICATIONS у време извршења. За апликације чији је targetSdkVersion испод 33, систем аутоматски одобрава дозволу, али Google Play захтева ажурирање targetSdkVersion на 33+ од августа 2023. године.
iOS 8 (2014) је увео обавезни захтев дозволе кроз UIUserNotificationSettings. iOS 10 (2016) је представио UNUserNotificationCenter са подршком за богата обавештења. iOS 12 (2018) је додао привремена обавештења и груписана обавештења. iOS 15 (2021) је увео Focus Mode, који може блокирати обавештења независно од дозволе апликације. App Tracking Transparency (iOS 14.5) није повезан са обавештењима, али је такође утицао на општу културу захтева за дозволе.
Тренутно обе платформе захтевају захтев Notification Permission у време извршења. Програмер више не може да се ослања на аутоматско укључивање обавештења. Корисник има потпуну контролу над тим које апликације могу да га обавештавају. Канали обавештења на Android-у и категорије обавештења на iOS-у омогућавају кориснику да прецизно подеси типове примљених обавештења.
Notification Permission на Android-у се остварује кроз дозволу POST_NOTIFICATIONS, декларисану у манифесту, са захтевом у време извршења за Android 13+.
За Android 13+ потребно је декларисати дозволу POST_NOTIFICATIONS у AndroidManifest.xml. За уназад компатибилност са Android 12 и нижим, дозвола се аутоматски одобрава од стране система — нису потребне додатне радње.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
Захтев дозволе POST_NOTIFICATIONS се извршава кроз Activity Result API. Важно је проверити верзију SDK-а: на Android 12 и нижим, захтев није потребан, дозвола се сматра аутоматски одобреном.
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 и ниже — дозвола је аутоматски одобрена
showNotification()
return
}
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
showNotification()
} else {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
На Android 8.0+, апликација мора креирати канал обавештења кроз NotificationChannel пре слања првог обавештења. Канал има важност (importance) од IMPORTANCE_NONE до IMPORTANCE_HIGH, која одређује да ли ће обавештење бити приказано са звуком и као банер. Ако је корисник искључио обавештења за апликацију, нови канали неће имати ефекта до поновног укључивања у подешавањима. Препоручује се креирање посебних канала за различите типове обавештења: поруке, рекламе, системски догађаји.
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID_MESSAGES,
"Поруке",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Обавештења о новим порукама"
enableVibration = true
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
Notification Permission на iOS-у се захтева кроз UNUserNotificationCenter. Apple препоручује двокорачни приступ: прво затражите привремена обавештења, затим, након демонстрације вредности, пуну дозволу.
Привремена обавештења су тиха обавештења која стижу у Центар за обавештења без звука и банера. Она не захтевају изричиту сагласност корисника и омогућавају апликацији да покаже вредност обавештења пре пуног захтева. Након пријема неколико привремених обавештења, корисник може укључити пуна обавештења кроз мени у самом обавештењу.
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 — корисник не види дијалог
// Обавештења стижу без звука у Центар за обавештења
registerForRemoteNotifications()
}
}
Тренутни статус Notification Permission на iOS-у може се добити кроз UNUserNotificationCenter.current().getNotificationSettings. Статуси .authorized, .denied, .provisional или .notDetermined омогућавају апликацији да изабере одговарајуће понашање. Након првог одбијања, системски дијалог се не приказује поново — потребно је преусмерити корисника у Подешавања кроз UIApplication.openSettingsURLString. Apple такође препоручује руковање статусом .ephemeral (iOS 17+), који обезбеђује привремена обавештења за одређене сценарије.
Најбоље праксе захтева Notification Permission имају за циљ повећање стопе конверзије сагласности и смањење одлива корисника. Неправилан захтев може не само да лиши апликацију могућности слања обавештења, већ и довести до уклањања апликације.
Најчешћи анти-образац — захтев Notification Permission при првом покретању апликације. Корисник још не разуме вредност апликације и са великом вероватноћом ће одбити. Оптимални тренутак — након што је корисник извршио прву циљану радњу: наручио, послао поруку, претплатио се на ажурирања. Захтев након вредности повећава стопу конверзије сагласности на 65-75%.
Пре системског дијалога, прикажите сопствени екран са примерима обавештења која ће корисник добијати. Прикажите макету будућег обавештења са текстом и иконом. Ако корисник види да ће обавештења бити корисна и ненаметљива, већа је вероватноћа да ће пристати. Пример обавештења на прелиминарном екрану је ефикасна техника која повећава конверзију за 35-50%.
Проактивни захтев привремених обавештења на iOS-у омогућава достављање обавештења без изричите сагласности корисника. Ако корисник види вредност у овим обавештењима, може укључити пуна обавештења кроз контекстни мени обавештења. Apple препоручује овај приступ за вести, временске прогнозе и друге услуге где су обавештења информативна, а не трансакциона. Према Apple WWDC 2024, овај приступ повећава стопу конверзије пуне сагласности за 20-30%.
Често постављана питања
Након одбијања, системски дијалог се не приказује поново. Једини начин да се укључе обавештења је преусмеравање корисника у системска подешавања кроз Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) на Android-у или UIApplication.openSettingsURLString на iOS-у. Прикажите екран са упутством и дугметом за прелазак.
На Android 12 и нижим, Notification Permission није потребна — све апликације могу слати обавештења без захтева. Међутим, корисник може искључити обавештења у било ком тренутку кроз системска подешавања. Почевши од Android 13, захтев у време извршења је обавезан за targetSdkVersion 33+.
NotificationChannel — категорија обавештења уведена у Android 8.0. Сваки канал има назив, опис, важност (importance) и групу. Корисник може искључити појединачне канале без искључивања свих обавештења апликације. На пример, канал „Нове поруке” и канал „Рекламни билтен” могу се подесити различито.
На Android 13+ без POST_NOTIFICATIONS, сваки позив NotificationManager.notify ће бити игнорисан од стране система. На iOS-у без дозволе UNUserNotificationCenter, обавештења се не достављају. Изузетак: Provisional на iOS-у (без звука, само у Центру за обавештења) и Android 12- (дозвола није потребна).
На Android-у користите NotificationManagerCompat.areNotificationsEnabled(). На iOS-у позовите UNUserNotificationCenter.current().getNotificationSettings и проверите својство authorizationStatus. За Android додатно проверите важност канала: NotificationChannel.getImportance() не сме бити IMPORTANCE_NONE.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође