Lokální oznámení v mobilním vývoji: podstata, jaké typy existují a jak fungují

Autor: IT Sectr Publikováno: 2026-03-19 Doba čtení: 8 min

Lokální oznámení je zpráva, kterou aplikace odesílá uživateli bez účasti vzdáleného serveru. Všechna data jsou zpracovávána a zobrazována přímo na zařízení příjemce. Tento mechanismus je vhodný pro připomínky, časovače a budíky, když je aplikace na pozadí nebo zavřená. Podle Apple Developer Documentation, UNUserNotificationCenter poskytuje centralizovanou správu lokálních oznámení na iOS.

Hlavní body

  • Lokální oznámení — zpráva plánovaná a doručovaná zařízením bez účasti serveru
  • Platformy — Android používá NotificationManager, iOS používá UNUserNotificationCenter
  • Plánování — oznámení mohou být zpožděna podle času, geolokace nebo kalendáře
  • Omezení — lokální oznámení nefungují mezi zařízeními a vyžadují oddělenou logiku synchronizace
  • UX — správně nakonfigurovaná oznámení zvyšují zapojení a přivádějí uživatele zpět do aplikace

Co je lokální oznámení?

Lokální oznámení je triggerovaná zpráva, kterou generuje a zobrazuje operační systém na stejném zařízení, kde je aplikace nainstalována. Na rozdíl od push oznámení, lokální neprocházejí přes externí server — veškerá logika plánování se provádí na straně klienta.

Taková oznámení fungují bez ohledu na stav aplikace: aktivní, minimalizovaná nebo zcela zavřená. Operační systém přebírá doručení v určený čas a vývojář specifikuje pouze obsah a spouštěč.

Systém garantuje doručení lokálního oznámení i bez sítě. To je klíčová výhoda oproti push oznámením, která vyžadují stabilní internetové připojení a funkční server.

Hlavní komponenty požadavku

Každé lokální oznámení se skládá ze tří částí: obsah (název, tělo, zvuk), spouštěč (časová nebo geo-podmínka) a identifikátor požadavku. Identifikátor umožňuje zrušit nebo aktualizovat oznámení před jeho doručením.

Vývojář může nastavit až 64 lokálních oznámení pro jednu aplikaci na iOS a neomezený počet na Androidu. Rozdíl souvisí s architektonickými omezeními operačních systémů.

Jak fungují lokální oznámení na iOS a Androidu?

Obě platformy poskytují vlastní API pro práci s lokálními oznámeními. Na iOS je centrálním prvkem UNUserNotificationCenter, na Androidu — NotificationManager. Přes různé rozhraní je logika stejná: aplikace vytvoří požadavek, zaregistruje jej v systému a OS doručí oznámení v určený čas.

iOS používá UNCalendarNotificationTrigger pro kalendářní události, UNTimeIntervalNotificationTrigger pro intervaly a UNLocationNotificationTrigger pro geolokaci. Android nabízí AlarmManager, WorkManager a přesné plánování přes setExact.

Od verze Android 12 — SCHEDULE_EXACT_ALARM vyžaduje speciální oprávnění od uživatele. Na iOS je oprávnění vyžadováno jednou prostřednictvím UNUserNotificationCenter.requestAuthorization a uživatel volí úroveň přístupu: bannery, zvuky, odznaky.

Typy lokálních oznámení

Lokální oznámení se klasifikují podle typu spouštěče, nikoli podle obsahu. Každý typ určuje, kdy a za jakých podmínek bude oznámení uživateli zobrazeno.

Srovnání spouštěčů podle platformy

Na iOS a Androidu jsou typy spouštěčů implementovány odlišně, i když logická klasifikace je stejná. iOS používá UNCalendarNotificationTrigger pro data, UNTimeIntervalNotificationTrigger pro intervaly a UNLocationNotificationTrigger pro geolokaci. Android nabízí AlarmManager s setExact a setRepeating, a také WorkManager pro zpožděné úkoly.

Typ spouštěčePopisPříklad
Časový intervalOznámení po N sekundách od spuštěníČasovač odpočítávání
Kalendářní datumOznámení v konkrétní čas a datumPřipomínka schůzky
GeolokaceOznámení při vstupu/výstupu z oblastiPřipomínka u obchodu
BezpodmínečnéOkamžité doručení při volání APIOznámení o stahování

Na iOS je také k dispozici UNNotificationAttachment — příloha obrázku, zvuku nebo videa v těle oznámení. Android podporuje vlastní šablony s tlačítky a velkými obrázky prostřednictvím NotificationCompat.Style.

Výběr spouštěče závisí na scénáři: kalendářní připomínky fungují nejlépe přes kalendářní spouštěč a geo-připomínky — přes geolokaci. Intervalové spouštěče jsou vhodné pro pravidelné události s pevnou periodou.

Chování spouštěčů na pozadí

Na iOS jsou lokální oznámení doručována systémem i při zavřené aplikaci — UNUserNotificationCenter spravuje frontu samostatně. Na Androidu doručení závisí na zvoleném mechanismu: AlarmManager se aktivuje i při vypnuté obrazovce, zatímco WorkManager zohledňuje úsporu energie.

Scénáře použití v mobilních aplikacích

Lokální oznámení řeší úkoly, kde je externí infrastruktura nadbytečná nebo nedostupná. Hlavní scénáře: připomínky, časovače, vzdělávací tipy a zpožděné akce.

  • Připomínky — kalendářová aplikace vytvoří lokální oznámení na konkrétní datum události
  • Vzdělávací tipy — den po instalaci aplikace zobrazí tip o obrazovce
  • Časovače — kuchyňský časovač se spustí po nastaveném čase i při zavřené aplikaci
  • Průběh operací — oznámení o dokončení stahování nebo exportu dat

Výzkumy Localytics ukazují, že aplikace používající lokální připomínky si udrží o 35 % více uživatelů v prvním týdnu po instalaci. To činí lokální oznámení mocným nástrojem onboardingu.

Je důležité nezneužívat frekvenci — systém sám seskupuje oznámení z jedné aplikace a uživatel může všechna lokální oznámení vypnout, pokud ho obtěžují. Optimální frekvence není více než 2–3 oznámení denně pro nekritické události.

Příklad plánování na Androidu

Pro plánování lokálního oznámení na Androidu použijte NotificationManager ve spojení s AlarmManager. Od Android 8+ je nejprve nutné vytvořit kanál oznámení, jinak se oznámení nezobrazí.

kotlin
val channelId = "reminder_channel"
val notificationId = "task_reminder_42"

val channel = NotificationChannel(
    channelId,
    "Připomínky",
    NotificationManager.IMPORTANCE_HIGH
).apply {
    description = "Kanál pro připomínky úkolů"
}

val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)

val intent = Intent(this, ReminderReceiver::class.java).apply {
    putExtra("notification_id", notificationId)
    putExtra("channel_id", channelId)
}

val pendingIntent = PendingIntent.getBroadcast(
    this, notificationId.hashCode(),
    intent, PendingIntent.FLAG_UPDATE_CURRENT
)

val alarmManager = getSystemService(AlarmManager::class.java)
alarmManager.setExact(
    AlarmManager.RTC_WAKEUP,
    triggerTimeMillis,
    pendingIntent
)

Na Android 12+ zkontrolujte oprávnění SCHEDULE_EXACT_ALARM před voláním setExact. Pokud oprávnění nebylo uděleno — použijte setWindow, který garantuje doručení v časovém okně.

Zpracování v BroadcastReceiver

Při aktivaci AlarmManager systém odešle broadcast Intent, který přijímá BroadcastReceiver. Uvnitř něj je nutné vytvořit a zobrazit oznámení prostřednictvím NotificationManager. Ujistěte se, že PendingIntent používá FLAG_UPDATE_CURRENT, jinak při změně dat budou stará oznámení nadále používat zastaralý Intent.

Příklad plánování na iOS

Na iOS se lokální oznámení vytvářejí prostřednictvím UNUserNotificationCenter pomocí UNMutableNotificationContent a jednoho ze spouštěčů. Před plánováním je nutné požádat uživatele o oprávnění.

swift
import UserNotifications

let center = UNUserNotificationCenter.current()

center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
    guard granted else { return }
}

let content = UNMutableNotificationContent()
content.title = "Připomínka úkolu"
content.body = "Nezapomeňte dokončit zprávu do 18:00"
content.sound = .default
content.userInfo = ["task_id": "42"]

let trigger = UNTimeIntervalNotificationTrigger(
    timeInterval: 3600,
    repeats: false
)

let request = UNNotificationRequest(
    identifier: "task_reminder_42",
    content: content,
    trigger: trigger
)

center.add(request)

iOS podporuje až 64 současných požadavků na lokální oznámení. Pokud je limit překročen — systém odmítá nové požadavky, dokud nejsou aktivní doručeny nebo zrušeny. Pro kontrolu aktuální fronty použijte getPendingNotificationRequests.

Zpracování odpovědi delegáta

Když uživatel interaguje s lokálním oznámením na iOS, je volána metoda userNotificationCenter:didReceive response delegáta UNUserNotificationCenterDelegate. V této metodě jsou k dispozici identifikátor požadavku, actionIdentifier (které tlačítko bylo stisknuto) a vlastní userInfo. To umožňuje rozlišit prosté otevření oznámení od stisknutí konkrétního tlačítka akce.

Nejlepší postupy lokálních oznámení

Aby byla lokální oznámení užitečná a neobtěžovala uživatele, dodržujte několik klíčových pravidel. Za prvé: kontrolujte frekvenci — ne více než 2–3 oznámení denně pro nekritické události, jinak uživatel vypne všechna oznámení aplikace.

Za druhé: dejte uživateli na výběr. Přidejte do rozhraní možnost vypnout určité typy lokálních oznámení. Na Androidu je k tomu vhodné použít samostatný NotificationChannel s nízkou důležitostí, na iOS — samostatnou kategorii v nastavení aplikace.

Za třetí: kontextuální relevance — oznámení by se mělo objevit, když ho uživatel potřebuje. Geo-spouštěče jsou ideální pro připomínky úkolů poblíž domova, kalendářní — pro schůzky, intervalové — pro pravidelné činnosti jako pití vody nebo protahování. Nemíchejte typy bez potřeby.

Za čtvrté: testujte na skutečných zařízeních. Simulátor iOS neemuluje všechny scénáře doručení lokálních oznámení, zejména na pozadí. Na Androidu použijte adb shell dumpsys notification pro kontrolu fronty plánovaných oznámení a jejich parametrů. Za páté: vždy poskytněte uživateli možnost vypnout oznámení prostřednictvím rozhraní aplikace — to je povinný požadavek UX a pokynů App Store Review.

Často kladené otázky

Čím se liší lokální oznámení od push?

Lokální oznámení je plánováno a doručováno zařízením bez účasti serveru. Push oznámení vyžaduje externí službu (FCM, APNS) a internetové připojení. Lokální fungují offline, push — pouze s přístupem k síti.

Kolik lokálních oznámení lze naplánovat?

iOS omezuje na 64 současně plánovaných požadavků. Android nemá přísný limit, ale přes 500 oznámení může snížit výkon systému a ovlivnit dobu doručení.

Lze zrušit lokální oznámení po naplánování?

Ano, na iOS použijte removePendingNotificationRequests s identifikátorem požadavku. Na Androidu zavolejte NotificationManager.cancel nebo zrušte PendingIntent přes AlarmManager. Jedinečný identifikátor je pro zrušení povinný.

Je vyžadováno oprávnění uživatele pro lokální oznámení?

Na iOS je oprávnění povinně vyžadováno prostřednictvím requestAuthorization. Na Android 13+ (Tiramisu) je také vyžadováno oprávnění POST_NOTIFICATIONS. Starší verze Androidu nevyžadují výslovné oprávnění pro lokální oznámení.

Jak přidat tlačítka do lokálního oznámení?

Na iOS vytvořte UNNotificationAction a přidejte do UNNotificationCategory. Na Androidu použijte NotificationCompat.Builder.addAction s PendingIntent pro BroadcastReceiver. Každé tlačítko spouští samostatnou akci v aplikaci.

Shrnutí

  • Lokální oznámení — zprávy plánované a doručované zařízením bez serverové infrastruktury
  • UNUserNotificationCenter — hlavní API pro práci s lokálními oznámeními na iOS
  • NotificationManager — hlavní API pro práci s lokálními oznámeními na Androidu
  • Typy spouštěčů — časový interval, kalendářní datum, geolokace a bezpodmínečné doručení
  • Limity — iOS omezuje na 64 plánovaných požadavků, Android nemá přísný limit
  • Oprávnění — na iOS a Android 13+ je vyžadován výslovný souhlas uživatele pro zobrazení oznámení
  • Offline — lokální oznámení fungují bez internetového připojení, což je činí spolehlivějšími než push

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é