Notifiche push vs. sottoscrizioni Live Query: quale canale serve?

Aggiornato: ottobre 2026

Una notifica push è un avviso consegnato dal sistema operativo che raggiunge le app chiuse; una live query trasmette le modifiche ai dati mentre l’app è aperta. Presentarle come rivali è l’errore classico – coprono stati disgiunti dell’app, e la vera domanda di progettazione non è “quale delle due” ma “dove si trova l’utente in questo momento?”. La maggior parte delle app che danno una vera sensazione di tempo reale usa entrambi i canali e instrada in base a quella risposta.

Punti chiave

DomandaRisposta
Notifiche pushConsegna tramite il gateway del sistema operativo (APNs, FCM) – raggiunge le app chiuse, payload opaco di ~4 KB, best-effort
Live querySottoscrizione WebSocket – oggetti completi con permessi verificati, tempo reale, l’app deve essere aperta
La rivalitàFalsa – servono stati disgiunti dell’app e si compongono, non competono
La regola di instradamentoApp aperta → live query · app chiusa → push · tocco sul push → apertura, risottoscrizione, recupero
La modalità di erroreUsare il push come canale dati, o aspettarsi che i socket sopravvivano al processo

Entrambi i canali, in codice

Il pattern verso cui converge quasi ogni app di messaggistica, ordini e avvisi:

// JavaScript — Back4app JS SDK: one channel per app state
// While the app is OPEN — the live query delivers the data itself
const messages = new Parse.Query('Message');
messages.equalTo('conversation', conversationId);
const sub = await messages.subscribe();
sub.on('create', (m) => appendBubble(m));   // full object, real time

// While it is CLOSED — push owns delivery: register this device
const installation = await Parse.Installation.currentInstallation();
installation.set('channels', [`user-${currentUser.id}`]);
await installation.save();
// A Cloud Code afterSave trigger sends the push to this channel —
// the OS shows the alert; the tap opens the app, which re-subscribes.

Da notare che cosa gestisce ciascuna metà: la sottoscrizione consegna dati – oggetti interi, eventi tipizzati, in tempo reale. L’installazione si registra per ottenere attenzione – il diritto di interrompere l’utente più tardi, attraverso una pipeline che l’app non controlla.

Due consegne, due proprietari

I percorsi non potrebbero essere più diversi, e ogni proprietà della tabella comparativa discende da chi possiede l’ultimo miglio.

Una notifica push lascia il backend come richiesta verso un gateway gestito dal sistema operativo – i gateway push di iOS e Android (APNs, FCM), oppure sul web un servizio push del browser che parla RFC 8030. Il gateway possiede la consegna: trattiene i messaggi per i dispositivi offline, accorpa e limita sotto pressione della batteria, e risveglia l’app o mostra il banner. Quel potere preso in prestito è l’intero vantaggio – solo il sistema operativo può raggiungere un processo che non è in esecuzione – ed è anche l’intero vincolo: payload limitati a circa 4 KB, consegna best-effort, risvegli silenziosi in background razionati per giorno, e un payload fuori dal modello di permessi del backend.

Una live query non esce mai dal perimetro di fiducia: l’app mantiene un WebSocket verso il server di sottoscrizioni del backend, che confronta ogni scrittura sul database con la query sottoscritta e spinge eventi tipizzati – create, update, enter, leave, delete – con le ACL applicate per ogni sottoscrittore. Oggetti completi, latenza da tempo reale, nessun tetto al payload degno di nota. In cambio la dipendenza è brutale: la sottoscrizione è stato dentro il processo, e quando il sistema operativo sospende l’app – cosa che le piattaforme mobili fanno in modo aggressivo – il socket, e con lui il canale, sparisce.

Instradare la consegna in tempo reale in base allo stato dell'appUna scrittura sul database attiva la logica del backend. Se l'app del destinatario è aperta, una live query spinge l'oggetto completo su un WebSocket. Se l'app è chiusa, il backend invia un piccolo payload tramite il gateway push del sistema operativo, che mostra una notifica; un tocco la apre, e l'app si risottoscrive e recupera il ritardo con una query.

app aperta

app chiusa

tocco

Scrittura sul database
(messaggio, ordine, avviso)

Trigger del backend
(afterSave)

Push via live query
oggetto completo · WebSocket

Gateway push del sistema
(APNs, FCM)

Banner di notifica
payload di ~4 KB

L'app si apre →
risottoscrizione + query di recupero

Lo schermo si aggiorna sul posto

Una scrittura sul database attiva la logica del backend. Se l'app del destinatario è aperta, una live query spinge l'oggetto completo su un WebSocket. Se l'app è chiusa, il backend invia un piccolo payload tramite il gateway push del sistema operativo, che mostra una notifica; un tocco la apre, e l'app si risottoscrive e recupera il ritardo con una query.

Notifiche push vs. live query

CriterionNotifiche pushSottoscrizioni live query
Raggiunge un’app chiusaSì – il potere che le definisceNo – la sottoscrizione muore con il processo
Payload~4 KB, opaco per le ACLOggetti completi, permessi verificati per sottoscrittore
Garanzia di consegnaBest-effort; accorpabile, limitabile, scartabileAffidabile finché connessa; recupero necessario dopo un’interruzione
LatenzaNell’ordine dei secondi, dipende dal gatewayTempo reale (~RTT)
Proprietario del trasportoIl sistema operativo e il suo gatewayLa flotta di WebSocket del backend
Consenso dell’utenteRichiesta di permesso; revocabile dall’utenteNessuno – sono solo i dati dell’app
Costo dell’abusoAssuefazione alle notifiche, disinstallazioniCarico su batteria e socket in caso di sottoscrizioni eccessive
Progettato perAttenzione e riattivazioneDati e stato in-app

Le righe si compongono in modo pulito perché i due canali rispondono a domande diverse: il push risponde a “come raggiungere l’utente?”, le live query a “come tenere lo schermo fedele?” – ed è per questo che il confronto a livello di trasporto tra SSE, WebSocket e polling vive interamente dentro la seconda domanda.

Il passaggio di consegne: dove le app si rompono davvero

I bug vivono nella giuntura tra i canali. Un utente tocca un push relativo a un messaggio che è stato anche consegnato dalla live query prima della sospensione dell’app – si deduplica per ID dell’oggetto, non per canale. Arriva un push su dati a cui l’utente non ha più accesso – si recuperano attraverso l’API normale all’apertura lasciando decidere alle ACL, senza mai fidarsi del payload. L’app è rimasta chiusa tre giorni – l’app riaperta non può ricostruire il buco dai push (le notifiche non sono un registro), quindi il passaggio di consegne è sempre risottoscrivere, poi rieseguire la query di base per ricostruire la verità, tenendo aggiornata in background la registrazione del token push. Progettata una volta la giuntura, entrambi i canali diventano noiosi – che è esattamente l’obiettivo.

Casi d’uso tipici

  • Chat e messaggistica – la live query mostra la conversazione aperta; il push porta il “nuovo messaggio” attraverso lo stato chiuso. L’app a due canali per antonomasia.
  • Tracciamento di ordini e consegne – la schermata di tracciamento aperta si sottoscrive; il passaggio a “consegnato” ad app chiusa arriva come push.
  • Alerting operativo – le console di reperibilità si sottoscrivono per lo schermo a parete; il percorso del cercapersone è il push, perché nessuno tiene l’app aperta alle 3 di notte.
  • Aste e drop – movimento dei prezzi in diretta nell’app; essere superati in un’offerta mentre si è lontani è un push, con deep link di ritorno alla schermata live.
  • Coinvolgimento social – like e risposte arrivano come push di riattivazione; il feed aperto va in diretta tramite sottoscrizione.

Quale canale usare? Matrice decisionale

SituazioneScegliere
La schermata è aperta e deve restare aggiornataLive query
L’evento avviene ad app chiusa e l’utente deve saperloNotifica push
Il payload è sensibile o soggetto a permessiLive query – oppure push con soli identificatori, recupero all’apertura
Serve una consegna dei dati garantita e ordinataNessuno dei due da solo – recupero via query all’apertura, canali come acceleratori
Aggiornare un badge o un contatore in-app in tempo realeLive query
Riattivare utenti che non aprono l’app da giorniPush – l’unico canale che può farlo
Chiosco o schermo a parete che non dorme maiSolo live query; il push non aggiunge nulla

Limiti e trade-off

  • Il push non è un canale dati. Tetti al payload, instradamento opaco fuori dalle ACL e accorpamento lo rendono strutturalmente sbagliato per trasportare stato – inviare riferimenti, recuperare la verità all’apertura.
  • La consegna push è una probabilità, non una promessa. Ottimizzatori della batteria, permessi revocati e limitazioni del gateway scartano messaggi in silenzio; tutto ciò che non può andare perso ha bisogno di un percorso di riconciliazione via query.
  • Le live query si fermano al confine del processo. Nessun socket sopravvive alla sospensione; trattare una sottoscrizione come un canale sempre attivo è l’ipotesi sbagliata dietro la maggior parte dei bug del tipo “abbiamo perso degli eventi”.
  • Entrambi i canali gravano sul client. Sottoscrizioni troppo ampie consumano batteria e matching lato server; un push troppo zelante consuma la buona volontà – la disinstallazione è il rate limiting dell’utente.
  • La giuntura resta in mano a chi sviluppa. Deduplicazione, query di recupero e aggiornamento dei token sono logica applicativa; nessuno dei due canali li fornisce gratis.

Push e live query su Back4app

Back4app è una piattaforma open-source di Backend as a Service (BaaS) che combina database gestito, API REST e GraphQL generate automaticamente, autenticazione, archiviazione di file e funzioni serverless con Cloud Code. Entrambi i canali sono integrati e condividono un unico percorso di scrittura: un trigger Cloud Code afterSave sulla stessa scrittura nel database può inviare il push – tramite le integrazioni della piattaforma con i gateway, con targeting per dispositivo e per canale – mentre Live Query propaga automaticamente l’oggetto completo a ogni client sottoscritto, permessi verificati. Il diagramma di instradamento qui sopra si riduce a un trigger e a una chiamata di sottoscrizione, e la logica della giuntura – query di recupero, registrazione del token tramite la classe Installation – passa dagli stessi SDK mostrati nelle schede di codice.

Domande frequenti

Qual è la differenza tra notifiche push e live query?

Il percorso di consegna e lo stato dell'app che servono. Una notifica push attraversa il gateway push del sistema operativo e raggiunge il dispositivo anche con l'app chiusa – ma trasporta un payload piccolo e opaco, con garanzie best-effort. Una live query è una sottoscrizione WebSocket che l'app in esecuzione tiene aperta: oggetti completi, in tempo reale, con permessi verificati – e morta nell'istante in cui lo è l'app.

Le live query funzionano ad app chiusa?

No, e nessuna astuzia lato client cambia le cose. Una live query è stato dentro il processo in esecuzione – un WebSocket che l'app tiene aperto. Quando il sistema operativo sospende o termina l'app, il socket muore con lei, e le piattaforme mobili sospendono in modo aggressivo le app in background per risparmiare batteria. Raggiungere un'app chiusa è esattamente il compito che il sistema operativo riserva al proprio gateway push.

Un'app di chat dovrebbe usare le notifiche push o le live query?

Entrambe, ripartite in base allo stato dell'app. La conversazione aperta si sottoscrive a una live query – i messaggi compaiono all'istante con dati completi, indicatori di digitazione e conferme di lettura inclusi. L'app chiusa si affida al push per avvisare il destinatario, con il payload appena sufficiente a disegnare il banner. Il tocco apre l'app, che si risottoscrive e riesegue la query per recuperare il ritardo. Ogni messenger diffuso funziona così.

La consegna delle notifiche push è garantita?

No – la consegna è best-effort per progetto. I gateway del sistema operativo accorpano, limitano e scartano messaggi sotto pressione della batteria, gli utenti disattivano del tutto i permessi e i dispositivi diventano irraggiungibili. I push silenziosi in background sono limitati ancora più duramente di quelli visibili. Il push va trattato come un colpetto sulla spalla per risvegliare l'app, mai come un contratto di trasporto dati; l'app deve riconciliare lo stato con una query dopo l'apertura.

Quanto può essere grande il payload di una notifica push?

Kilobyte, non dati. I gateway del sistema operativo limitano i payload a circa 4 KB, e il payload è opaco per il modello di permessi del backend – qualunque cosa ci finisca dentro viaggia nella pipeline delle notifiche, fuori dalle ACL. Il pattern robusto invia solo identificatori e stringhe da mostrare, e lascia che l'app aperta recuperi gli oggetti veri attraverso l'API normale, con permessi verificati.

Che cos'è una notifica push silenziosa?

Un push senza avviso visibile che chiede al sistema operativo di risvegliare brevemente l'app in background – di solito per precaricare dati, così che la prossima apertura sembri istantanea. È la risorsa più razionata del sistema push: il sistema operativo assegna un budget di risvegli per app e per giorno e ignora l'eccedenza, quindi il push silenzioso funziona come livello di ottimizzazione, mai come canale di sincronizzazione affidabile.

Servono sia le notifiche push sia le live query?

Se agli utenti interessano eventi che accadono mentre l'app è chiusa – messaggi, ordini, avvisi – sì, quasi inevitabilmente. I due canali coprono stati disgiunti dell'app: le live query governano l'esperienza ad app aperta, il push governa la riattivazione dallo stato chiuso. I backend che integrano entrambi lasciano che una sola scrittura sul database si propaghi a ciascun canale, così avere bisogno di entrambi non significa più costruire due volte.

Termini correlati

Confronta con

Fonti di approfondimento

Pronto a costruire il tuo backend?

Avvia il tuo progetto su Back4app in pochi minuti: database, autenticazione, API e Cloud Code inclusi. Nessuna carta di credito richiesta.

Scritto e revisionato da Back4app Engineering, Back4app Engineering · Pubblicato il 2026-10-23