L'obiettivo di Firebase è aiutare gli sviluppatori a creare app migliori e farle crescere in aziende di successo. Prendendo cura del back-end o dell'infrastruttura dell'app, Firebase ti consente di concentrarti sulla risoluzione dei problemi per i tuoi utenti. Una delle nuove interessanti funzionalità annunciate alla conferenza Google Cloud Next 17 in corso questa settimana per Firebase è stata Cloud Functions. In questo tutorial, scoprirai questa nuova funzionalità costruendo con essa una semplice app per Android.
Le funzioni cloud di Firebase vengono eseguite in un ambiente Node.js ospitato, privato e scalabile in cui è possibile eseguire il codice JavaScript. È sufficiente creare funzioni reattive che si attivano ogni volta che si verifica un evento. Le funzioni cloud sono disponibili sia per Google Cloud Platform che per Firebase (sono state create su Google Cloud Functions).
Per ora, le funzioni cloud supportano i seguenti trigger che puoi ascoltare e rispondere a:
Così ora hai visto la gamma di funzionalità che Cloud Functions può offrire. Ma perché usarli?
L'esecuzione e la configurazione di un back-end e di server può essere un vero problema: devi gestire problemi come la scalabilità e la scrittura di codice nei linguaggi lato server, ma con le funzioni cloud, questa complessità è ridotta. Inoltre, è possibile eseguire attività computazionalmente intensive nel cloud anziché sul dispositivo client (come il ridimensionamento delle immagini per il caricamento o la scrittura su più percorsi del database). Il codice sarà anche più sicuro nel cloud rispetto al dispositivo client, quindi puoi archiviare in modo sicuro dati come le chiavi segrete sul tuo server.
In questo tutorial, imparerai come utilizzare i trigger di database in tempo reale che si attivano quando si verifica un evento di scrittura del database. Quindi, vedremo come utilizzare il servizio Firebase Cloud Messaging per inviare una notifica ai dispositivi che hanno sottoscritto un argomento. Creeremo una semplice app chiamata Avvisi di Tutsplus, che invierà una notifica agli abbonati dell'argomento "Android" ogni volta che sarà disponibile un nuovo articolo.
Per seguire questo tutorial, dovresti avere familiarità con:
E dovresti avere Node.js installato sul tuo computer.
Consulta le seguenti esercitazioni qui su Envato Tuts + se hai bisogno di aiuto per iniziare con Firebase:
Ora che sono stati impostati i prerequisiti, scarichiamo le funzioni cloud.
Per iniziare a utilizzare le funzioni cloud, abbiamo bisogno della Firebase CLI (interfaccia a riga di comando) installata da npm. Se hai già impostato il nodo sul tuo computer, puoi installare le funzioni cloud con:
npm install -g firebase-tools
Questo comando installerà la CLI di Firebase globalmente insieme a tutte le dipendenze necessarie di Node.js.
Per inizializzare il tuo progetto:
login firebase
accedere a Firebase tramite il browser e autenticare lo strumento CLI.firebase init functions
da quella nuova directory. Questo strumento ti offre la possibilità di installare le dipendenze con NPM. È sicuro rifiutare se si desidera gestire le dipendenze in un altro modo.Dopo che questi comandi sono stati completati correttamente, la struttura del tuo progetto si presenta così:
l'uso di Firebase
.Per sviluppare la nostra semplice app Tutsplus Alerts, abbiamo solo bisogno di due moduli nodo: i moduli Cloud Functions e Admin SDK (questi moduli sono già installati per noi). Quindi vai al index.js e richiedono questi moduli, quindi inizializzare un'istanza dell'app di amministrazione.
var functions = require ('firebase-functions'); var admin = require ('firebase-admin'); admin.initializeApp (. functions.config () Firebase);
Ora che i moduli richiesti per il nostro progetto sono stati importati e inizializzati, codifichiamo la nostra funzione cloud in index.js file. Come affermato in precedenza, scriveremo una funzione che verrà attivata quando un OnWrite ()
evento si verifica nel nostro database in tempo reale di Firebase e quindi, in risposta, invierà una notifica (un messaggio a valle) agli abbonati al dispositivo.
// ... exports.sendNotification = functions.database.ref ('/ articles / articleId'). OnWrite (event => // Prendi il valore corrente di ciò che è stato scritto nel Realtime Database. Var eventSnapshot = event.data ; var str1 = "Autore è"; var str = str1.concat (eventSnapshot.child ("autore"). val ()); console.log (str); var topic = "android"; var payload = dati: title: eventSnapshot.child ("title"). val (), autore: eventSnapshot.child ("author"). val (); // Invia un messaggio ai dispositivi sottoscritti all'argomento fornito. return admin.messaging () .sendToTopic (topic, payload) .then (function (response) // Vedi la documentazione di riferimento di MessagingTopicResponse per // contenuto della risposta console.log ("Messaggio inviato con successo:", response);) .catch (function (error) console.log ("Error sending message:", error);););
Nel codice sopra, stiamo ascoltando il percorso del database / articoli / articleID
, dove ArticleId
rappresenta l'id dell'articolo che è stato scritto con successo. Ora, quello di cui siamo veramente preoccupati sono i dati che sono stati scritti. Per ottenere ciò, usiamo event.data
, che è un'interfaccia statica DeltaSnapshot.
Successivamente, aggiungi i dati da questa istantanea al payload di un messaggio e invialo all'argomento "android". Il codice asincrono è semplificato con le promesse di JavaScript.
Si noti che nel codice sopra, abbiamo scritto alla console usando console.log ()
, che ci aiuterà nel debugging e nel monitoraggio. Possiamo visualizzare questo registro nella nostra dashboard Firebase o tramite la riga di comando con:
funzioni di Firebase: log
Tieni presente che dal momento che viene eseguito su Node.js, puoi installare altri moduli disponibili da NPM. È inoltre possibile codificare JavaScript ES6 o TypeScript invece di JavaScript vaniglia.
Implementiamo la nostra funzione cloud. Esegui questo comando per la distribuzione:
$ firebase deploy --only functions
Ora possiamo codificare l'app per Android che si iscriverà all'argomento, scrivere sul database in tempo reale e ricevere una notifica quando i dati vengono scritti nel nostro database in tempo reale, ovvero quando verrà eseguita la nostra funzione cloud!
Innanzitutto, avvia Android Studio e crea un nuovo progetto "TutsplusAlerts"con un'attività vuota chiamata Attività principale
.
Per continuare, assicurati di aver integrato Firebase nella tua app.
Aggiungi la seguente dipendenza al tuo build.gradle file:
compila 'com.google.firebase: firebase-database: 10.2.1'
Assicurati di sincronizzare il tuo progetto dopo averlo aggiunto.
Modelliamo un'entità articolo da mantenere nel nostro database in tempo reale.
Articolo di classe pubblica titolo di stringa pubblica; autore di stringhe pubbliche; public Article () // Costruttore predefinito richiesto per le chiamate a DataSnapshot.getValue (Article.class) public Article (String title, String author) this.title = title; this.author = autore;
Il nostro layout XML per l'attività principale avrà solo due EditTexts
e solo un pulsante che presenterà il nuovo articolo.
Ora stiamo andando a scrivere sul percorso Realtime Database / articoli /
.
// ... @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); database FirebaseDatabase finale = FirebaseDatabase.getInstance (); final EditText titleEditText = (EditText) findViewById (R.id.et_title); final EditText authorEditText = (EditText) findViewById (R.id.et_author); Button submitButton = (Button) findViewById (R.id.btn_submit); submitButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (Visualizza vista) DatabaseReference myRef = database.getReference ("articles"). push (); Articolo article = new Article (titleEditText.getText (). toString (), authorEditText.getText (). toString ()); myRef.setValue (article);); // ...
La tua app avrà bisogno dell'accesso in scrittura al database. Solo per scopi dimostrativi, è possibile impostare le regole di sicurezza per consentire tutte le letture e le scritture. In un'applicazione reale, non vorrai mai utilizzare impostazioni di sicurezza insicure.
"rules": ".read": "true", ".write": "true"
Puoi trovare ulteriori informazioni sulle regole di sicurezza di Firebase nel mio post qui su Envato Tuts+.
In questa fase, possiamo testare l'app e verificare se la nostra funzione cloud è stata eseguita correttamente. Inserisci un titolo e un autore, quindi fai clic sul pulsante di invio. Successivamente, visita il funzioni dashboard e visualizza i log. Dovrebbe apparire il nostro registro personalizzato.
Dai registri precedenti, vediamo che abbiamo eseguito con successo la nostra funzione Cloud e inviato un messaggio con un payload ai dispositivi abbonati al 'androide'argomento, ma nessun dispositivo è ancora iscritto all'argomento. Nella prossima sezione, utilizzeremo Firebase Cloud Messaging in modo che i dispositivi possano iscriversi a un argomento e quindi elaborare il messaggio in arrivo dal server per mostrare una notifica.
Includere la dipendenza da Firebase Messaging al tuo build.gradle file e sincronizza il tuo progetto in seguito:
compila "com.google.firebase: firebase-messaging: 10.2.1"
Dobbiamo creare un servizio che estenda FirebaseMessagingService e sovrascriva il onMessageReceived
callback.
pacchetto com.chikeandroid.tutsplusalerts; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; importare android.app.NotificationManager; importare android.app.PendingIntent; importare android.content.Context; import android.content.Intent; import android.media.RingtoneManager; import android.net.Uri; import android.support.v4.app.NotificationCompat; public class MyFirebaseMessagingService estende FirebaseMessagingService @Override public void onMessageReceived (RemoteMessage remoteMessage) // Controlla se il messaggio contiene un payload di dati. if (remoteMessage.getData (). size ()> 0) showNotification (remoteMessage.getData (). get ("title"), remoteMessage.getData (). get ("author")); // Controlla se il messaggio contiene un carico utile di notifica. if (remoteMessage.getNotification ()! = null) private void showNotification (String title, String author) Intent intent = new Intent (this, MainActivity.class); intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity (this, 0 / * Codice richiesta * /, intent, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri = RingtoneManager.getDefaultUri (RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder (this) .setContentTitle ("Nuovo articolo:" + title) .setSmallIcon (R.mipmap.ic_launcher) .setContentText ("By" + author) .setAutoCancel (true) .setSound (defaultSoundUri ) .setContentIntent (pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); notificationManager.notify (0 / * ID della notifica * /, notificationBuilder.build ());
Nel codice precedente, stiamo anche ricevendo il carico utile dei dati e mostrandolo in una notifica indipendentemente dal fatto che l'applicazione sia in uno stato di primo piano o di sfondo.
Aggiorna il file manifest, incluso il servizio creato in precedenza all'interno del file
etichetta.
// ...// ...
Infine, dobbiamo iscriversi all'argomento 'androide'in modo che il dispositivo possa ricevere ed elaborare i messaggi inviati a quell'argomento.
/ ... @Override protected void onCreate (Bundle savedInstanceState) // ... FirebaseMessaging.getInstance (). SubscribeToTopic ("android"); // ... // ...
Esegui l'app per la seconda volta e inserisci un titolo e un autore, quindi fai clic sul pulsante di invio. Questa volta, verrà visualizzata una notifica ogni volta che un nuovo articolo viene pubblicato nel database da qualsiasi utente dell'app.
Per fare ciò prima delle funzioni cloud, avresti avuto bisogno di un server HTTP o XMPP, il che significherebbe più codice da scrivere, così come un server da configurare e supportare.
In questo tutorial, hai appreso le funzioni di Cloud per Firebase: cosa sono, perché potresti averne bisogno e come iniziare a utilizzare le funzioni cloud per la tua app. Tieni presente che Cloud Functions for Firebase è ancora in versione beta pubblica al momento della stesura di questo documento.
Per ulteriori informazioni su Cloud Functions for Firebase, fare riferimento alla documentazione ufficiale. E nel frattempo, dai uno sguardo ad alcuni dei nostri altri corsi e tutorial sullo sviluppo di app per Android!