Notifiche locali nello sviluppo mobile: essenza, tipi e come funzionano

Autore: IT Sectr Pubblicato: 2026-03-19 Tempo di lettura: 8 min

Una notifica locale è un messaggio che l’app invia all’utente senza il coinvolgimento di un server remoto. Tutti i dati vengono elaborati e visualizzati direttamente sul dispositivo del destinatario. Questo meccanismo è adatto per promemoria, timer e sveglie quando l’app è in background o chiusa. Secondo la Documentazione per sviluppatori Apple, UNUserNotificationCenter fornisce una gestione centralizzata delle notifiche locali su iOS.

Punti chiave

  • Notifica locale — un messaggio pianificato e consegnato dal dispositivo senza coinvolgimento del server
  • Piattaforme — Android usa NotificationManager, iOS usa UNUserNotificationCenter
  • Pianificazione — le notifiche possono essere attivate da tempo, geolocalizzazione o calendario
  • Limitazioni — le notifiche locali non funzionano tra dispositivi e richiedono logica di sincronizzazione separata
  • UX — notifiche configurate correttamente aumentano il coinvolgimento e riportano l’utente all’app

Cos’è una notifica locale?

Una notifica locale è un messaggio di attivazione generato e visualizzato dal sistema operativo sullo stesso dispositivo in cui è installata l’app. A differenza delle notifiche push, quelle locali non passano attraverso un server esterno — tutta la logica di pianificazione viene eseguita sul client.

Queste notifiche funzionano indipendentemente dallo stato dell’app: attiva, ridotta a icona o completamente chiusa. Il sistema operativo gestisce la consegna all’ora pianificata, mentre lo sviluppatore specifica solo il contenuto e il trigger.

Il sistema garantisce la consegna della notifica locale anche senza connessione di rete. Questo è un vantaggio fondamentale rispetto alle notifiche push, che richiedono una connessione Internet stabile e un server funzionante.

Componenti principali di una richiesta

Ogni notifica locale è composta da tre parti: contenuto (titolo, corpo, suono), trigger (condizione temporale o geografica) e identificatore della richiesta. L’identificatore consente di annullare o aggiornare la notifica prima della consegna.

Uno sviluppatore può pianificare fino a 64 notifiche locali per app su iOS e un numero illimitato su Android. Questa differenza è dovuta a vincoli architetturali dei sistemi operativi.

Come funzionano le notifiche locali su iOS e Android?

Entrambe le piattaforme forniscono le proprie API per lavorare con le notifiche locali. Su iOS, il componente centrale è UNUserNotificationCenter, su Android — NotificationManager. Nonostante le diverse interfacce, la logica è la stessa: l’app crea una richiesta, la registra nel sistema e il OS consegna la notifica all’ora pianificata.

iOS utilizza UNCalendarNotificationTrigger per eventi calendario, UNTimeIntervalNotificationTrigger per intervalli e UNLocationNotificationTrigger per la geolocalizzazione. Android offre AlarmManager, WorkManager e pianificazione precisa tramite setExact.

Da Android 12 — SCHEDULE_EXACT_ALARM richiede un’autorizzazione speciale dall’utente. Su iOS, l’autorizzazione viene richiesta una volta tramite UNUserNotificationCenter.requestAuthorization e l’utente sceglie il livello di accesso: banner, suoni, badge.

Tipi di notifiche locali

Le notifiche locali sono classificate per tipo di trigger, non per contenuto. Ogni tipo determina quando e in quali condizioni la notifica verrà mostrata all’utente.

Confronto dei trigger per piattaforma

Su iOS e Android, i tipi di trigger sono implementati diversamente, sebbene la classificazione logica sia la stessa. iOS utilizza UNCalendarNotificationTrigger per le date, UNTimeIntervalNotificationTrigger per gli intervalli e UNLocationNotificationTrigger per la geolocalizzazione. Android offre AlarmManager con setExact e setRepeating, oltre a WorkManager per attività differite.

Tipo di triggerDescrizioneEsempio
Intervallo di tempoNotifica N secondi dopo l’avvioTimer di countdown
Data calendarioNotifica a una data e ora specifichePromemoria riunione
GeolocalizzazioneNotifica all’ingresso/uscita da una regionePromemoria al negozio
ImmediatoConsegna immediata alla chiamata APINotifica di download

iOS supporta anche UNNotificationAttachment — allegare un’immagine, audio o video al corpo della notifica. Android supporta modelli personalizzati con pulsanti e immagini grandi tramite NotificationCompat.Style.

La scelta del trigger dipende dallo scenario: i promemoria del calendario funzionano meglio con trigger del calendario, i promemoria geografici con la geolocalizzazione. I trigger a intervallo sono adatti per eventi ricorrenti con periodo fisso.

Comportamento dei trigger in background

Su iOS, le notifiche locali vengono consegnate dal sistema anche quando l’app è chiusa — UNUserNotificationCenter gestisce la coda in modo indipendente. Su Android, la consegna dipende dal meccanismo scelto: AlarmManager si attiva anche con lo schermo spento, mentre WorkManager tiene conto del risparmio energetico.

Casi d’uso nelle app mobili

Le notifiche locali risolvono attività in cui l’infrastruttura esterna è eccessiva o non disponibile. Scenari principali: promemoria, timer, suggerimenti di onboarding e azioni differite.

  • Promemoria — un’app calendario crea una notifica locale per la data dell’evento specificata
  • Suggerimenti di onboarding — un giorno dopo l’installazione, l’app mostra un suggerimento a schermo
  • Timer — un timer da cucina si attiva dopo un tempo impostato anche con l’app chiusa
  • Avanzamento operazioni — notifica di download completato o esportazione dati

Le ricerche di Localytics mostrano che le app che utilizzano promemoria locali trattengono il 35% in più di utenti nella prima settimana dopo l’installazione. Questo rende le notifiche locali un potente strumento di onboarding.

È importante non abusare della frequenza — il sistema raggruppa le notifiche della stessa app e l’utente può disattivare tutte le notifiche locali se diventano fastidiose. La frequenza ottimale è non più di 2–3 notifiche al giorno per eventi non critici.

Esempio di pianificazione su Android

Per pianificare una notifica locale su Android, utilizza NotificationManager insieme ad AlarmManager. Su Android 8+, devi prima creare un canale di notifica, altrimenti la notifica non verrà visualizzata.

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

val channel = NotificationChannel(
    channelId,
    "Promemoria",
    NotificationManager.IMPORTANCE_HIGH
).apply {
    description = "Canale per promemoria di attività"
}

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
)

Su Android 12+, verifica l’autorizzazione SCHEDULE_EXACT_ALARM prima di chiamare setExact. Se l’autorizzazione non è concessa — utilizza setWindow, che garantisce la consegna entro una finestra temporale.

Gestione in BroadcastReceiver

Quando AlarmManager si attiva, il sistema invia un Intent broadcast che viene ricevuto da BroadcastReceiver. Al suo interno, devi creare e mostrare la notifica tramite NotificationManager. Assicurati che PendingIntent utilizzi FLAG_UPDATE_CURRENT, altrimenti le notifiche vecchie continueranno a utilizzare un Intent obsoleto quando i dati cambiano.

Esempio di pianificazione su iOS

Su iOS, le notifiche locali vengono create tramite UNUserNotificationCenter utilizzando UNMutableNotificationContent e uno dei trigger. Prima di pianificare, devi richiedere l’autorizzazione all’utente.

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 = "Promemoria attività"
content.body = "Non dimenticare di completare il rapporto entro le 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 supporta fino a 64 richieste simultanee di notifiche locali. Se il limite viene superato, il sistema rifiuta le nuove richieste fino a quando quelle attive non vengono consegnate o annullate. Utilizza getPendingNotificationRequests per verificare la coda corrente.

Gestione della risposta del delegato

Quando un utente interagisce con una notifica locale su iOS, viene chiamato il metodo userNotificationCenter:didReceive response del delegato UNUserNotificationCenterDelegate. Questo metodo fornisce l’identificatore della richiesta, actionIdentifier (quale pulsante è stato premuto) e userInfo personalizzato. Ciò consente di distinguere tra una semplice apertura della notifica e la pressione di un pulsante di azione specifico.

Best practice per le notifiche locali

Per rendere le notifiche locali utili invece che fastidiose, segui diverse regole chiave. Primo: controlla la frequenza — non più di 2–3 notifiche al giorno per eventi non critici, altrimenti l’utente disattiverà tutte le notifiche dell’app.

Secondo: dai all’utente la possibilità di scegliere. Aggiungi nell’interfaccia la possibilità di disattivare determinati tipi di notifiche locali. Su Android, utilizza un NotificationChannel separato con importanza bassa; su iOS, una categoria separata nelle impostazioni dell’app.

Terzo: rilevanza contestuale — la notifica dovrebbe apparire quando l’utente ne ha bisogno. I trigger geografici sono ideali per promemoria vicino a casa, i trigger del calendario per riunioni, i trigger a intervallo per attività regolari come bere acqua o fare stretching. Non mescolare i tipi inutilmente.

Quarto: testa su dispositivi reali. Il simulatore iOS non emula tutti gli scenari di consegna delle notifiche locali, specialmente in background. Su Android, utilizza adb shell dumpsys notification per verificare la coda delle notifiche pianificate e i loro parametri. Quinto: fornisci sempre all’utente la possibilità di disattivare le notifiche tramite l’interfaccia dell’app — questo è un requisito obbligatorio di UX e delle linee guida di revisione dell’App Store.

Domande frequenti

Qual è la differenza tra una notifica locale e una push?

Una notifica locale viene pianificata e consegnata dal dispositivo senza coinvolgimento del server. Una notifica push richiede un servizio esterno (FCM, APNS) e una connessione Internet. Le notifiche locali funzionano offline, le push solo con accesso alla rete.

Quante notifiche locali si possono pianificare?

iOS limita a 64 richieste pianificate contemporaneamente. Android non ha un limite rigoroso, ma oltre 500 notifiche potrebbero ridurre le prestazioni del sistema e influenzare i tempi di consegna.

Si può annullare una notifica locale dopo la pianificazione?

Sì, su iOS utilizza removePendingNotificationRequests con l’identificatore della richiesta. Su Android, chiama NotificationManager.cancel o annulla il PendingIntent tramite AlarmManager. Un identificatore univoco è obbligatorio per l’annullamento.

È necessaria l’autorizzazione dell’utente per le notifiche locali?

Su iOS, l’autorizzazione è obbligatoria tramite requestAuthorization. Su Android 13+ (Tiramisu), è richiesta anche l’autorizzazione POST_NOTIFICATIONS. Le versioni precedenti di Android non richiedono autorizzazione esplicita per le notifiche locali.

Come aggiungere pulsanti a una notifica locale?

Su iOS, crea una UNNotificationAction e aggiungila a UNNotificationCategory. Su Android, utilizza NotificationCompat.Builder.addAction con un PendingIntent che punta a BroadcastReceiver. Ogni pulsante attiva un’azione separata nell’app.

Riepilogo

  • Notifiche locali — messaggi pianificati e consegnati dal dispositivo senza infrastruttura server
  • UNUserNotificationCenter — l’API principale per le notifiche locali su iOS
  • NotificationManager — l’API principale per le notifiche locali su Android
  • Tipi di trigger — intervallo di tempo, data calendario, geolocalizzazione e consegna immediata
  • Limiti — iOS limita a 64 richieste pianificate, Android non ha limiti rigidi
  • Autorizzazioni — iOS e Android 13+ richiedono il consenso esplicito dell’utente per le notifiche
  • Offline — le notifiche locali funzionano senza connessione Internet, rendendole più affidabili delle push

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche