Le notifiche push sono uno dei modi più efficaci per interagire con l'utente dopo l'installazione dell'app. Consentono di notificare un nuovo messaggio, uno sconto, un aggiornamento dei contenuti o ricordare un carrello abbandonato. Le notifiche push (push notifications) funzionano tramite servizi cloud: Firebase Cloud Messaging (FCM) su Android e Apple Push Notification Service (APNS) su iOS. In questo articolo analizzeremo l'architettura delle notifiche, i loro tipi e il processo di configurazione per entrambe le piattaforme. Maggiori informazioni nella documentazione ufficiale di FCM.
Punti chiave
Una notifica push è un messaggio che il server invia a un dispositivo mobile senza una richiesta dall'app. Il messaggio passa attraverso un servizio cloud (FCM o APNS) che lo consegna al dispositivo anche se l'app è chiusa. Le notifiche si dividono in due tipi: notifiche di visualizzazione (mostrate all'utente) e notifiche di dati (trasmettono dati per l'elaborazione in background).
L'architettura delle notifiche push include tre componenti: (1) il server dell'app — invia una richiesta a FCM/APNS; (2) il servizio cloud — instrada la notifica; (3) l'app client — riceve e elabora la notifica. Il server deve conoscere il Device Token del dispositivo per inviare una notifica specificamente ad esso. Per gli invii di massa si utilizza Topic Subscription — l'iscrizione dei dispositivi a canali tematici (notizie, promozioni, meteo).
Su ogni dispositivo, le notifiche vengono elaborate dal sistema operativo: Android — tramite NotificationManager e NotificationChannel, iOS — tramite UNUserNotificationCenter. L'utente può configurare il comportamento delle notifiche per ogni canale: consentire suono, banner, visualizzazione sulla schermata di blocco o disabilitare completamente. La corretta configurazione dei canali aumenta il coinvolgimento e riduce i tassi di annullamento dell'iscrizione.
In IT Sectr, progettiamo il sistema di notifiche push tenendo conto delle caratteristiche specifiche della piattaforma fin dall'inizio. Decisioni chiave: scelta tra FCM e APNS diretto, formato del payload, frequenza di invio e meccanica degli abbonamenti. Questo aiuta a evitare situazioni in cui le notifiche non arrivano o vengono bloccate dal sistema.
Firebase Cloud Messaging (FCM) è il servizio multipiattaforma di Google per la consegna delle notifiche. FCM supporta Android, iOS, Web e Flutter. Su iOS, FCM funziona tramite APNS: FCM invia una richiesta ad APNS, che consegna la notifica al dispositivo. Vantaggi di FCM: API unica per entrambe le piattaforme, analisi integrate, test A/B, argomenti e segmenti di pubblico.
Apple Push Notification Service (APNS) è il servizio nativo di Apple. Funziona solo su dispositivi Apple (iOS, macOS, watchOS, tvOS). Richiede autorizzazione diretta tramite certificato TLS o token (JWT). APNS fornisce latenza di consegna minima e integrazione diretta con le funzionalità iOS: PushKit, Notification Service Extension e Avvisi critici.
La scelta tra FCM e APNS dipende dall'architettura del progetto. Se l'app è solo per iOS — APNS offre più controllo. Se è multipiattaforma — FCM è più conveniente con un'API unica. Molti progetti usano FCM come servizio principale e configurano inoltre PushKit per VoIP su iOS. Un approccio ibrido consente di ottenere il meglio da entrambi i sistemi.
| Caratteristica | FCM | APNS |
|---|---|---|
| Piattaforme | Android, iOS, Web, Flutter | iOS, macOS, watchOS, tvOS |
| Autorizzazione | Server Key (Firebase Console) | Certificato TLS o token JWT |
| Payload massimo | 4 KB (data), 2 KB (notification) | 4 KB |
| Argomenti | Integrati (Topic Messaging) | No (implementati lato server) |
| Silent Push | Supportato | Supportato (content-available) |
| PushKit | No | Sì (VoIP, live activities) |
| Analitica | Firebase Analytics | Non integrata |
| Consegna a dispositivo spento | Limitata (dipende dal produttore) | Sì, tramite PushKit |
Una Rich Notification è una notifica che contiene non solo testo ma anche contenuti multimediali: immagini, video, audio e pulsanti di azione. Su Android viene implementata tramite stili NotificationCompat: BigPictureStyle (immagine grande), BigTextStyle (testo compresso/espanso), InboxStyle (elenco messaggi), MediaStyle (controllo riproduzione). Su iOS si utilizza Notification Content Extension — un target separato con UI personalizzata per la notifica espansa.
Silent Push (content-available su iOS) è una notifica consegnata senza essere mostrata all'utente. È destinata all'aggiornamento dei dati in background: sincronizzazione contenuti, precaricamento, aggiornamento widget. Su iOS, Silent Push richiede l'attivazione di Background Modes → Remote notifications. Su Android si utilizza FirebaseMessagingService con onMessageReceived per gestire le notifiche in background. Importante: su iOS, Silent Push ha limitazioni di frequenza e non garantisce la consegna se l'app non è in primo piano.
Una Interactive Notification consente all'utente di eseguire un'azione senza aprire l'app. Su Android sono pulsanti (Action) nella notifica: "Rispondi", "Approva", "Rifiuta". Le azioni vengono elaborate tramite PendingIntent, che avvia un BroadcastReceiver o Service. Su iOS, Notification Action viene registrata tramite UNNotificationAction e UNNotificationCategory. I pulsanti possono essere foreground (apre l'app), background (esegue in background) o destructive (azione irreversibile — elimina, blocca).
Notification Content Extension (iOS) — un controller di visualizzazione personalizzato per mostrare il contenuto esteso della notifica con pressione prolungata o 3D Touch. Notification Service Extension (iOS) — middleware per modificare il contenuto della notifica prima della visualizzazione: decifrare messaggi E2E, caricare immagini, offuscare dati riservati. Su Android non ci sono analoghi diretti — tutte le modifiche vengono eseguite in FirebaseMessagingService.
Per Android è necessario: (1) aggiungere Firebase SDK al progetto (google-services.json); (2) creare un NotificationChannel (Android 8+) per ogni categoria di notifiche; (3) implementare FirebaseMessagingService per ricevere token e messaggi in arrivo. Notification Channel è obbligatorio — senza di esso le notifiche non verranno visualizzate su Android 8+. I canali hanno priorità (IMPORTANCE_HIGH — suono + popup, IMPORTANCE_LOW — senza suono) e sono configurabili dall'utente nelle impostazioni di sistema.
Per iOS è necessario: (1) abilitare la funzionalità Push Notifications in Xcode; (2) configurare la chiave APNS sull'Apple Developer Portal; (3) richiedere l'autorizzazione tramite UNUserNotificationCenter.requestAuthorization — questa è una finestra di dialogo di sistema che viene mostrata una volta. La risposta dell'utente è critica: se l'autorizzazione non viene concessa, le notifiche non verranno consegnate. Si consiglia di spiegare all'utente perché le notifiche sono necessarie prima di mostrare la finestra di dialogo di sistema (pre-permission prompt).
Device Token (iOS) e Registration Token (Android) sono identificatori univoci del dispositivo per le notifiche push. Il token viene generato al primo avvio dell'app e può cambiare: in caso di reinstallazione, cancellazione dati, reset delle impostazioni sulla privacy. Il server deve aggiornare regolarmente i token. Firebase fornisce un'API comoda per la gestione dei token tramite onNewToken, oltre a un pannello per l'invio di notifiche di test (Firebase Console → Cloud Messaging).
Topic Subscription è uno dei meccanismi più efficaci di FCM. Un dispositivo si iscrive a un argomento (ad esempio, "news", "promo_users_ios") e il server invia notifiche per argomento senza dover memorizzare un elenco di token. Firebase Topics supporta fino a un milione di iscritti per argomento e l'invio condizionale (Condition) tramite un linguaggio di espressioni: "'news' in topics && ('US' in topics || 'UK' in topics)".
Notification Payload è la struttura JSON inviata tramite FCM/APNS. Per FCM: notification separata (parte visibile — titolo, corpo, immagine) e data (campi personalizzati per l'app). Per APNS: dizionario aps con alert, badge, sound, category e content-available. La struttura corretta del payload è critica: se notification + data arrivano contemporaneamente, l'app in background potrebbe non ricevere i dati. Si consiglia di utilizzare solo messaggi data per Android e passare i campi visivi separatamente tramite FCM Console.
Domande frequenti
FCM (Firebase Cloud Messaging) è il servizio di Google per Android e notifiche multipiattaforma. APNS (Apple Push Notification Service) è il servizio di Apple solo per iOS/macOS. FCM può consegnare notifiche tramite APNS su iOS, fungendo da server proxy.
Una Rich Notification è una notifica avanzata con contenuti multimediali: immagini, video, audio, pulsanti di azione. Su iOS viene implementata tramite Notification Content Extension; su Android tramite BigPictureStyle e InboxStyle.
Device Token è un identificatore univoco del dispositivo per inviare notifiche push. Su Android è il Registration Token di FCM; su iOS il Device Token di APNS. Il token può cambiare in caso di reinstallazione dell'app o reset delle impostazioni, quindi deve essere aggiornato sul server.
Silent Push (notifica silenziosa) è una notifica senza visualizzazione all'utente. Viene utilizzata per aggiornamenti dati in background: sincronizzazione contenuti, aggiornamento widget, precaricamento. Su iOS richiede l'attivazione di Background Modes → Remote notifications.
PushKit è un framework Apple per la consegna di notifiche ad alta priorità utilizzato nelle app VoIP (chiamate, messaggistica). PushKit consegna la notifica anche se l'app è terminata e garantisce l'avvio dell'app per l'elaborazione.
Riepilogo
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.