A helyi értesítés egy olyan üzenet, amelyet az alkalmazás a felhasználónak küld távoli szerver részvétele nélkül. Az összes adat közvetlenül a címzett eszközén kerül feldolgozásra és megjelenítésre. Ez a mechanizmus alkalmas emlékeztetőkhöz, időzítőkhöz és ébresztőkhöz, amikor az alkalmazás a háttérben van vagy bezárták. A Apple Developer Documentation szerint az UNUserNotificationCenter központosított kezelést biztosít a helyi értesítések számára iOS-en.
Főbb pontok
A helyi értesítés egy triggerelt üzenet, amelyet az operációs rendszer generál és jelenít meg ugyanazon az eszközön, ahol az alkalmazás telepítve van. A push értesítésekkel ellentétben a helyiek nem mennek keresztül külső szerveren — az ütemezési logika teljes egészében a kliens oldalon fut.
Az ilyen értesítések az alkalmazás állapotától függetlenül működnek: aktív, minimalizált vagy teljesen bezárt. Az operációs rendszer gondoskodik a kézbesítésről a megadott időpontban, a fejlesztő csak a tartalmat és a triggert adja meg.
A rendszer garantálja a helyi értesítés kézbesítését még hálózat hiányában is. Ez kulcsfontosságú előny a push értesítésekkel szemben, amelyek stabil internetkapcsolatot és működő szervert igényelnek.
Minden helyi értesítés három részből áll: tartalom (cím, szöveg, hang), trigger (időbeli vagy geo-feltétel) és a kérés azonosítója. Az azonosító lehetővé teszi az értesítés törlését vagy frissítését a kézbesítés előtt.
A fejlesztő legfeljebb 64 helyi értesítést állíthat be egy alkalmazáshoz iOS-en, és korlátlan számút Androidon. A különbség az operációs rendszerek architekturális korlátaiból adódik.
Mindkét platform saját API-kat biztosít a helyi értesítésekkel való munkához. iOS-en a központi elem az UNUserNotificationCenter, Androidon — a NotificationManager. A különböző interfészek ellenére a logika ugyanaz: az alkalmazás létrehoz egy kérést, regisztrálja a rendszerben, és az operációs rendszer kézbesíti az értesítést a megadott időpontban.
Az iOS a UNCalendarNotificationTrigger-t használja naptári eseményekhez, a UNTimeIntervalNotificationTrigger-t időközökhöz és a UNLocationNotificationTrigger-t helymeghatározáshoz. Az Android AlarmManager-t, WorkManager-t és pontos ütemezést kínál a setExact segítségével.
Az Android 12-től — a SCHEDULE_EXACT_ALARM külön engedélyt igényel a felhasználótól. iOS-en az engedély egyszer kérendő az UNUserNotificationCenter.requestAuthorization segítségével, és a felhasználó kiválasztja a hozzáférési szintet: bannerek, hangok, jelvények.
A helyi értesítéseket a trigger típusa szerint osztályozzuk, nem a tartalom szerint. Minden típus meghatározza, hogy mikor és milyen feltételek mellett jelenik meg az értesítés a felhasználónak.
iOS-en és Androidon a trigger típusok eltérően vannak implementálva, bár a logikai osztályozás ugyanaz. Az iOS dátumokhoz a UNCalendarNotificationTrigger-t, időközökhöz a UNTimeIntervalNotificationTrigger-t, helymeghatározáshoz a UNLocationNotificationTrigger-t használja. Az Android AlarmManager-t kínál setExact és setRepeating funkciókkal, valamint WorkManager-t késleltetett feladatokhoz.
| Trigger típusa | Leírás | Példa |
|---|---|---|
| Időköz | Értesítés N másodperccel az indítás után | Visszaszámláló időzítő |
| Naptári dátum | Értesítés adott időpontban és dátumban | Találkozó emlékeztető |
| Helymeghatározás | Értesítés területre lépéskor/elhagyáskor | Emlékeztető a bolt mellett |
| Feltétel nélküli | Azonnali kézbesítés API hívásra | Letöltési értesítés |
iOS-en elérhető továbbá az UNNotificationAttachment — kép, hang vagy videó melléklet az értesítés szövegében. Az Android egyéni sablonokat támogat gombokkal és nagy képekkel a NotificationCompat.Style segítségével.
A trigger kiválasztása a forgatókönyvtől függ: a naptári emlékeztetők a naptári triggerrel működnek a legjobban, a geo-emlékeztetők — a helymeghatározással. Az időköz triggerek alkalmasak rögzített periódusú rendszeres eseményekhez.
iOS-en a helyi értesítéseket a rendszer kézbesíti akkor is, ha az alkalmazás be van zárva — az UNUserNotificationCenter önállóan kezeli a várakozási sort. Androidon a kézbesítés a kiválasztott mechanizmustól függ: az AlarmManager akkor is aktiválódik, ha a kijelző ki van kapcsolva, a WorkManager pedig figyelembe veszi az energia takarékosságot.
A helyi értesítések olyan feladatokat oldanak meg, ahol a külső infrastruktúra felesleges vagy nem elérhető. Fő forgatókönyvek: emlékeztetők, időzítők, oktató tippek és késleltetett műveletek.
A Localytics kutatásai szerint azok az alkalmazások, amelyek helyi emlékeztetőket használnak, 35%-kal több felhasználót tartanak meg a telepítés utáni első héten. Ez a helyi értesítéseket hatékony eszközzé teszi az onboardinghoz.
Fontos, hogy ne éljünk vissza a gyakorisággal — a rendszer maga csoportosítja az egy alkalmazástól érkező értesítéseket, és a felhasználó kikapcsolhatja az összes helyi értesítést, ha zavarják. Az optimális gyakoriság nem több, mint napi 2–3 értesítés nem kritikus események esetén.
Helyi értesítés Androidon történő ütemezéséhez használja a NotificationManager-t az AlarmManager-rel együtt. Android 8+ esetén először létre kell hozni egy értesítési csatornát, különben az értesítés nem jelenik meg.
val channelId = "reminder_channel"
val notificationId = "task_reminder_42"
val channel = NotificationChannel(
channelId,
"Emlékeztetők",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Csatorna a feladatok emlékeztetőihez"
}
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
)
Android 12+ esetén ellenőrizze a SCHEDULE_EXACT_ALARM engedélyt a setExact hívása előtt. Ha az engedély nincs megadva — használja a setWindow-t, amely garantálja a kézbesítést egy időablakon belül.
Amikor az AlarmManager aktiválódik, a rendszer egy broadcast Intent-et küld, amelyet a BroadcastReceiver fogad. Ezen belül létre kell hozni és meg kell jeleníteni az értesítést a NotificationManager segítségével. Győződjön meg arról, hogy a PendingIntent FLAG_UPDATE_CURRENT-et használ, különben az adatok megváltozásakor a régi értesítések továbbra is az elavult Intent-et használják.
iOS-en a helyi értesítések az UNUserNotificationCenter segítségével hozhatók létre az UNMutableNotificationContent és az egyik trigger használatával. Az ütemezés előtt engedélyt kell kérni a felhasználótól.
import UserNotifications
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
guard granted else { return }
}
let content = UNMutableNotificationContent()
content.title = "Feladat emlékeztető"
content.body = "Ne felejtse el befejezni a jelentést 18:00-ig"
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)
Az iOS legfeljebb 64 egyidejű helyi értesítési kérést támogat. Ha a korlát túllépésre kerül — a rendszer elutasítja az új kéréseket, amíg az aktív kérések kézbesítésre nem kerülnek vagy törlésre. Az aktuális sor ellenőrzéséhez használja a getPendingNotificationRequests-t.
Amikor a felhasználó interakcióba lép egy iOS helyi értesítéssel, meghívásra kerül az userNotificationCenter:didReceive response metódus az UNUserNotificationCenterDelegate delegáltban. Ebben a metódusban elérhető a kérés azonosítója, actionIdentifier (melyik gomb lett megnyomva) és az egyéni userInfo. Ez lehetővé teszi az értesítés egyszerű megnyitásának megkülönböztetését egy adott műveleti gomb megnyomásától.
Annak érdekében, hogy a helyi értesítések hasznosak legyenek és ne idegesítsék a felhasználót, tartsa be néhány kulcsfontosságú szabályt. Először: ellenőrizze a gyakoriságot — nem kritikus események esetén legfeljebb napi 2–3 értesítés, különben a felhasználó kikapcsolja az alkalmazás összes értesítését.
Másodszor: adjon választási lehetőséget a felhasználónak. Adjon hozzá a felülethez lehetőséget bizonyos típusú helyi értesítések kikapcsolására. Androidon ehhez használjon külön NotificationChannel-t alacsony importance-szal, iOS-en — külön kategóriát az alkalmazás beállításaiban.
Harmadszor: kontextuális relevancia — az értesítés akkor jelenjen meg, amikor a felhasználónak szüksége van rá. A geo-triggerek ideálisak az otthon közeli teendők emlékeztetőihez, a naptári triggerek — találkozókhoz, az időköz triggerek — rendszeres tevékenységekhez, mint a vízivás vagy nyújtás. Ne keverje a típusokat szükségtelenül.
Negyedszer: teszteljen valós eszközökön. Az iOS szimulátor nem emulálja a helyi értesítések kézbesítésének összes forgatókönyvét, különösen a háttérben. Androidon használja az adb shell dumpsys notification parancsot az ütemezett értesítések sorának és paramétereinek ellenőrzéséhez. Ötödször: mindig biztosítson lehetőséget a felhasználónak az értesítések kikapcsolására az alkalmazás felületén keresztül — ez kötelező UX követelmény és App Store Review Guidelines előírás.
Gyakran Ismételt Kérdések
A helyi értesítést az eszköz ütemezi és kézbesíti szerver részvétele nélkül. A push értesítés külső szolgáltatást (FCM, APNS) és internetkapcsolatot igényel. A helyi értesítések offline működnek, a push — csak hálózati hozzáféréssel.
Az iOS legfeljebb 64 egyidejűleg ütemezett kérésre korlátoz. Az Androidnak nincs szigorú korlátja, de 500 értesítés felett csökkenhet a rendszer teljesítménye és befolyásolhatja a kézbesítési időt.
Igen, iOS-en használja a removePendingNotificationRequests parancsot a kérés azonosítójával. Androidon hívja meg a NotificationManager.cancel parancsot, vagy törölje a PendingIntent-et az AlarmManager segítségével. A törléshez egyedi azonosító szükséges.
iOS-en az engedély kötelezően kérendő a requestAuthorization segítségével. Android 13+ (Tiramisu) esetén szintén szükséges a POST_NOTIFICATIONS engedély. Az Android régebbi verziói nem igényelnek kifejezett engedélyt a helyi értesítésekhez.
iOS-en hozzon létre UNNotificationAction objektumot, és adja hozzá az UNNotificationCategory-hoz. Androidon használja a NotificationCompat.Builder.addAction metódust PendingIntent-tel a BroadcastReceiver számára. Minden gomb külön műveletet indít el az alkalmazásban.
Összefoglalás
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