Notification Permission — ez az engedély, amelyre az alkalmazásnak szüksége van push értesítések és helyi értesítések küldéséhez a felhasználó számára. Az Android 13 és iOS 12 rendszerektől kezdve az alkalmazások kötelesek ezt az engedélyt futási időben kérni egy rendszerpárbeszédablakon keresztül. A Android Developers, 2024 szerint a felhasználó kifejezett hozzájárulása nélkül az alkalmazás nem jeleníthet meg értesítéseket az Android 13 és újabb rendszerű eszközökön.
Főbb pontok
Notification Permission — ez egy rendszerengedély, amely szabályozza az alkalmazás azon képességét, hogy értesítéseket küldjön a felhasználónak. Android 13-ig minden alkalmazás kérés nélkül jeleníthetett meg értesítéseket — elég volt deklarálni az engedélyt a manifestben. Azonban a spam és a tolakodó értesítések növekedésével a Google kötelező futási idejű kérést vezetett be, hasonlóan az iOS-hez.
Az iOS rendszeren az értesítési engedély kötelező volt iOS 8 óta, és iOS 12-től kezdve megjelentek az ideiglenes (provisional) értesítések — csendes értesítések, amelyek hang nélkül érkeznek és az Értesítési Központban jelennek meg kifejezett kérés nélkül. Az ideiglenes értesítések lehetővé teszik a fejlesztő számára, hogy megmutassa az értesítések értékét a felhasználónak a teljes engedély kérése előtt.
A Localytics (2024) szerint az iOS felhasználók 61%-a és az Android felhasználók 55%-a beleegyezik a push értesítések fogadásába a kérés után. A hozzájárulási arány közvetlenül függ a kérés kontextusától: azok az alkalmazások, amelyek az első értékes interakció után kérik az engedélyt, 40%-kal több beleegyezést kapnak, mint azok, amelyek az első indításkor kérik.
Az értesítési engedélyek fejlődése megmutatja, hogyan korlátozták a platformok fokozatosan az alkalmazások hozzáférését ehhez a kommunikációs csatornához. Ennek a fejlődésnek a megértése segíti a fejlesztőt a különböző operációs rendszer verziók helyes kezelésében.
Android 13-ig (2022) bármely alkalmazás megjeleníthetett értesítéseket a felhasználó hozzájárulása nélkül. Az Android 8.0 (2017) bevezette az értesítési csatornákat, az Android 12 (2021) hozzáadta a tolakodó értesítések automatikus blokkolását, és végül az Android 13 kötelezővé tette a POST_NOTIFICATIONS futási idejű kérését. Azon alkalmazások számára, amelyek targetSdkVersion-je 33 alatt van, a rendszer automatikusan megadja az engedélyt, de a Google Play 2023 augusztusától megköveteli a targetSdkVersion 33+ verzióra történő frissítését.
Az iOS 8 (2014) bevezette a kötelező engedélykérést az UIUserNotificationSettings-en keresztül. Az iOS 10 (2016) bemutatta az UNUserNotificationCenter-et gazdag értesítések támogatásával. Az iOS 12 (2018) hozzáadta az ideiglenes értesítéseket és a csoportosított értesítéseket. Az iOS 15 (2021) bevezette a Focus Mode-ot, amely az alkalmazás engedélyétől függetlenül blokkolhatja az értesítéseket. Az App Tracking Transparency (iOS 14.5) nem kapcsolódik az értesítésekhez, de szintén befolyásolta az engedélykérési kultúrát.
Jelenleg mindkét platform megköveteli a Notification Permission futási idejű kérését. A fejlesztő már nem támaszkodhat az értesítések automatikus bekapcsolására. A felhasználó teljes ellenőrzéssel rendelkezik afelől, hogy mely alkalmazások értesíthetik őt. Az Android értesítési csatornái és az iOS értesítési kategóriái lehetővé teszik a felhasználó számára a fogadott értesítések típusainak pontos beállítását.
Notification Permission Android rendszeren a manifestben deklarált POST_NOTIFICATIONS engedélyen keresztül valósul meg, futási idejű kéréssel Android 13+ esetén.
Android 13+ esetén deklarálnia kell a POST_NOTIFICATIONS engedélyt az AndroidManifest.xml fájlban. Az Android 12 és alacsonyabb verziókkal való visszafelé kompatibilitás érdekében az engedélyt a rendszer automatikusan megadja — nincs szükség további műveletekre.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
A POST_NOTIFICATIONS engedély kérése az Activity Result API-n keresztül történik. Fontos ellenőrizni az SDK verziót: Android 12 és alacsonyabb verziókon nincs szükség kérésre, az engedély automatikusan megadottnak tekintendő.
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 és alatta — engedély automatikusan megadva
showNotification()
return
}
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
showNotification()
} else {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
Android 8.0+ rendszeren az alkalmazásnak létre kell hoznia egy értesítési csatornát a NotificationChannel segítségével az első értesítés elküldése előtt. A csatorna fontossága (importance) IMPORTANCE_NONE-tól IMPORTANCE_HIGH-ig terjed, ami meghatározza, hogy az értesítés hanggal és bannerként jelenjen-e meg. Ha a felhasználó letiltotta az értesítéseket az alkalmazáshoz, az új csatornák nem lesznek hatással a beállításokban történő újra engedélyezésig. Javasolt külön csatornákat létrehozni a különböző típusú értesítésekhez: üzenetek, hirdetések, rendszeresemények.
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID_MESSAGES,
"Üzenetek",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Értesítések új üzenetekről"
enableVibration = true
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
Notification Permission iOS rendszeren az UNUserNotificationCenteren keresztül kérhető. Az Apple kétlépcsős megközelítést ajánl: először kérjen ideiglenes értesítéseket, majd az érték bemutatása után teljes engedélyt.
Az ideiglenes értesítések csendes értesítések, amelyek hang és banner nélkül érkeznek az Értesítési Központba. Nem igényelnek kifejezett felhasználói hozzájárulást, és lehetővé teszik az alkalmazás számára, hogy megmutassa az értesítések értékét a teljes kérés előtt. Több ideiglenes értesítés fogadása után a felhasználó bekapcsolhatja a teljes értesítéseket az értesítésben található menün keresztül.
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 — a felhasználó nem látja a párbeszédablakot
// Az értesítések hang nélkül érkeznek az Értesítési Központba
registerForRemoteNotifications()
}
}
A Notification Permission aktuális státusza iOS rendszeren a UNUserNotificationCenter.current().getNotificationSettings segítségével kérdezhető le. Az .authorized, .denied, .provisional vagy .notDetermined státuszok lehetővé teszik az alkalmazás számára a megfelelő viselkedés kiválasztását. Az első elutasítás után a rendszerpárbeszédablak nem jelenik meg újra — át kell irányítani a felhasználót a Beállításokba az UIApplication.openSettingsURLString segítségével. Az Apple azt is ajánlja, hogy kezelje a .ephemeral (iOS 17+) státuszt, amely ideiglenes értesítéseket biztosít bizonyos forgatókönyvekhez.
Legjobb gyakorlatok a Notification Permission kéréséhez célja a hozzájárulási arány növelése és a felhasználói lemorzsolódás csökkentése. A helytelen kérés nem csak megfoszthatja az alkalmazást az értesítések küldésének lehetőségétől, hanem az alkalmazás eltávolításához is vezethet.
A leggyakoribb anti-minta — a Notification Permission kérése az alkalmazás első indításakor. A felhasználó még nem érti az alkalmazás értékét, és nagy valószínűséggel elutasítja. Az optimális pillanat — miután a felhasználó végrehajtotta az első célzott műveletet: megrendelést adott le, üzenetet küldött, feliratkozott a frissítésekre. Az érték utáni kérés 65-75%-ra növeli a hozzájárulási arányt.
A rendszer párbeszédablak előtt jelenítse meg saját képernyőjét a kapott értesítések példáival. Mutassa meg a jövőbeli értesítés makettjét szöveggel és ikonnal. Ha a felhasználó látja, hogy az értesítések hasznosak és nem tolakodóak lesznek, nagyobb valószínűséggel járul hozzá. Az értesítés példája az előzetes képernyőn egy hatékony technika, amely 35-50%-kal növeli a konverziót.
Az ideiglenes értesítések proaktív kérése iOS rendszeren lehetővé teszi az értesítések kézbesítését a felhasználó kifejezett hozzájárulása nélkül. Ha a felhasználó értéket lát ezekben az értesítésekben, bekapcsolhatja a teljes értesítéseket az értesítés helyi menüjén keresztül. Az Apple ajánlja ezt a megközelítést hír, időjárás és egyéb olyan szolgáltatások számára, ahol az értesítések informatívak, nem tranzakciósak. Az Apple WWDC 2024 szerint ez a megközelítés 20-30%-kal növeli a teljes hozzájárulási arányt.
Gyakran ismételt kérdések
Az elutasítás után a rendszer párbeszédablak nem jelenik meg újra. Az értesítések bekapcsolásának egyetlen módja a felhasználó átirányítása a rendszerbeállításokba: Androidon Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) vagy iOS-en UIApplication.openSettingsURLString segítségével. Jelenítsen meg egy képernyőt útmutatással és navigációs gombbal.
Android 12 és alacsonyabb verziókon a Notification Permission nem szükséges — minden alkalmazás kérés nélkül küldhet értesítéseket. Azonban a felhasználó bármikor letilthatja az értesítéseket a rendszerbeállításokon keresztül. Android 13-tól kezdve a futási idejű kérés kötelező a targetSdkVersion 33+ számára.
NotificationChannel — egy értesítési kategória, amelyet Android 8.0 vezetett be. Minden csatornának van neve, leírása, fontossága (importance) és csoportja. A felhasználó letilthatja az egyes csatornákat anélkül, hogy letiltaná az alkalmazás összes értesítését. Például az „Új üzenetek” és a „Reklámhírlevél” csatornák különbözően konfigurálhatók.
Android 13+ rendszeren POST_NOTIFICATIONS nélkül a NotificationManager.notify bármely hívását figyelmen kívül hagyja a rendszer. iOS rendszeren az UNUserNotificationCenter engedélye nélkül az értesítések nem kézbesíthetők. Kivétel: Provisional iOS-en (hang nélkül, csak az Értesítési Központban) és Android 12- (nem szükséges engedély).
Androidon használja a NotificationManagerCompat.areNotificationsEnabled() függvényt. iOS-en hívja meg az UNUserNotificationCenter.current().getNotificationSettings függvényt és ellenőrizze az authorizationStatus tulajdonságot. Androidon ellenőrizze továbbá a csatorna fontosságát: a NotificationChannel.getImportance() ne legyen IMPORTANCE_NONE.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is