Notification Permission — detta är den behörighet som appen behöver för att skicka push-notiser och lokala notiser till användaren. Från och med Android 13 och iOS 12 är appar skyldiga att begära denna behörighet under körtid via en systemdialog. Enligt Android Developers, 2024 kan appen inte visa notiser på enheter med Android 13 och senare utan användarens uttryckliga samtycke.
Huvudpunkter
Notification Permission — detta är en systembehörighet som reglerar appens förmåga att skicka notiser till användaren. Fram till Android 13 kunde alla appar visa notiser utan begäran — det räckte med att deklarera behörigheten i manifestet. Men med ökningen av spam och störande notiser införde Google en obligatorisk körtidsbegäran, liknande iOS.
På iOS var notisbehörigheten obligatorisk från iOS 8, och från och med iOS 12 dök provisoriska (provisional) notiser upp — tysta notiser som levereras utan ljud och visas i Notifieringscentret utan uttrycklig begäran. Provisoriska notiser gör det möjligt för utvecklaren att visa användaren värdet av notiser innan de begär full behörighet.
Enligt Localytics (2024) samtycker 61% av iOS-användarna och 55% av Android-användarna till att ta emot push-notiser efter en begäran. Konverteringsgraden för samtycke beror direkt på sammanhanget för begäran: appar som begär behörighet efter första värdefulla interaktionen får 40% fler samtycken än de som begär vid första starten.
Utveckling av notisbehörigheter visar hur plattformar gradvis begränsade appars åtkomst till denna kommunikationskanal. Att förstå denna utveckling hjälper utvecklaren att korrekt hantera olika versioner av operativsystemet.
Fram till Android 13 (2022) kunde vilken app som helst visa notiser utan användarens samtycke. Android 8.0 (2017) införde notiskaaler, Android 12 (2021) lade till automatisk blockering av störande notiser, och slutligen gjorde Android 13 det obligatoriskt att begära POST_NOTIFICATIONS under körtid. För appar med targetSdkVersion under 33 ger systemet automatiskt behörighet, men Google Play kräver uppdatering av targetSdkVersion till 33+ från och med augusti 2023.
iOS 8 (2014) införde obligatorisk behörighetsbegäran via UIUserNotificationSettings. iOS 10 (2016) introducerade UNUserNotificationCenter med stöd för rika notiser. iOS 12 (2018) lade till provisoriska notiser och grupperade notiser. iOS 15 (2021) införde Focus Mode, som kan blockera notiser oavsett appens behörighet. App Tracking Transparency (iOS 14.5) är inte relaterat till notiser men påverkade även den allmänna kulturen för behörighetsbegäranden.
För närvarande kräver båda plattformarna begäran av Notification Permission under körtid. Utvecklaren kan inte längre förlita sig på automatisk aktivering av notiser. Användaren har full kontroll över vilka appar som kan meddela dem. Notiskaaler på Android och notiskategorier på iOS gör det möjligt för användaren att exakt justera vilka typer av notiser som tas emot.
Notification Permission på Android realiseras genom behörigheten POST_NOTIFICATIONS, deklarerad i manifestet, med körtidsbegäran för Android 13+.
För Android 13+ måste du deklarera behörigheten POST_NOTIFICATIONS i AndroidManifest.xml. För bakåtkompatibilitet med Android 12 och lägre ges behörigheten automatiskt av systemet — inga ytterligare åtgärder krävs.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
Begäran av behörigheten POST_NOTIFICATIONS utförs via Activity Result API. Det är viktigt att kontrollera SDK-versionen: på Android 12 och lägre krävs ingen begäran, behörigheten anses automatiskt beviljad.
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 och lägre — tillstånd ges automatiskt
showNotification()
return
}
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
showNotification()
} else {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
På Android 8.0+ måste appen skapa en notiskanal via NotificationChannel innan den första notisen skickas. Kanalen har en viktighet (importance) från IMPORTANCE_NONE till IMPORTANCE_HIGH, som avgör om notisen visas med ljud och som banner. Om användaren har inaktiverat notiser för appen kommer nya kanaler inte att ha någon effekt förrän de aktiveras igen i inställningarna. Det rekommenderas att skapa separata kanaler för olika typer av notiser: meddelanden, reklam, systemhändelser.
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID_MESSAGES,
"Meddelanden",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Aviseringar om nya meddelanden"
enableVibration = true
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
Notification Permission på iOS begärs via UNUserNotificationCenter. Apple rekommenderar en tvåstegsmetod: begär först provisoriska notiser, sedan efter att ha visat värdet, full behörighet.
Provisoriska notiser är tysta notiser som kommer till Notifieringscentret utan ljud och banner. De kräver inte användarens uttryckliga samtycke och gör det möjligt för appen att visa värdet av notiser innan full begäran. Efter att ha tagit emot flera provisoriska notiser kan användaren aktivera fulla notiser via menyn i själva notisen.
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 — användaren ser inte dialogen
// Aviseringar kommer utan ljud i Notifieringscenter
registerForRemoteNotifications()
}
}
Den aktuella statusen för Notification Permission på iOS kan hämtas via UNUserNotificationCenter.current().getNotificationSettings. Statusarna .authorized, .denied, .provisional eller .notDetermined gör det möjligt för appen att välja rtt beteende. Efter första vägran visas systemdialogen inte igen — du måste omdirigera användaren till Inställningar via UIApplication.openSettingsURLString. Apple rekommenderar också hantering av statusen .ephemeral (iOS 17+), som tillhandahåller temporära notiser för specifika scenarier.
Bästa praxis för att begära Notification Permission syftar till att öka konverteringsgraden för samtycke och minska användarbortfall. En felaktig begäran kan inte bara beröva appen möjligheten att skicka notiser, utan även leda till borttagning av appen.
Det vanligaste antimönstret — att begära Notification Permission vid första starten av appen. Användaren förstår ännu inte appens värde och kommer med största sannolikhet att vägra. Det optimala ögonblicket — efter att användaren utfört den första målinriktade handlingen: lagt en beställning, skickat ett meddelande, prenumererat på uppdateringar. Begäran efter värde ökar konverteringsgraden för samtycke till 65-75%.
Före systemdialogen, visa din egen skärm med exempel på notiser som användaren kommer att få. Visa en mockup av den framtida notisen med text och ikon. Om användaren ser att notiserna kommer att vara användbara och icke-påträngande, är det större sannolikhet att de samtycker. Exempel på notis på den preliminära skärmen är en effektiv teknik som ökar konverteringen med 35-50%.
Proaktiv begäran av provisoriska notiser på iOS gör det möjligt att leverera notiser utan användarens uttryckliga samtycke. Om användaren ser värde i dessa notiser kan de aktivera fulla notiser via notisens kontextmeny. Apple rekommenderar denna metod för nyhetsappar, väderappar och andra tjänster där notiser är informativa, inte transaktionsbaserade. Enligt Apple WWDC 2024 ökar denna metod konverteringsgraden för fullt samtycke med 20-30%.
Vanliga frågor
Efter vägran visas systemdialogen inte igen. Det enda sättet att aktivera notiser är att omdirigera användaren till systeminställningarna via Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) på Android eller UIApplication.openSettingsURLString på iOS. Visa en skärm med instruktioner och en navigeringsknapp.
På Android 12 och lägre krävs inte Notification Permission — alla appar kan skicka notiser utan begäran. Användaren kan dock när som helst inaktivera notiser via systeminställningarna. Från och med Android 13 är körtidsbegäran obligatorisk för targetSdkVersion 33+.
NotificationChannel — är en notiskategori som infördes i Android 8.0. Varje kanal har ett namn, en beskrivning, viktighet (importance) och en grupp. Användaren kan inaktivera enskilda kanaler utan att inaktivera alla appens notiser. Till exempel kan kanalen „Nya meddelanden” och kanalen „Reklamnyhetsbrev” konfigureras olika.
På Android 13+ utan POST_NOTIFICATIONS kommer varje anrop till NotificationManager.notify att ignoreras av systemet. På iOS utan behörighet för UNUserNotificationCenter levereras inte notiser. Undantag: Provisional på iOS (utan ljud, endast i Notifieringscentret) och Android 12- (behörighet krävs inte).
På Android använder du NotificationManagerCompat.areNotificationsEnabled(). På iOS anropar du UNUserNotificationCenter.current().getNotificationSettings och kontrollerar egenskapen authorizationStatus. För Android, kontrollera även kanalens viktighet: NotificationChannel.getImportance() bör inte vara IMPORTANCE_NONE.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också