← blog
Firebase Guida ·
28 luglio 2026·14 min

Guida completa a Firebase:
RTDB, Firestore, Auth, Storage e prezzi spiegati con esempi reali

Firebase copre la maggior parte delle esigenze di backend per un'app web senza scrivere un server dedicato — ma scegliere tra i suoi servizi non è sempre ovvio. Questa guida mappa le decisioni principali (quale database, come autenticare, come proteggere i dati, quanto costa) e collega ogni argomento a un esempio reale, tratto da progetti in produzione su questo sito.

Cos'è Firebase e quando ha senso usarlo

Firebase è la piattaforma Backend-as-a-Service di Google: un insieme di servizi gestiti (database, autenticazione, storage, funzioni serverless, notifiche push) pensati per far girare un'app senza dover costruire e mantenere un'infrastruttura server tradizionale. Per chi sviluppa da solo o in piccoli team, questo significa concentrarsi sul frontend e sulla logica di prodotto, delegando a Firebase la parte infrastrutturale.

Ha senso usarlo quando: l'app ha bisogno di dati sincronizzati in tempo reale tra più client, l'autenticazione utente è un requisito standard (email/password, Google, telefono), il volume di traffico è variabile e non giustifica un server sempre acceso, e il team preferisce velocità di sviluppo a controllo infrastrutturale granulare. Tutti i progetti descritti in questa guida — dai gestionali interni ai giochi multiplayer, dalle chat alle PWA con notifiche push — condividono questo profilo.

💡

Questa guida non sostituisce la documentazione ufficiale Firebase, che resta la fonte più aggiornata per API e limiti tecnici. È una mappa delle decisioni pratiche, con link a implementazioni reali per ogni argomento.

RTDB vs Firestore: quale database scegliere

È la prima decisione, e quella con più conseguenze a lungo termine. Firebase offre due database NoSQL distinti — Realtime Database (RTDB) e Firestore — che sembrano simili ma hanno modelli dati e casi d'uso ideali diversi.

Realtime Database (RTDB)Firestore
Modello datiUn unico grande albero JSONDocumenti raggruppati in collezioni
QuerySemplici, limitateComposte, con più filtri e indici
Latenza aggiornamenti liveMolto bassaBassa, leggermente superiore a RTDB
PrezzoA banda (GB trasferiti)A operazione (letture/scritture/eliminazioni)
Caso d'uso idealePresenza online, chat, contatori liveCataloghi, dati relazionali, ricerche filtrate

Nella pratica, molti progetti reali usano entrambi insieme: RTDB per lo stato live che deve propagarsi istantaneamente (presenza, notifiche in arrivo), Firestore per dati strutturati che richiedono query più ricche (storico, cataloghi). Non è un compromesso — è sfruttare i punti di forza distinti di ciascun servizio.

C'è anche una differenza pratica nel modo in cui si leggono i dati che vale la pena capire prima di scegliere. RTDB offre due modalità di lettura fondamentalmente diverse: once() legge il dato una sola volta e chiude la connessione, adatto a letture puntuali dove non serve seguire i cambiamenti; on() apre invece un listener permanente che notifica ogni modifica in tempo reale, indispensabile per interfacce che devono aggiornarsi da sole senza refresh manuale. Usare on() quando basterebbe once() è uno spreco di connessioni aperte; il contrario, usare once() per dati che invece cambiano di continuo, produce un'interfaccia che sembra bloccata o non aggiornata.

Firestore ha un pattern simile con get() per letture singole e onSnapshot() per listener in tempo reale, ma aggiunge la possibilità di query composte con più condizioni where() concatenate — qualcosa che in RTDB richiede di ristrutturare i dati con indici manuali o filtrare lato client dopo aver scaricato più dati del necessario.

Approfondimento pratico

Un caso reale che usa entrambi i database nello stesso progetto, ciascuno dove rende meglio: sistema di tracciamento visitatori con RTDB per la presenza live e Firestore per lo storico persistente.

Autenticazione: dal login base ai ruoli custom

Firebase Authentication gestisce login con email/password, provider social (Google, Facebook) e telefono via SMS, con sessioni persistenti gestite automaticamente. Per la maggior parte delle app questo basta: nessuna gestione manuale di password, hashing o sessioni.

Il limite emerge quando servono ruoli e permessi granulari — ad esempio distinguere un amministratore da un utente standard, o dare a ciascun utente accesso solo ai propri dati in modo verificabile lato server. La soluzione è un Custom Token: un token firmato lato server (tipicamente con una Cloud Function o una Netlify Function) che include claim personalizzati, verificabili poi nelle security rules del database.

⚠️

Un errore comune nei progetti che partono come prototipo interno: condividere le stesse credenziali tra più persone invece di dare a ciascuno un account individuale. Funziona finché il team è una persona sola, ma appena si aggiunge qualcuno diventa un problema di sicurezza e di audit trail.

Approfondimento pratico

Security Rules: la parte che nessuno legge finché non è tardi

Le Security Rules sono il meccanismo con cui RTDB e Firestore decidono chi può leggere o scrivere cosa. Sono l'unica vera barriera di sicurezza lato server, perché tutto il resto (validazione JavaScript nel client, controlli nell'interfaccia) può essere bypassato da chiunque apra i DevTools.

Il default di Firebase in modalità test è accesso completamente libero per 30 giorni — pensato per prototipare velocemente, ma pericoloso se dimenticato in produzione. La pratica corretta è passare a regole deny-by-default: tutto negato salvo esplicita autorizzazione, verificata tramite l'autenticazione dell'utente o i claim del suo token.

💡

Le security rules vanno aggiornate durante una migrazione di autenticazione, non solo alla fine: un aggiornamento posticipato lascia una finestra in cui il vecchio e il nuovo sistema convivono senza essere entrambi coperti correttamente dalle regole.

Approfondimento pratico

Cloud Storage: file, immagini e documenti

Firebase Storage gestisce l'upload di file binari (immagini, PDF, documenti) separatamente dal database, che dovrebbe contenere solo metadati (nome file, dimensione, URL) e non i blob veri e propri. È la scelta naturale per chi è già nell'ecosistema Firebase, con security rules coerenti con quelle del database.

Un dettaglio importante dal 2026: Cloud Storage richiede sempre il piano Blaze, anche con utilizzo minimo — non è più disponibile sul piano gratuito Spark. Chi vuole restare a costo zero senza questo vincolo può appoggiarsi a un servizio esterno con tier gratuito, mantenendo il resto dell'app su Firebase Spark.

Approfondimento pratico

Cloud Functions e l'alternativa Netlify Functions

Alcune operazioni non possono avvenire lato client per motivi di sicurezza: chiamate ad API di terze parti che richiedono una chiave privata, generazione di Custom Token, invio di email o SMS. Firebase offre Cloud Functions per questo, ma chi già ospita il frontend su Netlify può usare Netlify Functions come alternativa equivalente, evitando di aggiungere un secondo provider cloud solo per la logica server-side.

La scelta tra le due dipende più dall'hosting esistente che da differenze tecniche sostanziali: se il sito è già su Netlify, le Netlify Functions riducono la superficie di configurazione; se il progetto è interamente su Google Cloud/Firebase, le Cloud Functions restano più coerenti con il resto dello stack.

Ci sono comunque differenze pratiche che pesano nella scelta. Le Netlify Functions hanno un limite di durata di esecuzione più stretto (10 secondi sul piano gratuito, contro i minuti disponibili su Cloud Functions), quindi operazioni lunghe come l'elaborazione di file di grandi dimensioni possono richiedere Cloud Functions o un'architettura diversa. Le Cloud Functions, dall'altro lato, richiedono di gestire un secondo progetto Google Cloud con la propria configurazione IAM — un livello di complessità in più se il resto del progetto vive già interamente su Netlify. Per la maggior parte delle integrazioni descritte in questa guida (proxy verso API esterne, generazione di Custom Token, invio di notifiche), il tempo di esecuzione richiesto è nell'ordine di pochi secondi, quindi entrambe le opzioni funzionano bene.

Approfondimento pratico

Prezzi: Spark, Blaze e come evitare sorprese

Firebase ha due piani: Spark (gratuito, con limiti generosi) e Blaze (pay-as-you-go). Un equivoco comune è pensare che Blaze significhi automaticamente "a pagamento" — in realtà è una tariffazione a consumo, e con traffico contenuto la fattura reale può restare a zero euro anche su questo piano.

Spark (gratuito)Blaze (pay-as-you-go)
Costo base€0€0 + consumo oltre le soglie gratuite
Cloud StorageNon disponibile (dal 2026)Disponibile
Cloud Functions outboundLimitatoCompleto
Adatto aPrototipi, MVP, app interne piccoleProgetti con Storage o traffico in crescita

Il consiglio pratico più utile: impostare un budget alert su Google Cloud prima ancora di passare a Blaze. Un avviso configurato per tempo evita che un picco di traffico imprevisto (bot, bug con loop di richieste) generi una spesa inattesa prima di accorgersene.

Vale la pena capire anche come vengono addebitati i singoli servizi, perché il modello di costo cambia il modo in cui conviene progettare l'app. RTDB fattura principalmente in base alla banda trasferita (GB scaricati dai client), quindi un'app che invia payload grandi a ogni lettura costa di più anche con poche richieste. Firestore invece fattura per operazione — ogni lettura, scrittura ed eliminazione di documento ha un costo fisso indipendente dalla dimensione — quindi un pattern che fa molte piccole letture ripetute (ad esempio, rileggere lo stesso documento a ogni interazione utente invece di tenerlo in cache locale) può costare più del previsto anche con payload minuscoli. Cloud Functions fattura per invocazioni, tempo di calcolo e banda in uscita, con un tier gratuito mensile che copre comodamente un uso leggero.

Approfondimento pratico

Guida dedicata a Spark vs Blaze, con tabella prezzi per servizio e istruzioni passo passo per configurare un budget alert.

Come si combinano i pezzi: un'architettura tipo

Vista la mappa dei singoli servizi, aiuta vedere come si compongono in un'app reale. Un pattern ricorrente nei progetti di questa guida, applicabile alla maggior parte delle app CRUD con più utenti: Firebase Authentication gestisce il login e genera un token di sessione; una Cloud Function o Netlify Function, invocata al login, crea un Custom Token con claim per ruolo (es. role: 'admin' o role: 'user'); le security rules di RTDB o Firestore leggono quel claim per decidere cosa l'utente può leggere o scrivere; Storage gestisce i file allegati, con security rules coerenti; e un ultimo layer di Cloud/Netlify Functions gestisce le operazioni che richiedono un segreto protetto, come l'invio di notifiche push o chiamate ad API esterne.

Questo schema non è un requisito rigido — molti progetti più semplici funzionano bene solo con Authentication base e security rules che verificano request.auth.uid senza claim custom. Il livello di complessità va introdotto solo quando serve davvero: aggiungere Custom Token e ruoli granulari a un'app con un solo tipo di utente è complessità inutile che rallenta lo sviluppo senza benefici reali.

💡

La domanda utile prima di aggiungere un pezzo dell'architettura non è "Firebase lo supporta?" ma "il mio progetto ha davvero bisogno di questa distinzione oggi?". Molti dei pattern più complessi descritti in questa guida sono nati da un problema reale incontrato in produzione, non da una scelta preventiva.

Quando Firebase NON è la scelta giusta

Firebase non è la scelta universale. Vale la pena considerare alternative quando: servono query relazionali complesse con join tra più entità (un database relazionale tradizionale come PostgreSQL è più adatto); il progetto ha requisiti di compliance specifici che richiedono controllo completo su dove risiedono i dati (alcuni settori regolamentati impongono hosting on-premise o in giurisdizioni specifiche); il team ha già investito in un'infrastruttura diversa (AWS, Azure) e cambiare stack non porterebbe benefici sufficienti a giustificare la migrazione; oppure il volume di dati e traffico è talmente grande da rendere i costi Firebase meno prevedibili di un'infrastruttura dimensionata su misura.

Per la maggior parte dei progetti personali, MVP, app interne e strumenti con traffico moderato — il profilo di tutti gli esempi in questa guida — Firebase resta comunque la scelta più rapida da implementare e più economica da mantenere.

Errori comuni da evitare

Checklist prima del lancio


Domande frequenti

Devo usare RTDB o Firestore per il mio progetto?

Dipende dal tipo di dati: RTDB è più adatto a dati semplici con aggiornamenti frequenti e bassa latenza (presenza online, chat, contatori live); Firestore è migliore per query complesse con più filtri, paginazione e strutture dati più articolate. Molti progetti reali usano entrambi insieme, ciascuno dove rende meglio.

Firebase è gratuito?

Il piano Spark è gratuito con limiti generosi per prototipi e app a basso traffico. Il piano Blaze è pay-as-you-go: diventa obbligatorio per usare Cloud Storage (dal 2026) o funzionalità avanzate di Cloud Functions, ma con traffico contenuto la fattura reale può restare a zero euro anche su Blaze.

Serve un backend separato se uso Firebase?

Per la maggior parte dei casi d'uso, no: Firebase Authentication, RTDB/Firestore con security rules, e Storage coprono le esigenze di un'app tipica senza un server dedicato. Un backend leggero (Cloud Functions o Netlify Functions) resta utile per operazioni che richiedono un segreto protetto, come chiamate ad API di terze parti con una chiave privata.

Le security rules di Firebase sono sufficienti per proteggere i dati?

Sono la base indispensabile, ma vanno progettate con attenzione: regole troppo permissive lasciano i dati esposti a chiunque conosca la struttura del database, mentre regole scritte a metà migrazione (senza toccare tutto il set in un colpo solo) possono creare finestre di vulnerabilità temporanee.

Conviene usare Firebase per un'app con molti utenti?

Sì, Firebase scala bene per la maggior parte dei casi d'uso web/mobile, ma vale la pena monitorare i costi mano a mano che il traffico cresce, soprattutto per RTDB (che addebita per banda) e Firestore (che addebita per operazione di lettura/scrittura). Un budget alert su Google Cloud evita sorprese.

Qual è l'errore più comune di chi inizia con Firebase?

Lasciare le security rules nella modalità di test predefinita (accesso libero a chiunque) anche dopo il lancio in produzione. È pensata per lo sviluppo iniziale, ma va sempre sostituita con regole deny-by-default esplicite prima che l'app sia pubblica.