En lokal notifikation är ett meddelande som appen skickar till användaren utan att en fjärrserver deltar. All data bearbetas och visas direkt på mottagarens enhet. En sådan mekanism passar för påminnelser, timers och alarm när appen är i bakgrunden eller stängd. Enligt Apple Developer Documentation tillhandahåller UNUserNotificationCenter centraliserad hantering av lokala notifikationer på iOS.
Huvudpunkter
En lokal notifikation är ett triggat meddelande som genereras och visas av operativsystemet på samma enhet där appen är installerad. Till skillnad från push-notifikationer går lokala inte igenom en extern server — all schemaläggningslogik utförs på klientsidan.
Sådana notifikationer fungerar oavsett appens tillstånd: aktiv, minimerad eller helt stängd. Operativsystemet tar över leveransen vid den angivna tiden och utvecklaren specificerar endast innehållet och triggern.
Systemet garanterar leverans av den lokala notifikationen även utan nätverk. Detta är en viktig fördel jämfört med push-notifikationer som kräver en stabil internetanslutning och en fungerande server.
Varje lokal notifikation består av tre delar: innehåll (titel, brödtext, ljud), trigger (tids- eller geo-villkor) och en begäran-identifierare. Identifieraren gör det möjligt att avbryta eller uppdatera notifikationen före leverans.
Utvecklaren kan ställa in upp till 64 lokala notifikationer för en app på iOS och ett obegränsat antal på Android. Skillnaden beror på operativsystemens arkitektoniska begränsningar.
Båda plattformarna tillhandahåller sina egna API:er för att arbeta med lokala notifikationer. På iOS är det centrala elementet UNUserNotificationCenter, på Android — NotificationManager. Trots olika gränssnitt är logiken densamma: appen skapar en begäran, registrerar den i systemet och operativsystemet levererar notifikationen vid den angivna tidpunkten.
iOS använder UNCalendarNotificationTrigger för kalenderhändelser, UNTimeIntervalNotificationTrigger för intervall och UNLocationNotificationTrigger för geolokalisering. Android erbjuder AlarmManager, WorkManager och exakt schemaläggning via setExact.
Från och med Android 12 — kräver SCHEDULE_EXACT_ALARM särskilt tillstånd från användaren. På iOS begärs tillstånd en gång via UNUserNotificationCenter.requestAuthorization och användaren väljer åtkomstnivå: banners, ljud, märken.
Lokala notifikationer klassificeras efter triggertyp, inte efter innehåll. Varje typ bestämmer när och under vilka förhållanden notifikationen visas för användaren.
På iOS och Android är triggertyperna implementerade olika, även om den logiska klassificeringen är densamma. iOS använder UNCalendarNotificationTrigger för datum, UNTimeIntervalNotificationTrigger för intervall och UNLocationNotificationTrigger för geolokalisering. Android erbjuder AlarmManager med setExact och setRepeating, samt WorkManager för fördröjda uppgifter.
| Triggertyp | Beskrivning | Exempel |
|---|---|---|
| Tidsintervall | Notifikation efter N sekunder från start | Nedräkningstimer |
| Kalenderdatum | Notifikation vid specifik tid och datum | Påminnelse om möte |
| Geolokalisering | Notifikation vid in-/utträde ur en region | Påminnelse vid butiken |
| Ovillkorlig | Omedelbar leverans vid API-anrop | Nedladdningsnotifikation |
På iOS finns även UNNotificationAttachment tillgängligt — bilaga av bild, ljud eller video i notifikationstexten. Android stöder anpassade mallar med knappar och stora bilder via NotificationCompat.Style.
Valet av trigger beror på scenariot: kalenderpåminnelser fungerar bäst via kalendertriggern och geo-påminnelser — via geolokalisering. Intervalltriggrar passar för regelbundna händelser med fast period.
På iOS levereras lokala notifikationer av systemet även när appen är stängd — UNUserNotificationCenter hanterar kön självständigt. På Android beror leveransen på den valda mekanismen: AlarmManager aktiveras även när skärmen är avstängd, medan WorkManager tar hänsyn till energibesparing.
Lokala notifikationer löser uppgifter där extern infrastruktur är överflödig eller inte tillgänglig. Huvudscenarier: påminnelser, timers, utbildningstips och fördröjda åtgärder.
Forskning från Localytics visar att appar som använder lokala påminnelser behåller 35% fler användare den första veckan efter installation. Detta gör lokala notifikationer till ett kraftfullt verktyg för onboarding.
Det är viktigt att inte missbruka frekvensen — systemet grupperar själv notifikationer från en app och användaren kan stänga av alla lokala notifikationer om de stör. Optimal frekvens är inte mer än 2–3 notifikationer per dag för icke-kritiska händelser.
För att schemalägga en lokal notifikation på Android, använd NotificationManager tillsammans med AlarmManager. Från Android 8+ måste du först skapa en notifikationskanal, annars visas inte notifikationen.
val channelId = "reminder_channel"
val notificationId = "task_reminder_42"
val channel = NotificationChannel(
channelId,
"Påminnelser",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Kanal för uppgiftspåminnelser"
}
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
)
På Android 12+ kontrollera SCHEDULE_EXACT_ALARM-tillståndet innan du anropar setExact. Om tillståndet inte har beviljats — använd setWindow som garanterar leverans inom ett tidsfönster.
När AlarmManager aktiveras skickar systemet en broadcast Intent som tas emot av BroadcastReceiver. Inuti den måste du skapa och visa notifikationen via NotificationManager. Se till att PendingIntent använder FLAG_UPDATE_CURRENT, annars kommer gamla notifikationer vid dataändringar fortsätta att använda den föråldrade Intenten.
På iOS skapas lokala notifikationer via UNUserNotificationCenter med UNMutableNotificationContent och en av triggrarna. Före schemaläggning måste du be om tillstånd från användaren.
import UserNotifications
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
guard granted else { return }
}
let content = UNMutableNotificationContent()
content.title = "Uppgiftspåminnelse"
content.body = "Glöm inte att slutföra rapporten före 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 stöder upp till 64 samtidiga begäranden om lokala notifikationer. Om gränsen överskrids — avvisar systemet nya begäranden tills aktiva har levererats eller avbrutits. Använd getPendingNotificationRequests för att kontrollera den aktuella kön.
När en användare interagerar med en lokal iOS-notifikation anropas metoden userNotificationCenter:didReceive response hos delegaten UNUserNotificationCenterDelegate. I denna metod finns begäran-identifieraren, actionIdentifier (vilken knapp som trycktes) och anpassad userInfo tillgängliga. Detta gör det möjligt att skilja enkel öppning av notifikationen från att trycka på en specifik åtgärdsknapp.
För att lokala notifikationer ska vara användbara och inte irritera användaren, följ några viktiga regler. För det första: kontrollera frekvensen — inte mer än 2–3 notifikationer per dag för icke-kritiska händelser, annars stänger användaren av alla appens notifikationer.
För det andra: ge användaren valmöjlighet. Lägg till i gränssnittet möjligheten att stänga av vissa typer av lokala notifikationer. På Android är det bekvämt att använda en separat NotificationChannel med låg importance för detta, på iOS — en separat kategori i appens inställningar.
För det tredje: kontextuell relevans — notifikationen bör visas när användaren behöver den. Geo-triggrar är idealiska för påminnelser om ärenden nära hemmet, kalendertriggrar — för möten, intervalltriggrar — för regelbundna aktiviteter som att dricka vatten eller stretcha. Blanda inte typer i onödan.
För det fjärde: testa på riktiga enheter. iOS-simulatorn emulerar inte alla leveransscenarier för lokala notifikationer, särskilt i bakgrunden. På Android använder du adb shell dumpsys notification för att kontrollera kön av schemalagda notifikationer och deras parametrar. För det femte: ge alltid användaren möjlighet att stänga av notifikationer via appens gränssnitt — detta är ett obligatoriskt UX-krav och App Store Review Guidelines.
Vanliga frågor
En lokal notifikation planeras och levereras av enheten utan servermedverkan. Push-notifikation kräver en extern tjänst (FCM, APNS) och internetanslutning. Lokala fungerar offline, push — endast med nätverksåtkomst.
iOS begränsar till 64 samtidigt schemalagda begäranden. Android har ingen strikt gräns, men över 500 notifikationer kan minska systemets prestanda och påverka leveranstiden.
Ja, på iOS använder du removePendingNotificationRequests med begäran-identifieraren. På Android anropar du NotificationManager.cancel eller avbryter PendingIntent via AlarmManager. En unik identifierare krävs för avbrytning.
På iOS krävs tillstånd obligatoriskt via requestAuthorization. På Android 13+ (Tiramisu) krävs även tillståndet POST_NOTIFICATIONS. Äldre versioner av Android kräver inte uttryckligt tillstånd för lokala notifikationer.
På iOS skapar du UNNotificationAction och lägger till i UNNotificationCategory. På Android använder du NotificationCompat.Builder.addAction med PendingIntent för BroadcastReceiver. Varje knapp utlöser en separat åtgärd i appen.
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å