Firebase è la piattaforma di sviluppo per applicazioni mobili di Google che facilita la creazione, il miglioramento e la crescita delle proprie app. Dispone di numerosi servizi utilizzati per gestire i dati da qualsiasi applicazione Android, IOS o Web come autenticazione, database in tempo reale, hosting, archiviazione, ecc. In questo articolo, vengono descritte le funzionalità offerte da Firebase con un esempio pratico nel quale verrà caricata un'immagine su Firebase Storage utilizzando l'ESP32-CAM.
Introduzione
Le startup moderne sono sempre più orientate alla creazione di soluzioni innovative nei propri settori. Il fatto più interessante è che la maggior parte delle startup ha inizio come attività casalinga con un budget ristretto a disposizione durante la fase di avvio. Ciò detto, per una startup è fondamentale comprendere come ottimizzare e sfruttare il meglio dello stack tecnologico che contribuirà a maggiori entrate/profitti per il suo ecosistema.
Google Firebase è un ecosistema in evoluzione che consente a qualsiasi startup di dare vita alla propria idea rimuovendo il complesso processo SDLC tradizionale (il ciclo di vita dello sviluppo delle applicazioni, è un processo per la pianificazione, la creazione, il test e l'implementazione di un sistema informativo).
In questo articolo, verranno svelati tutti i servizi essenziali che Firebase ha da offrire per trasformare una idea in realtà in un breve lasso di tempo.
Google Firebase
Firebase è essenzialmente un ecosistema completo contenente una suite di servizi che possono essere ampiamente classificati in 3 segmenti:
- Build
- Analyse
- Drive Engagement
In questo articolo, l'attenzione sarà concentrata sui servizi appartenenti a Build, ovvero tutti quei servizi che aiutano gli sviluppatori a creare un prototipo rapido o addirittura a creare un'applicazione completa a livello produttivo.
Sotto Build si possono trovare i seguenti servizi che in genere aiutano gli sviluppatori a creare la propria applicazione:
- Authentication
- Cloud Functions
- Cloud Firestore
- Cloud Storage
- Hosting
- Realtime Database
Di seguito, vengono descritti brevemente i servizi appena elencati.
Authentication
La maggior parte delle applicazioni ha bisogno di conoscere a fondo l'identità dei propri utenti per offrire contenuti migliori e personalizzati. Firebase Authentication fornisce SDK facili da usare, servizi backend e librerie dell'interfaccia utente già pronte per autenticare gli utenti. Fornisce inoltre un'ampia varietà di canali per consentire ai propri utenti di autenticarsi, come ad esempio password, numeri di telefono e provider di identità popolari come Google, Facebook, Twitter, Github, Apple, ecc. o addirittura consente di creare la propria logica di autenticazione personalizzata. L'autenticazione tramite provider avviene tramite un meccanismo sicuro OAuth.
Cloud Functions
Cloud Functions è una piattaforma serverless che consente agli sviluppatori di eseguire il proprio codice backend in risposta a eventi attivati dalle funzionalità Firebase e dalle richieste HTTP. Ciò implica essenzialmente che la piattaforma ha la capacità di scalare e gestirsi da sola. Ma soprattutto, i pagamenti per i servizi avvengono solo in base alle invocazioni, all'utilizzo della CPU, ecc. durante l'esecuzione della funzione.
Esistono numerosi casi d'uso associati a tali funzioni serverless, come:
- Notificare gli utenti quando sono nella leaderboard dell'applicazione
- Eseguire la sanificazione del database
- Trasferire attività di calcolo intensive e rendere l'app reattiva
Oppure, si può aggiungere ancora più complessità coinvolgendo tecniche AI/ML, come:
- Sfruttare l'API Cloud Vision per l'analisi e l'etichettamento delle immagini
- Elaborare i pagamenti degli utenti
- Tradurre i messaggi utilizzando Google Translate
- Inviare una richiesta a un webhook per attivare eventuali pipeline
Cloud Storage
È un servizio di archiviazione di oggetti potente, semplice ed economico. Gli SDK Firebase per Cloud Storage aggiungono la sicurezza di Google ai caricamenti e ai download di file per le app Firebase, indipendentemente dalla qualità della rete.
Il Cloud Storage permette:
- Operazioni robuste - i caricamenti e i download sono robusti, ripartono da dove si erano fermati, facendo risparmiare tempo e larghezza di banda agli utenti.
- Sicurezza avanzata - gli sviluppatori possono utilizzare modelli di sicurezza dichiarativi per consentire l'accesso granulare agli oggetti in base a nome file, dimensione, tipo di contenuto o qualsiasi altro metadato.
- Elevata scalabilità - capacità di resistere anche a dimensioni di exabyte quando la app diventa virale.
Hosting Firebase
L'Hosting Firebase fornisce un modo rapido e sicuro per ospitare le applicazioni Web, statiche, dinamiche o persino i microservizi. Gli sviluppatori possono distribuire rapidamente la propria applicazione Web e fornire contenuti tramite una rete di distribuzione dei contenuti globale. Offre, inoltre, un'ampia varietà di funzionalità che rendono facile per gli sviluppatori distribuire rapidamente le applicazioni.
L'hosting Firebase permette di:
- Distribuire rapidamente i contenuti - ogni file caricato viene memorizzato nella cache degli SSD ai bordi della CDN in tutto il mondo. Il miglior metodo di compressione viene selezionato automaticamente per i contenuti.
- Emulare e condividere - emulare le modifiche su un URL ospitato localmente. Condividere le modifiche con il proprio team utilizzando URL temporanei. Firebase Hosting fornisce anche una facile integrazione con Github per visualizzare in anteprima i contenuti.
- Distribuire con un solo comando - distribuire nuove versioni delle applicazioni Web con un solo comando e, se occorre annullare le modifiche, con una funzione di rollback con un solo clic.
Cloud Firestore e Realtime Database
Sia Cloud Firestore che Realtime Database sono database NoSQL.
Cloud Firestore è il database più recente di Firebase che si basa sul successo di Firebase Realtime Database. Ha un modello dati più intuitivo, con un supporto più ricco per query più veloci e scalabile ulteriormente rispetto al Realtime Database.
Si consiglia di scegliere Cloud Firestore quando:
- Sono necessarie query, ordinamenti e transazioni avanzate
- Si prevede che la dimensione del database aumenterà da GB a TB
- Si prevede un database con un numero maggiore di letture
- Le query offline vengono eseguite frequentemente sul database
- È richiesto un singolo database
- I dati vengono spesso archiviati come documenti organizzati in raccolte
- Casi d'uso tipici come catalogo prodotti, carrello, ordini, ecc.
Realtime Database è il primo prodotto in assoluto lanciato dal team Firebase. Si tratta di una soluzione efficiente e a bassa latenza per la creazione di app mobili che richiedono la sincronizzazione in tempo reale degli stati tra vari client. Spesso, c'è sempre confusione con gli sviluppatori nella scelta di quello giusto quando si tratta di Firestore vs Realtime Database.
Si consiglia di scegliere Realtime Database quando:
- Principalmente vengono sincronizzati i dati con query di base
- Vi sono meno dati che cambiano frequentemente
- Albero JSON semplice (modello dei dati archiviati)
- Le query offline vengono eseguite raramente o mai
- Sono necessari molti database
- Casi d'uso tipici come chatbot, rilevamento della posizione, blocco da disegno, ecc.
ESP32-CAM e Firebase
Per comprendere meglio le funzionalità offerte da Firebase vediamo un esempio in cui si descrive come scattare e caricare un'immagine su Firebase Storage utilizzando l'ESP32-CAM. In questo esempio, viene creato un progetto Firebase Storage che consentirà di archiviare i file. Quindi, si potrà accedere alla console Firebase per visualizzare le immagini o creare un'app Web per visualizzarle. L'ESP32-CAM verrà programmato utilizzando l'IDE Arduino.
Nell'esempio, l'ESP32-CAM scatta una foto e la invia a Firebase ogni volta che viene premuto il pulsante RST. L'idea è quella di aggiungere una sorta di trigger in modo da emulare un sensore di movimento PIR o un pulsante.
- Quando l'ESP32 viene eseguito per la prima volta, acquisisce una nuova immagine e la salva nel filesystem (LittleFS)
- ESP32-CAM si connette a Firebase come utente con e-mail e password
- L'ESP32-CAM invia l'immagine a Firebase Storage
- Successivamente, andando sulla console Firebase è possibile visualizzare le immagini
Andiamo adesso a descrivere passo per passo la realizzazione dell'applicazione.
Creazione progetto Firebase
Per prima cosa, occorre essere in possesso di un account Google. Un volta effettuato il login nel proprio account Google fare clic sul seguente link:
Nella home della piattaforma possiamo fare clic sul pulsante "Get started". Si aprirà una nuova pagina con al centro il pulsante "Crea un progetto", facciamo quindi clic su di esso. Ci verrà chiesto di dare un nome al progetto, ad esempio "ESPdemo". Accettiamo i termini di licenza e facciamo clic su "Continua".
Saremo portati al secondo passaggio della creazione dove possiamo scegliere se abilitare o meno Google Analytics. Nel nostro caso, opteremo per disabilitare lo strumento di analisi. Facciamo clic quindi su "Crea progetto". Ci vorranno alcuni secondi per configurare il progetto. Al termine, facciamo clic su "Continua". Verremo così reindirizzati alla pagina della console del progetto.
Impostare i metodi di autenticazione
Per consentire l'autenticazione con e-mail e password, dobbiamo innanzitutto impostare i metodi di autenticazione per l'app. Attraverso il login e quindi l'identificazione degli utenti (nel nostro caso, l'ESP32-CAM) consente all’app di salvare in modo sicuro i dati di ogni utente nel cloud e fornire la stessa esperienza personalizzata su tutti i dispositivi dell’utente.
Nella barra laterale di sinistra, all'interno del sottomenu "Creazione", facciamo clic su "Autenticazione" e poi su "Inizia". Tra le varie opzioni che ci vengono proposte, selezioniamo "Email/password". Abilitiamo quindi il metodo di autenticazione e facciamo clic su "Salva".
Ora, occorre aggiungere un utente. Sempre nella scheda "Autenticazione", selezioniamo la scheda "Users" in alto. Quindi, facciamo clic sul pulsante "Aggiungi utente". Aggiungiamo un indirizzo email per l'utente autorizzato. Può essere l'e-mail del nostro account Google o qualsiasi altra e-mail. Possiamo anche creare un'e-mail specifica per questo progetto. Aggiungiamo una password che ci consentirà di accedere alla app e ai file di archiviazione. Non dimentichiamo di salvare la password in un luogo sicuro perché ci servirà in seguito. Al termine, facciamo clic su "Aggiungi utente".
Un nuovo utente viene creato e aggiunto correttamente alla tabella degli utenti. Da notare che Firebase crea un UID univoco per ciascun utente registrato. L'UID dell'utente ci consente di identificarlo e tenerne traccia per fornire o negare l'accesso al progetto o al database. C'è anche una colonna che registra la data dell'ultimo accesso. Al momento è vuoto perché non abbiamo ancora effettuato l'accesso con quell'utente.
Creazione bucket di archiviazione
Nella barra laterale sinistra, sempre all'interno del sottomenu "Creazione", facciamo clic su "Storage" e poi sul pulsante "Inizia". Selezioniamo "Avvia in modalità test" quindi facciamo clic su "Avanti". Selezioniamo la posizione di archiviazione che dovrebbe essere la più vicina al nostro Paese. Credo che l'opzione "eur3 (europe-west)" possa andare bene. Facciamo clic su "Fine". Dopo alcuni secondi di attesa verrà creato il bucket di archiviazione.
All'interno della pagina appena aperta selezioniamo la scheda "Rules". Andiamo a cambiare le regole del database sostituendole con le seguenti righe di codice:
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3157 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.