Een lokale melding is een bericht dat de app naar de gebruiker stuurt zonder tussenkomst van een externe server. Alle gegevens worden direct op het apparaat van de ontvanger verwerkt en weergegeven. Een dergelijk mechanisme is geschikt voor herinneringen, timers en wekkers wanneer de app op de achtergrond staat of is gesloten. Volgens Apple Developer Documentation biedt UNUserNotificationCenter gecentraliseerd beheer van lokale meldingen op iOS.
Belangrijkste punten
Een lokale melding is een triggerbericht dat door het besturingssysteem wordt gegenereerd en weergegeven op hetzelfde apparaat waar de app is geïnstalleerd. In tegenstelling tot pushmeldingen gaan lokale meldingen niet via een externe server — de volledige planningslogica wordt aan de clientzijde uitgevoerd.
Dergelijke meldingen werken ongeacht de status van de app: of deze nu actief, geminimaliseerd of volledig gesloten is. Het besturingssysteem neemt de levering op het geplande tijdstip over en de ontwikkelaar specificeert alleen de inhoud en trigger.
Het systeem garandeert levering van de lokale melding, zelfs zonder netwerk. Dit is een belangrijk voordeel ten opzichte van pushmeldingen, die een stabiele internetverbinding en een werkende server vereisen.
Elke lokale melding bestaat uit drie delen: inhoud (titel, tekst, geluid), trigger (tijds- of geo-voorwaarde) en een verzoek-ID. De ID maakt het mogelijk de melding vóór levering te annuleren of bij te werken.
Een ontwikkelaar kan maximaal 64 lokale meldingen per app instellen op iOS en een onbeperkt aantal op Android. Het verschil is te wijten aan architecturale beperkingen van de besturingssystemen.
Beide platformen bieden hun eigen API's voor het werken met lokale meldingen. Op iOS is het centrale element UNUserNotificationCenter, op Android — NotificationManager. Ondanks verschillende interfaces is de logica hetzelfde: de app maakt een verzoek aan, registreert het in het systeem en het OS levert de melding op het geplande moment.
iOS gebruikt UNCalendarNotificationTrigger voor kalendergebeurtenissen, UNTimeIntervalNotificationTrigger voor intervallen en UNLocationNotificationTrigger voor geolocatie. Android biedt AlarmManager, WorkManager en nauwkeurige planning via setExact.
Sinds Android 12 vereist SCHEDULE_EXACT_ALARM speciale toestemming van de gebruiker. Op iOS wordt toestemming eenmalig gevraagd via UNUserNotificationCenter.requestAuthorization en kiest de gebruiker het toegangsniveau: banners, geluiden, badges.
Lokale meldingen worden geclassificeerd op basis van het triggertype, niet op basis van inhoud. Elk type bepaalt wanneer en onder welke voorwaarden de melding aan de gebruiker wordt getoond.
Op iOS en Android zijn triggertypes verschillend geïmplementeerd, hoewel de logische classificatie hetzelfde is. iOS gebruikt UNCalendarNotificationTrigger voor datums, UNTimeIntervalNotificationTrigger voor intervallen en UNLocationNotificationTrigger voor geolocatie. Android biedt AlarmManager met setExact en setRepeating, en WorkManager voor uitgestelde taken.
| Triggertype | Beschrijving | Voorbeeld |
|---|---|---|
| Tijdsinterval | Melding N seconden na start | Afteltimer |
| Kalenderdatum | Melding op een specifiek tijdstip en datum | Afspraakherinnering |
| Geolocatie | Melding bij binnenkomst/verlaten van een regio | Herinnering bij de winkel |
| Onvoorwaardelijk | Onmiddellijke levering bij API-aanroep | Downloadmelding |
Op iOS is ook UNNotificationAttachment beschikbaar — een bijlage van afbeelding, audio of video in de meldingstekst. Android ondersteunt aangepaste sjablonen met knoppen en grote afbeeldingen via NotificationCompat.Style.
De keuze van de trigger hangt af van het scenario: kalenderherinneringen werken het beste via een kalendertrigger en geo-herinneringen via geolocatie. Intervaltriggers zijn geschikt voor regelmatige gebeurtenissen met een vaste periode.
Op iOS worden lokale meldingen door het systeem afgeleverd, zelfs als de app is gesloten — UNUserNotificationCenter beheert de wachtrij zelfstandig. Op Android hangt de levering af van het gekozen mechanisme: AlarmManager wordt geactiveerd, zelfs als het scherm is uitgeschakeld, en WorkManager houdt rekening met energiebesparing.
Lokale meldingen lossen taken op waarbij externe infrastructuur overbodig of niet beschikbaar is. Belangrijkste scenario's: herinneringen, timers, leerzame tips en uitgestelde acties.
Onderzoek van Localytics toont aan dat apps die lokale herinneringen gebruiken 35% meer gebruikers behouden in de eerste week na installatie. Dit maakt lokale meldingen een krachtig hulpmiddel voor onboarding.
Het is belangrijk om frequentie niet te misbruiken — het systeem groepeert meldingen van één app zelf en de gebruiker kan alle lokale meldingen uitschakelen als ze vervelend worden. De optimale frequentie is niet meer dan 2–3 meldingen per dag voor niet-kritieke gebeurtenissen.
Gebruik voor het plannen van een lokale melding op Android NotificationManager in combinatie met AlarmManager. Vanaf Android 8+ moet eerst een meldingskanaal worden aangemaakt, anders wordt de melding niet weergegeven.
val channelId = "reminder_channel"
val notificationId = "task_reminder_42"
val channel = NotificationChannel(
channelId,
"Herinneringen",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Kanaal voor taakherinneringen"
}
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
)
Controleer op Android 12+ de SCHEDULE_EXACT_ALARM-machtiging voordat u setExact aanroept. Als de machtiging niet is verleend, gebruikt u setWindow, die levering binnen een tijdvenster garandeert.
Wanneer AlarmManager wordt geactiveerd, stuurt het systeem een broadcast Intent die wordt ontvangen door BroadcastReceiver. Daarin moet de melding worden gemaakt en weergegeven via NotificationManager. Zorg ervoor dat PendingIntent FLAG_UPDATE_CURRENT gebruikt, anders blijven oude meldingen bij gegevenswijzigingen de verouderde Intent gebruiken.
Op iOS worden lokale meldingen gemaakt via UNUserNotificationCenter met UNMutableNotificationContent en een van de triggers. Voor het plannen moet toestemming van de gebruiker worden gevraagd.
import UserNotifications
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
guard granted else { return }
}
let content = UNMutableNotificationContent()
content.title = "Taakherinnering"
content.body = "Vergeet niet het rapport voor 18:00 af te ronden"
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 ondersteunt maximaal 64 gelijktijdige lokale meldingsverzoeken. Als de limiet wordt overschreden, wijst het systeem nieuwe verzoeken af totdat actieve verzoeken zijn afgeleverd of geannuleerd. Gebruik getPendingNotificationRequests om de huidige wachtrij te controleren.
Wanneer een gebruiker interactie heeft met een lokale iOS-melding, wordt de methode userNotificationCenter:didReceive response van de UNUserNotificationCenterDelegate gedelegeerde aangeroepen. In deze methode zijn de verzoek-ID, actionIdentifier (welke knop is ingedrukt) en aangepaste userInfo beschikbaar. Dit maakt het mogelijk om eenvoudig openen van de melding te onderscheiden van het indrukken van een specifieke actieknop.
Om ervoor te zorgen dat lokale meldingen nuttig zijn en de gebruiker niet irriteren, volgt u een aantal belangrijke regels. Ten eerste: controleer de frequentie — niet meer dan 2–3 meldingen per dag voor niet-kritieke gebeurtenissen, anders schakelt de gebruiker alle meldingen van de app uit.
Ten tweede: geef de gebruiker keuze. Voeg in de interface de mogelijkheid toe om bepaalde typen lokale meldingen uit te schakelen. Op Android is het handig om hiervoor een apart NotificationChannel met lage importance te gebruiken, op iOS — een aparte categorie in de app-instellingen.
Ten derde: contextuele relevantie — de melding moet verschijnen wanneer de gebruiker deze nodig heeft. Geo-triggers zijn ideaal voor herinneringen aan taken bij huis, kalendertriggers voor afspraken, intervaltriggers voor regelmatige acties zoals water drinken of stretchen. Meng typen niet onnodig.
Ten vierde: test op echte apparaten. De iOS-simulator emuleert niet alle leveringsscenario's van lokale meldingen, vooral niet op de achtergrond. Gebruik op Android adb shell dumpsys notification om de wachtrij van geplande meldingen en hun parameters te controleren. Ten vijfde: geef de gebruiker altijd de mogelijkheid om meldingen via de app-interface uit te schakelen — dit is een verplichte UX-vereiste en App Store Review Guidelines.
Veelgestelde vragen
Een lokale melding wordt gepland en afgeleverd door het apparaat zonder serverbetrokkenheid. Pushmelding vereist een externe dienst (FCM, APNS) en internetverbinding. Lokale meldingen werken offline, push — alleen met netwerktoegang.
iOS beperkt tot 64 gelijktijdig geplande verzoeken. Android heeft geen strikte limiet, maar meer dan 500 meldingen kan de systeemprestatie verminderen en de levertijd beïnvloeden.
Ja, gebruik op iOS removePendingNotificationRequests met de verzoek-ID. Roep op Android NotificationManager.cancel aan of annuleer de PendingIntent via AlarmManager. Een unieke ID is verplicht voor annulering.
Op iOS wordt toestemming verplicht gevraagd via requestAuthorization. Op Android 13+ (Tiramisu) is ook toestemming POST_NOTIFICATIONS vereist. Oudere Android-versies vereisen geen expliciete toestemming voor lokale meldingen.
Maak op iOS UNNotificationAction aan en voeg deze toe aan UNNotificationCategory. Gebruik op Android NotificationCompat.Builder.addAction met PendingIntent voor BroadcastReceiver. Elke knop start een aparte actie in de app.
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