Notification Permission: co to je, typy oznámení a princip fungování

Autor: IT Sectr Publikováno: 2026-05-22 Doba čtení: 8 min

Notification Permission — to je oprávnění, které aplikace potřebuje k odesílání push oznámení a lokálních oznámení uživateli. Počínaje Androidem 13 a iOS 12 jsou aplikace povinny toto oprávnění žádat během runtime prostřednictvím systémového dialogu. Podle Android Developers, 2024 bez výslovného souhlasu uživatele aplikace nemůže zobrazovat oznámení na zařízeních s Androidem 13 a novějších.

Hlavní body

  • Notification Permission — runtime oprávnění pro odesílání oznámení, povinné na Android 13+ a iOS 12+.
  • Android 13 zavedl oprávnění POST_NOTIFICATIONS, které musí být žádáno během runtime prostřednictvím Activity Result API.
  • iOS používá UNUserNotificationCenter.requestAuthorization k žádosti o přístup k lokálním a push oznámením.
  • Odmítnutí oprávnění způsobuje, že aplikace nemůže zobrazovat ani lokální, ani push oznámení.
  • Opakovaná žádost není možná po prvním odmítnutí — je třeba přesměrovat uživatele do systémových nastavení.

Co je Notification Permission?

Notification Permission — to je systémové oprávnění, které reguluje schopnost aplikace odesílat oznámení uživateli. Až do Androidu 13 mohly všechny aplikace zobrazovat oznámení bez žádosti — stačilo deklarovat oprávnění v manifestu. S nárůstem spamu a rušivých oznámení však Google zavedl povinnou runtime žádost, podobně jako u iOS.

Na iOS bylo oprávnění k oznámením povinné od iOS 8 a od iOS 12 se objevila prozatímní (provisional) oznámení — tichá oznámení, která jsou doručena bez zvuku a zobrazena v Centru oznámení bez výslovné žádosti. Prozatímní oznámení umožňují vývojáři ukázat uživateli hodnotu oznámení před tím, než požádá o úplné oprávnění.

Podle Localytics (2024) 61% uživatelů iOS a 55% uživatelů Androidu souhlasí s příjmem push oznámení po žádosti. Míra konverze souhlasu přímo závisí na kontextu žádosti: aplikace, které žádají o oprávnění po první hodnotné interakci, získají o 40% více souhlasů než ty, které žádají při prvním spuštění.

Vývoj oprávnění pro oznámení

Vývoj oprávnění pro oznámení ukazuje, jak platformy postupně omezovaly přístup aplikací k tomuto komunikačnímu kanálu. Pochopení tohoto vývoje pomáhá vývojáři správně zacházet s různými verzemi operačního systému.

Android: od volného přístupu k přísné kontrole

Až do Androidu 13 (2022) mohla jakákoli aplikace zobrazovat oznámení bez souhlasu uživatele. Android 8.0 (2017) zavedl kanály oznámení, Android 12 (2021) přidal automatické blokování rušivých oznámení a nakonec Android 13 nařídil žádost o POST_NOTIFICATIONS během runtime. Pro aplikace s targetSdkVersion nižším než 33 systém automaticky uděluje oprávnění, ale Google Play vyžaduje aktualizaci targetSdkVersion na 33+ od srpna 2023.

iOS: postupné posilování kontroly

iOS 8 (2014) zavedl povinnou žádost o oprávnění prostřednictvím UIUserNotificationSettings. iOS 10 (2016) představil UNUserNotificationCenter s podporou bohatých oznámení. iOS 12 (2018) přidal prozatímní oznámení a seskupená oznámení. iOS 15 (2021) zavedl Focus Mode, který může blokovat oznámení nezávisle na oprávnění aplikace. App Tracking Transparency (iOS 14.5) nesouvisí s oznámeními, ale také ovlivnila celkovou kulturu žádostí o oprávnění.

Aktuální stav

V současné době obě platformy vyžadují žádost o Notification Permission během runtime. Vývojář se již nemůže spoléhat na automatické zapnutí oznámení. Uživatel má úplnou kontrolu nad tím, které aplikace ho mohou upozorňovat. Kanály oznámení na Androidu a kategorie oznámení na iOS umožňují uživateli přesně nastavit typy přijímaných oznámení.

Notification Permission na Androidu

Notification Permission na Androidu se realizuje prostřednictvím oprávnění POST_NOTIFICATIONS deklarovaného v manifestu s runtime žádostí pro Android 13+.

Deklarace v manifestu

Pro Android 13+ musíte deklarovat oprávnění POST_NOTIFICATIONS v AndroidManifest.xml. Pro zpětnou kompatibilitu s Androidem 12 a nižšími verzemi je oprávnění automaticky udělováno systémem — nejsou vyžadovány žádné další akce.

xml
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

Runtime žádost v Kotlinu

Žádost o oprávnění POST_NOTIFICATIONS se provádí prostřednictvím Activity Result API. Je důležité zkontrolovat verzi SDK: na Androidu 12 a nižších verzích není žádost vyžadována, oprávnění se považuje za automaticky udělené.

kotlin
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 a niže — oprávnění je uděleno automaticky
        showNotification()
        return
    }
    if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
        showNotification()
    } else {
        notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
    }
}

Vytváření kanálů oznámení

Na Androidu 8.0+ musí aplikace vytvořit kanál oznámení prostřednictvím NotificationChannel před odesláním prvního oznámení. Kanál má důležitost (importance) od IMPORTANCE_NONE do IMPORTANCE_HIGH, která určuje, zda se oznámení zobrazí se zvukem a jako banner. Pokud uživatel zakázal oznámení pro aplikaci, nové kanály nebudou mít účinek, dokud nebudou znovu povoleny v nastavení. Doporučuje se vytvářet samostatné kanály pro různé typy oznámení: zprávy, reklamy, systémové události.

kotlin
private fun createNotificationChannel() {
    val channel = NotificationChannel(
        CHANNEL_ID_MESSAGES,
        "Zprávy",
        NotificationManager.IMPORTANCE_HIGH
    ).apply {
        description = "Oznámení o nových zprávách"
        enableVibration = true
    }
    val manager = getSystemService(NotificationManager::class.java)
    manager.createNotificationChannel(channel)
}

Notification Permission na iOS

Notification Permission na iOS se žádá prostřednictvím UNUserNotificationCenter. Apple doporučuje dvoukrokový přístup: nejprve požádat o prozatímní oznámení, poté po prokázání hodnoty o úplné oprávnění.

Žádost ve Swiftu s prozatímní volbou

Prozatímní oznámení jsou tichá oznámení, která přicházejí do Centra oznámení bez zvuku a banneru. Nevyžadují výslovný souhlas uživatele a umožňují aplikaci ukázat hodnotu oznámení před úplnou žádostí. Po obdržení několika prozatímních oznámení může uživatel zapnout úplná oznámení prostřednictvím nabídky v samotném oznámení.

swift
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 — uživatel nevidí dialog
        // Oznámení přicházejí bez zvuku do Centra oznámení
        registerForRemoteNotifications()
    }
}

Kontrola stavu a systémová nastavení

Aktuální stav Notification Permission na iOS lze získat prostřednictvím UNUserNotificationCenter.current().getNotificationSettings. Stavy .authorized, .denied, .provisional nebo .notDetermined umožňují aplikaci vybrat správné chování. Po prvním odmítnutí se systémový dialog již nezobrazí — je třeba přesměrovat uživatele do Nastavení prostřednictvím UIApplication.openSettingsURLString. Apple také doporučuje zpracovávání stavu .ephemeral (iOS 17+), který poskytuje dočasná oznámení pro konkrétní scénáře.

Nejlepší postupy pro žádost o oznámení

Nejlepší postupy pro žádost o Notification Permission jsou zaměřeny na zvýšení míry konverze souhlasu a snížení odchodu uživatelů. Nesprávná žádost může nejen připravit aplikaci o možnost odesílat oznámení, ale také vést k odstranění aplikace.

Nežádejte při prvním spuštění

Nejčastější antimuster — žádost o Notification Permission při prvním spuštění aplikace. Uživatel ještě nechápe hodnotu aplikace a s velkou pravděpodobností odmítne. Optimální okamžik — poté, co uživatel provedl první cílenou akci: zadal objednávku, odeslal zprávu, přihlásil se k odběru aktualizací. Žádost po hodnotě zvyšuje míru konverze souhlasu na 65-75%.

Použijte obrazovku před oprávněním

Před systémovým dialogem zobrazte vlastní obrazovku s příklady oznámení, které bude uživatel dostávat. Ukažte maketu budoucího oznámení s textem a ikonou. Pokud uživatel vidí, že oznámení budou užitečná a nevtíravá, je pravděpodobnější, že souhlasí. Příklad oznámení na předběžné obrazovce je účinná technika, která zvyšuje konverzi o 35-50%.

Použijte prozatímní oznámení na iOS

Proaktivní žádost o prozatímní oznámení na iOS umožňuje doručovat oznámení bez výslovného souhlasu uživatele. Pokud uživatel vidí v těchto oznámeních hodnotu, může zapnout úplná oznámení prostřednictvím kontextové nabídky oznámení. Apple doporučuje tento přístup pro zpravodajské aplikace, počasí a další služby, kde jsou oznámení informativní, nikoli transakční. Podle Apple WWDC 2024 tento přístup zvyšuje míru konverze úplného souhlasu o 20-30%.

Často kladené otázky

Co dělat, pokud uživatel odmítl Notification Permission?

Po odmítnutí se systémový dialog již nezobrazí. Jediným způsobem, jak zapnout oznámení, je přesměrovat uživatele do systémových nastavení prostřednictvím Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) na Androidu nebo UIApplication.openSettingsURLString na iOS. Zobrazte obrazovku s instrukcemi a tlačítkem pro navigaci.

Jak funguje Notification Permission na Androidu 12 a nižších verzích?

Na Androidu 12 a nižších verzích Notification Permission není vyžadováno — všechny aplikace mohou odesílat oznámení bez žádosti. Uživatel však může oznámení kdykoli zakázat prostřednictvím systémových nastavení. Počínaje Androidem 13 je runtime žádost povinná pro targetSdkVersion 33+.

Co jsou kanály oznámení na Androidu?

NotificationChannel — je kategorie oznámení zavedená v Androidu 8.0. Každý kanál má název, popis, důležitost (importance) a skupinu. Uživatel může vypínat jednotlivé kanály bez vypnutí všech oznámení aplikace. Například kanál „Nové zprávy” a kanál „Reklamní newsletter” lze konfigurovat odlišně.

Lze odesílat oznámení bez Notification Permission?

Na Androidu 13+ bez POST_NOTIFICATIONS bude jakýkoli hovor NotificationManager.notify ignorován systémem. Na iOS bez oprávnění UNUserNotificationCenter nejsou oznámení doručena. Výjimka: Provisional na iOS (bez zvuku, pouze v Centru oznámení) a Android 12- (oprávnění není vyžadováno).

Jak zkontrolovat, zda jsou oznámení pro aplikaci zapnuta?

Na Androidu použijte NotificationManagerCompat.areNotificationsEnabled(). Na iOS zavolejte UNUserNotificationCenter.current().getNotificationSettings a zkontrolujte vlastnost authorizationStatus. Pro Android také zkontrolujte důležitost kanálu: NotificationChannel.getImportance() by neměla být IMPORTANCE_NONE.

Shrnutí

  • Notification Permission — povinné runtime oprávnění pro odesílání oznámení na Android 13+ a iOS 12+.
  • Android 13 zavedl POST_NOTIFICATIONS s runtime žádostí, pro Android 12 a nižší je oprávnění automatické.
  • iOS používá UNUserNotificationCenter s podporou prozatímních oznámení pro tiché doručení bez souhlasu.
  • Žádost po hodnotě — žádost po první hodnotné akci uživatele zvyšuje míru konverze souhlasu na 75%.
  • Obrazovka před oprávněním s příkladem oznámení zvyšuje konverzi o 35-50% podle průmyslových výzkumů.
  • Prozatímní oznámení na iOS umožňují prokázat hodnotu oznámení před žádostí o úplné oprávnění.
  • Kanály oznámení na Androidu poskytují uživateli podrobnou kontrolu nad typy přijímaných oznámení.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také