HomeGuidesMobile app development
Mobile app development · Decision guide

Local vs Push Notifications: Which Does Your App Need?

Use a local notification when the phone already knows what to remind someone about and when. Use a remote, or push, notification when a service learns about a new event or change that the phone does not yet know. Some apps need both. Start with the source of the information—not with a plugin name or a promise that every alert will arrive exactly on time.

The useful takeaway

A reminder saved on a phone, a message accepted by a push provider, an alert displayed and a person reading it are different states. Keep the current task or event in the app; do not make a notification the only record of what is true.

The difference is where the information starts

Imagine two fictional features. A reader sets “Read at 20:00” on one phone. The app already has the instruction and can ask the operating system to handle a local trigger. A book-club organizer changes a meeting from another device. The participant’s phone cannot learn that change merely by keeping its old reminder.

Local: the phone knows

  1. ChoosePerson saves a reminder time on this phone
  2. ScheduleApp asks the operating system to handle the trigger
  3. Present, if allowedDevice settings and platform behavior still apply

Push: a service learns first

  1. ChangeA shared record changes on the service
  2. SendTrusted sender → push service → device
  3. Open current recordAlert draws attention; app checks the latest available state
Original HTML planning diagram, not an app screen or a measured delivery trace. A service may update a shared schedule that a device later uses for local notifications; the paths can be combined. Neither path proves that a person saw or read an alert.

Apple’s local-notification guide describes app-created content and trigger conditions handled by the system, including when the app is not running. Local does not mean a Dart timer must keep running in the foreground. It also does not mean a pending request will update itself when the underlying task changes.

For remote delivery, Apple describes a provider, APNs and the device. A managed provider or an existing service may supply the sending side; you do not automatically need a new custom server. You do need to decide which trusted system knows the event and is allowed to notify the intended recipient.

A closed laptop, a phone with a dark screen and blank index cards on a workspace.
A mobile-project planning scene with no product interface or client project displayed. AI-generated editorial illustration; not an app screenshot or a customer record.

Choose the path for each feature, not once for the whole app

The rows below are design starting points, not a list of tested Moocsoft features. An app may use local reminders for a private routine and push updates for shared events. Write down both instead of labeling the whole product “a push-notification app.”

Local versus push: four fictional feature decisions
FeatureWho knows first?Starting choiceDecision still needed
A personal reading reminder chosen on this phoneThe phone already has the time and message.Start with a local notification.Define editing, cancellation and the intended time-zone behavior.
A club organizer changes a shared meeting timeThe organizer’s service owns the new time.Use a remote update path; push can draw attention to it.Keep the current meeting available in the app even if no alert is seen.
A known reminder that must also change from another deviceThe current schedule is shared, not just local.Synchronize the schedule; choose how each device alerts.Decide which device should notify and how stale local requests are replaced.
A countdown shown only while the screen is openThe active screen knows the remaining time.An in-app display may be enough.Specify separately whether anything should happen after leaving the screen.

A local notification whose content and trigger are already on the phone need not fetch a new server message at its due time. A reminder whose next schedule depends on a server response has a different dependency. Offline behavior belongs to the specific action, not to the word “local.”

When another device can edit the schedule, first decide how the app learns the current schedule. Push can prompt attention or refresh, but it is not itself a complete synchronization policy. The offline-first guide covers saved records, pending changes and conflicts. The backend decision guide helps identify which system owns the accepted result.

Worked example: the old alert says 19:00, but the meeting moved

Consider a fictional book-club specification: meeting M-42 is edited from 19:00 to 18:30 on the same date in the same named meeting time zone. That is 30 minutes earlier, not a time-zone conversion. The proposed rule is that a notification opens the meeting by its identifier and the app checks the current record when it can. This is an intended behavior to implement and test—not a claim about an existing app.

A changed meeting and an old notification — proposed behavior
StageFictional stateRule for the app
1. Original recordThe service stores meeting M-42, revision 1, starting at 19:00.An alert may refer to this version; it is not a permanent copy of the meeting’s truth.
2. Organizer editsThe service accepts revision 2, starting at 18:30.The authoritative time is now 18:30, whether or not an update alert has arrived.
3. An older alert remainsA participant still sees a notification saying 19:00.Do not infer that the service reverted to revision 1 or that the participant read the change.
4. Participant taps onlineThe app opens M-42 and successfully retrieves the current record.Show revision 2 at 18:30; do not overwrite it with the old notification text.
5. Participant taps offlineThe app can only open its cached revision 1.Label it last known / not refreshed. Do not claim that 19:00 is confirmed current.

The two tap rows are alternative test conditions, not a claim that one participant completed both. An alert may be delayed or remain visible after the information changes. For example, APNs documents best-effort delivery and possible reordering. Do not use arrival order as a database version rule.

Decide how the app will recognize a stale revision, what it shows while refreshing and what it can safely say offline. Keep the old payload from overwriting a newer saved record. If the current record cannot be retrieved, explain that limitation instead of silently treating the notification text as freshly confirmed.

Also decide what should expire. A meeting-update alert delivered after the event may no longer help. FCM’s message-lifespan documentation explains delayed delivery and expiration. An expiration limit bounds an attempt; it does not guarantee delivery before that limit. Choose freshness and duplicate-handling rules for the task rather than promising “exactly once, instantly.”

Permission, scheduling and visible delivery are separate

Ask for notification access in the context of an understandable feature, and leave a useful way to view the task or event if access is declined. For ordinary, non-exempt app notifications, Android documents the runtime notification permission on Android 13 and later. That permission is not a guarantee of timing, and it is not a blanket description of every background data message.

Scheduling capabilities are a separate question. Android’s alarm guidance distinguishes inexact scheduling from exact alarms and their requirements. A routine reading nudge should not silently become an alarm-clock promise. Agree whether “around this time” is acceptable before choosing the platform mechanism.

Presentation also depends on app state. Firebase’s Flutter receiving guide explains that notification messages received in the foreground do not display a visible notification by default on iOS and Android. The app needs an explicit presentation decision; “the callback ran” and “a banner appeared” are different observations.

Use narrow status labels in a test record: permission state, local request scheduled, provider accepted, device received, alert visibly displayed, or user action observed. FCM explicitly distinguishes acceptance from delivery. Do not infer reading from a successful send response, and do not label an unobserved state “passed.”

Agree what happens after an edit, completion or travel

Give each reminder a relationship to its task so the implementation can replace or cancel the correct pending request after an edit or completion. Apple’s local scheduling guide describes cancelling pending requests by identifier. That does not promise to recall an alert already displayed, remove every remote copy or prove the person has not already seen it.

Choose the time meaning explicitly. “20:00 wherever I am” is a wall-clock preference. “The meeting begins at this agreed instant” is different. Write the event’s time zone, whether a travelling person’s reminder should move, and what happens around clock changes. A fixed number of seconds is not a substitute for deciding the calendar rule. Do not infer a Flutter package’s behavior without checking its current platform configuration and testing the actual build.

Keep sensitive details out of lock-screen wording unless the product has deliberately addressed that exposure and the person’s preferences. “Open the app to review an update” may be more suitable than embedding private record details. Opening an alert must still respect the current account and access rules; an identifier in a notification is not authorization to read somebody else’s record.

Turn the decision into a small, testable brief

For each feature, record: event source; local or remote path; intended recipient; time meaning and freshness; edits and cancellation; denied-access behavior; and the destination opened on a tap. List the service owner and platform setup separately. Use fictional test records, never production tokens or private messages, in a public brief.

Notification acceptance plan — not run on an app
CaseProposed actionExpected behavior to agreeActual result
Permission declinedChoose a reminder but decline notification access.The underlying record remains usable; the app explains that alerts are unavailable.Untested
Local reminder edited or completedChange the scheduled time, then complete the task before it is due.Replace or cancel the associated pending request under the agreed rule; do not leave an obsolete reminder queued.Untested
Known reminder, device offlineSchedule a local reminder with its content already on the device; disconnect the test device.Observe the actual platform behavior and timing. No new server event is assumed to have reached the phone.Untested
Remote change, device offlineUpdate M-42 on the service while the test device is disconnected.The app does not claim the remote change arrived; after reconnection, refresh the record and record any alert separately.Untested
App open versus backgroundRepeat the same remote event with the app in each state.Compare the agreed in-app and system presentation; do not count receiving a payload as seeing a banner.Untested
Stale or repeated messageUse approved test messages for an older revision and a repeated event.Keep the current record; apply the specified stale-message and duplicate-alert rules.Untested
Time-zone or clock changeChange the test device setting after a reminder is scheduled.Compare with the chosen wall-clock or fixed-instant rule; record the device, setting and actual outcome.Untested

Run the agreed cases on intended iOS and Android test builds. Record build, device, system version, app state, permissions, network state and the observation. The table is a plan, not a delivery benchmark, accessibility audit or a completed notification implementation. This web page sends no notifications and asks for no browser notification permission.

Put the chosen behavior into the first-release app brief before an estimate. Moocsoft offers Flutter mobile app development; bring one specific reminder or update journey and the unresolved decisions to a project discussion. No provider, price or delivery outcome is promised by this guide.

Common questions

What is the difference between local and push notifications?

A local notification is created and scheduled on the device using information it already has. A push notification originates from a remote sending system and reaches the device through a push service. An app can use both for different features.

Do local reminders need an internet connection?

A reminder with its content and trigger already on the device need not fetch a new server message at the due time. Features that depend on a new remote event or schedule still need a way to receive that information. Permission, timing and platform behavior remain separate checks.

Does a push notification need a custom backend?

It needs a trusted sending system, but an existing business service or managed provider may supply that part. Decide which service knows the event, who may send it and who maintains the configuration; do not assume a new custom server is required.

Does a successful send mean the person saw the notification?

No. Provider acceptance, device receipt, visible presentation and a person reading or acting are different states. Record only what the available evidence supports.

What should happen when an old notification is opened?

Open the intended record and check its current state when possible. Do not overwrite newer information with an older payload. If only cached information is available, identify it as last known rather than confirmed current.

Does Flutter make notification behavior identical on iOS and Android?

No. A shared app can reuse parts of its flow, but permissions, scheduling, foreground presentation and background behavior still need appropriate platform setup and real-build tests. This guide does not select or install a notification package.

References and further reading

Published by Moocsoft, an independent Flutter development studio. Examples and worksheets are illustrative. Project scope, platform requirements and release responsibilities need to be agreed for each project.

From a brief to a project conversation

Have a mobile app idea?

Moocsoft offers Flutter mobile app development. Bring your user goal, target platforms and existing materials to discuss whether the project is a fit.