Notification Permission — dit is de machtiging die een app nodig heeft om pushmeldingen en lokale meldingen naar de gebruiker te sturen. Vanaf Android 13 en iOS 12 zijn apps verplicht om deze machtiging tijdens runtime aan te vragen via een systeemdialoog. Volgens Android Developers, 2024 kan een app zonder expliciete toestemming van de gebruiker geen meldingen tonen op apparaten met Android 13 en hoger.
Belangrijkste punten
Notification Permission — dit is een systeemmachtiging die het vermogen van de app om meldingen naar de gebruiker te sturen regelt. Tot Android 13 konden alle apps meldingen tonen zonder aanvraag — het was voldoende om de machtiging in het manifest te declareren. Maar met de toename van spam en opdringerige meldingen voerde Google een verplichte runtime-aanvraag in, vergelijkbaar met iOS.
Op iOS was de meldingstoestemming verplicht vanaf iOS 8, en vanaf iOS 12 verschenen provisionele (provisional) meldingen — stille meldingen die zonder geluid worden afgeleverd en weergegeven in het Berichtencentrum zonder expliciete aanvraag. Provisionele meldingen stellen de ontwikkelaar in staat om de gebruiker de waarde van meldingen te laten zien voordat hij volledige toestemming vraagt.
Volgens Localytics (2024) gaat 61% van de iOS-gebruikers en 55% van de Android-gebruikers akkoord met het ontvangen van pushmeldingen na een aanvraag. Het conversiepercentage van toestemming hangt direct af van de context van de aanvraag: apps die toestemming vragen na de eerste waardevolle interactie krijgen 40% meer toestemmingen dan apps die bij de eerste keer opstarten vragen.
Evolutie van meldingstoestemmingen laat zien hoe platforms geleidelijk de toegang van apps tot dit communicatiekanaal hebben beperkt. Inzicht in deze evolutie helpt de ontwikkelaar om verschillende versies van het besturingssysteem correct te behandelen.
Tot Android 13 (2022) kon elke app meldingen tonen zonder toestemming van de gebruiker. Android 8.0 (2017) introduceerde meldingskanalen, Android 12 (2021) voegde automatische blokkering van opdringerige meldingen toe, en uiteindelijk maakte Android 13 het verplicht om POST_NOTIFICATIONS tijdens runtime aan te vragen. Voor apps met een targetSdkVersion lager dan 33 verleent het systeem automatisch toestemming, maar Google Play vereist sinds augustus 2023 een update van targetSdkVersion naar 33+.
iOS 8 (2014) introduceerde de verplichte toestemmingsaanvraag via UIUserNotificationSettings. iOS 10 (2016) introduceerde UNUserNotificationCenter met ondersteuning voor rijke meldingen. iOS 12 (2018) voegde provisionele meldingen en gegroepeerde meldingen toe. iOS 15 (2021) introduceerde Focus Mode, die meldingen kan blokkeren ongeacht de app-machtiging. App Tracking Transparency (iOS 14.5) is niet gerelateerd aan meldingen, maar heeft ook de algemene cultuur van toestemmingsaanvragen beïnvloed.
Momenteel vereisen beide platforms een runtime-aanvraag van Notification Permission. De ontwikkelaar kan niet langer vertrouwen op automatische inschakeling van meldingen. De gebruiker heeft volledige controle over welke apps hem kunnen notificeren. Meldingskanalen op Android en meldingscategorieën op iOS stellen de gebruiker in staat om de typen ontvangen meldingen nauwkeurig af te stemmen.
Notification Permission op Android wordt gerealiseerd via de machtiging POST_NOTIFICATIONS, gedeclareerd in het manifest, met een runtime-aanvraag voor Android 13+.
Voor Android 13+ moet u de machtiging POST_NOTIFICATIONS declareren in AndroidManifest.xml. Voor achterwaartse compatibiliteit met Android 12 en lager wordt de machtiging automatisch door het systeem verleend — er zijn geen aanvullende acties nodig.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
De aanvraag van de machtiging POST_NOTIFICATIONS wordt uitgevoerd via de Activity Result API. Het is belangrijk om de SDK-versie te controleren: op Android 12 en lager is geen aanvraag nodig, de machtiging wordt als automatisch verleend beschouwd.
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 en lager — machtiging automatisch verleend
showNotification()
return
}
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
showNotification()
} else {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
Op Android 8.0+ moet de app een meldingskanaal aanmaken via NotificationChannel voordat de eerste melding wordt verzonden. Het kanaal heeft een belangrijkheid (importance) van IMPORTANCE_NONE tot IMPORTANCE_HIGH, die bepaalt of de melding met geluid en als banner wordt weergegeven. Als de gebruiker meldingen voor de app heeft uitgeschakeld, hebben nieuwe kanalen geen effect tot ze opnieuw worden ingeschakeld in de instellingen. Het wordt aanbevolen om aparte kanalen aan te maken voor verschillende soorten meldingen: berichten, advertenties, systeemgebeurtenissen.
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID_MESSAGES,
"Berichten",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Meldingen over nieuwe berichten"
enableVibration = true
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
Notification Permission op iOS wordt aangevraagd via UNUserNotificationCenter. Apple beveelt een tweestapsbenadering aan: vraag eerst provisionele meldingen aan en daarna, na het tonen van de waarde, volledige toestemming.
Provisionele meldingen zijn stille meldingen die in het Berichtencentrum terechtkomen zonder geluid of banner. Ze vereisen geen expliciete toestemming van de gebruiker en stellen de app in staat om de waarde van meldingen te tonen voordat volledige toestemming wordt gevraagd. Na het ontvangen van enkele provisionele meldingen kan de gebruiker volledige meldingen inschakelen via het menu in de melding zelf.
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 — gebruiker ziet de dialoog niet
// Meldingen komen zonder geluid in het Meldingencentrum
registerForRemoteNotifications()
}
}
De huidige status van Notification Permission op iOS kan worden verkregen via UNUserNotificationCenter.current().getNotificationSettings. De statussen .authorized, .denied, .provisional of .notDetermined stellen de app in staat om het juiste gedrag te kiezen. Na de eerste weigering wordt de systeemdialoog niet opnieuw getoond — u moet de gebruiker doorverwijzen naar Instellingen via UIApplication.openSettingsURLString. Apple raadt ook aan om de status .ephemeral (iOS 17+) te behandelen, die tijdelijke meldingen biedt voor bepaalde scenario’s.
Beste praktijken voor het aanvragen van Notification Permission zijn gericht op het verhogen van het conversiepercentage van toestemming en het verminderen van gebruikersverloop. Een onjuiste aanvraag kan de app niet alleen het vermogen ontnemen om meldingen te sturen, maar ook leiden tot verwijdering van de app.
Het meest voorkomende antipatroon — het aanvragen van Notification Permission bij de eerste keer opstarten van de app. De gebruiker begrijpt de waarde van de app nog niet en zal met grote waarschijnlijkheid weigeren. Het optimale moment — nadat de gebruiker de eerste doelactie heeft uitgevoerd: een bestelling geplaatst, een bericht verzonden, geabonneerd op updates. Post-value prompt verhoogt het conversiepercentage van toestemming tot 65-75%.
Toon voor de systeemdialoog een eigen scherm met voorbeelden van meldingen die de gebruiker zal ontvangen. Toon een mock-up van de toekomstige melding met tekst en pictogram. Als de gebruiker ziet dat meldingen nuttig en niet-opdringerig zullen zijn, is de kans groter dat hij akkoord gaat. Een voorbeeldmelding op het voorlopige scherm is een effectieve techniek die de conversie met 35-50% verhoogt.
Het proactief aanvragen van provisionele meldingen op iOS maakt het mogelijk om meldingen te bezorgen zonder expliciete toestemming van de gebruiker. Als de gebruiker waarde ziet in deze meldingen, kan hij volledige meldingen inschakelen via het contextmenu van de melding. Apple beveelt deze benadering aan voor nieuwsapps, weerapps en andere diensten waar meldingen informatief zijn in plaats van transactioneel. Volgens Apple WWDC 2024 verhoogt deze benadering het conversiepercentage van volledige toestemming met 20-30%.
Veelgestelde vragen
Na weigering wordt de systeemdialoog niet opnieuw getoond. De enige manier om meldingen in te schakelen is door de gebruiker door te verwijzen naar de systeeminstellingen via Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) op Android of UIApplication.openSettingsURLString op iOS. Toon een scherm met instructies en een knop om te navigeren.
Op Android 12 en lager is Notification Permission niet vereist — alle apps kunnen meldingen sturen zonder aanvraag. De gebruiker kan meldingen echter op elk moment uitschakelen via de systeeminstellingen. Vanaf Android 13 is een runtime-aanvraag verplicht voor targetSdkVersion 33+.
NotificationChannel — is een meldingscategorie die is geïntroduceerd in Android 8.0. Elk kanaal heeft een naam, beschrijving, belangrijkheid (importance) en een groep. De gebruiker kan afzonderlijke kanalen uitschakelen zonder alle meldingen van de app uit te schakelen. Zo kunnen het kanaal „Nieuwe berichten” en het kanaal „Reclamenieuwsbrief” verschillend worden geconfigureerd.
Op Android 13+ zonder POST_NOTIFICATIONS wordt elke aanroep van NotificationManager.notify door het systeem genegeerd. Op iOS worden meldingen zonder UNUserNotificationCenter-toestemming niet bezorgd. Uitzondering: Provisional op iOS (zonder geluid, alleen in het Berichtencentrum) en Android 12- (geen toestemming vereist).
Gebruik op Android NotificationManagerCompat.areNotificationsEnabled(). Roep op iOS UNUserNotificationCenter.current().getNotificationSettings aan en controleer de eigenschap authorizationStatus. Controleer voor Android ook het belang van het kanaal: NotificationChannel.getImportance() mag niet IMPORTANCE_NONE zijn.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook