Aplicații fără server cu funcții Cloud Firebase

Scopul companiei Firebase este de a ajuta dezvoltatorii să construiască aplicații mai bune și să le crească în afaceri de succes. Asigurând back-end-ul aplicației sau infrastructura, Firebase vă permite să vă concentrați asupra rezolvării problemelor pentru utilizatorii dvs. Una din noile caracteristici interesante anunțate la Conferința Google Cloud Next '17 din martie, pentru Firebase, a fost funcțiile Cloud. În acest tutorial, veți afla despre această nouă funcție construind o aplicație Android Android. 

Ce sunt funcțiile Cloud pentru Firebase??

Firebase Cloud Functions funcționează într-un mediu găzduit, privat și scalabil Node.js unde puteți rula codul JavaScript. Pur și simplu creați funcții reactive care declanșează ori de câte ori apare un eveniment. Funcțiile Cloud sunt disponibile atât pentru platforma Google Cloud Platform, cât și pentru Firebase (au fost construite pe lângă funcțiile Google Cloud). 

Deocamdată, Funcțiile Cloud acceptă următoarele declanșatoare pe care le puteți asculta și pentru a le răspunde:

  • Bază de date în timp real: declanșează o funcție când apare un eveniment de scriere pe o cale într-o bază de date.
  • Autentificări de autentificare: declanșează o funcție atunci când este creat un nou utilizator sau când un utilizator este șters.
  • Analizoare Google Analytics: declanșează o funcție când este înregistrat un nou eveniment de conversie.
  • Funcțiile de stocare a cloud-ului: o funcție poate fi declanșată atunci când există o schimbare într-o găleată, cum ar fi încărcarea, actualizarea sau ștergerea unui fișier sau folder.
  • Cloud Pub / Sub Triggers: declanșează o funcție atunci când un mesaj nou este primit într-un subiect Google Cloud Pub / Sub.
  • HTTPS declanșează: se declanșează foc atunci când se face o cerere către un punct final.

Deci, de ce folosiți funcțiile Cloud?

Deci, acum ați văzut gama de capabilități pe care Cloud Functions le poate oferi. Dar de ce să le folosiți? 

Rularea și configurarea unui back-end și a serverelor poate fi o adevărată durere - trebuie să rezolvați probleme cum ar fi scalabilitatea și scrierea codului în limbi de server-dar cu Cloud Functions, această complexitate este redusă. De asemenea, în cloud, în loc de pe dispozitivul client, pot fi executate sarcini computațional intensive (cum ar fi redimensionarea imaginilor pentru încărcarea sau scrierea pe mai multe căi ale bazei dvs. de date). Codul dvs. va fi, de asemenea, mai sigur în cloud decât pe dispozitivul client, astfel încât să puteți salva în siguranță date cum ar fi cheile secrete pe serverul dvs.. 

În acest tutorial, veți învăța cum să utilizați declanșatoarele bazei de date în timp real care se vor declanșa când apare un eveniment de scriere a bazei de date. Apoi, vom vedea cum să utilizați serviciul Mesaje Cloud Firebase pentru a trimite o notificare dispozitivelor care au subscris la un subiect. Vom crea o aplicație simplă numită Tutsplus Alerts, care va trimite o notificare abonaților subiectului "android" ori de câte ori un articol nou este disponibil.

Cerințe preliminare 

Pentru a urmări împreună cu acest tutorial, ar trebui să fiți familiarizați cu:

  • Bază de date Firebase în timp real
  • Firebase Cloud Messaging
  • Configurarea unui proiect Firebase

Și ar trebui să aveți Node.js instalat pe computer.

Consultați următoarele tutoriale aici pe Envato Tuts + dacă aveți nevoie de ajutor pentru a începe să utilizați Firebase:

1. Creați o funcție Cloud Firebase

Instalați Firebase CLI 

Acum, când sunt create premisele, să descărcăm funcțiile Cloud.

Pentru a începe să folosim funcțiile Cloud, avem nevoie de Firebase CLI (interfață de linie de comandă) instalată de la npm. Dacă aveți deja Nod setat pe mașina dvs., puteți instala funcțiile Cloud cu:

npm install -g firebase-tools

Această comandă va instala Firebase CLI la nivel global, împreună cu toate dependentele Node.js necesare.

Inițializați Proiectul

Pentru a inițializa proiectul:

  1. Alerga introducere firebase să vă conectați la Firebase prin browser și să autentificați instrumentul CLI.
  2. Creați un nou director de proiect cu numele tutsplus-alerte.
  3. În cele din urmă, alerga firebase funcții init din noul director. Acest instrument vă oferă o opțiune de a instala dependențe cu NPM. Este sigur să declini dacă doriți să gestionați dependențele într-un alt mod.

După ce aceste comenzi au fost finalizate cu succes, structura proiectului dvs. arată astfel:

  • .firebaserc: un fișier ascuns care vă ajută să comutați rapid între proiecte cu utilizarea bazei de foc.
  • firebase.json: descrie proprietățile pentru proiectul dvs..
  • funcţii /: acest dosar conține întregul cod pentru funcțiile dvs..
  • Funcții / package.json: un fișier pachet NPM care descrie funcțiile Cloud.
  • Funcții / index.js: sursa principală pentru codul funcțiilor Cloud.
  • Funcții / node_modules /: dosarul în care sunt instalate toate dependențele NPM.

Importați modulele necesare și inițializați aplicația 

Pentru a dezvolta aplicația noastră simplă Tutsplus Alerts, avem nevoie doar de două module de noduri: module Cloud Functions și module SDK Admin (aceste module sunt deja instalate pentru noi). Deci du-te la index.js și necesită aceste module, apoi inițializați o instanță de administrare a aplicației.

funcțiile var = cer ("firebase-functions"); var admin = necesită ("firebase-admin"); admin.initializeApp (. functions.config () firebase);

Codificați funcția Cloud

Acum că modulele necesare pentru proiectul nostru au fost importate și inițializate, să codificăm funcția noastră de nor în index.js fişier. Așa cum am spus mai devreme, vom scrie o funcție care va fi concediată atunci când o onWrite () evenimentul apare în baza noastră de date Firebase realtime și apoi, ca răspuns, va trimite o notificare (un mesaj în aval) către abonații dispozitivului.

// ... exports.sendNotification = functions.database.ref ('/ articles / articleId') .onWrite (event => // Cumpărați valoarea curentă a ceea ce a fost scris în baza de date Realtime var eventSnapshot = event.data ; var str1 = "Autorul este"; var str = str1.concat (eventSnapshot.child ("autor")) val (); console.log (str); var topic = "android" title: eventSnapshot.child ("title") val (), autor: eventSnapshot.child ("autor") val (); ()) .sendToTopic (subiect, sarcină utilă) .then (funcția (răspuns)) // A se vedea documentația de referință MessagingTopicResponse pentru // conținutul răspunsului console.log ("Mesaj trimis cu succes:" răspuns); (funcția (eroare) console.log ("Eroare la trimiterea mesajului:", eroare);););

În codul de mai sus, ascultăm calea bazei de date / articole / IDarticol, Unde IDarticol reprezintă id-ul articolului care a fost scris cu succes. Acum, ceea ce ne îngrijorează cu adevărat sunt datele scrise. Pentru a obține asta, vom folosi event.data, care este o interfață statică DeltaSnapshot. 

Ulterior, adăugați date din acest instantaneu la un mesaj încărcat de mesaje și trimiteți-l la subiectul "android". Codul asincron este simplificat cu promisiunile JavaScript. 

Rețineți că în codul de mai sus, am scris la consolă folosind console.log (), care ne va ajuta în depanare și monitorizare. Putem vizualiza acest jurnal fie în tabloul de bord Firebase, fie prin linia de comandă cu: 

funcții de bază: log

Rețineți că, deoarece acest lucru se execută pe Node.js, puteți instala alte module disponibile de la NPM. Puteți, de asemenea, să codificați în JavaScript ES6 sau TypeScript în loc de JavaScript. 

Implementați funcția Cloud

Să implementăm funcția Cloud. Rulați această comandă pentru implementare:

$ firebase deploy - funcții numai

Acum putem codifica aplicația Android care se va abona la subiect, va scrie în baza de date în timp real și va primi o notificare atunci când datele vor fi scrise în baza noastră de date în timp real - atunci când funcția noastră de nor ar fi executată! 

2. Creați aplicația TutsplusAlerts

Creați un proiect Android Studio

În primul rând, lansați Android Studio și creați un nou proiect "TutsplusAlerts"cu o activitate goală numită Activitate principala.

Pentru a continua, asigurați-vă că ați inclus Firebase în aplicația dvs.. 

Adăugați dependența bazei de date în timp real

Adăugați următoarea dependență la dvs. build.gradle fişier:

compile 'com.google.firebase: baza de date firebase: 10.2.1' 

Asigurați-vă că vă sincronizați proiectul după adăugarea acestuia.

Creați modelul

Să modelăm o entitate de articol care să fie persistentă în baza noastră de date în timp real.

public class Articolul public String title; public String autor; public Articol () // Constructorul implicit necesar pentru apelurile la DataSnapshot.getValue (Article.class) Articol public (Titlu șir, Autorul șirului) this.title = title; this.author = autor; 

Creați structura XML 

Formatul nostru XML pentru activitatea principală va avea doar două EditTexts și doar un buton care va trimite noul articol.

    

Scrieți în baza de date în timp real

Acum vom scrie la calea bazei de date Realtime /articole/.

// ... @Override protejat void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); ultima bază de date FirebaseDatabase = FirebaseDatabase.getInstance (); final EditText titluEditText = (EditText) findViewById (R.id.et_title); finală EditText autorEditText = (EditText) findViewById (R.id.et_author); Buton submitButton = (buton) findViewById (R.id.btn_submit); submitButton.setOnClickListener (noul View.OnClickListener () @Override public void onClick (Vizualizare vizualizare) DatabaseReference myRef = database.getReference ("articole") push () (), autorEditText.getText () .toString ()); myRef.setValue (articolul););  // ... 

Aplicația dvs. va avea nevoie de acces la scriere în baza de date. Numai pentru scopuri demonstrative, puteți seta Regulile de securitate pentru a permite tuturor citirilor și scrierilor. Într-o aplicație reală, nu veți dori niciodată să utilizați astfel de setări de securitate nesigure.

"reguli": ".read": "true", ".write": "true"

Puteți afla mai multe despre regulile de securitate Firebase în postarea mea aici pe Envato Tuts+.

Rulați aplicația

În acest stadiu, putem testa aplicația și vom vedea dacă funcția Cloud a fost executată cu succes. Introduceți un titlu și un autor, apoi faceți clic pe butonul Trimiteți. După aceea, vizitați funcţii și vizualizați jurnalele. Ar trebui să apară jurnalul nostru personalizat.

Din jurnalele de mai sus, vedem că am executat cu succes funcția Cloud și am trimis un mesaj cu o încărcătură utilă dispozitivelor subscrise la "Android', dar niciun dispozitiv nu sa abonat la subiect încă. În secțiunea următoare, vom utiliza Firebase Cloud Messaging pentru ca dispozitivele să se aboneze la un subiect și apoi să proceseze mesajul primit de la server pentru a afișa o notificare. 

3. Adăugați Sprijin pentru Mesageria Cloud Firebase

Includeți dependența 

Includeți dependența Firebase Messaging de dvs. build.gradle fișier și sincronizați-vă proiectul după aceea:

compile 'com.google.firebase: firebase-messaging: 10.2.1'

Manipularea Mesaje

Trebuie să creăm un serviciu care să extindă FirebaseMessagingService și să suprascrie onMessageReceived callback. 

pachet com.chikeandroid.tutsplusalerts; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; importați android.app.NotificationManager; import șiroid.app.PendingIntent; importați android.content.Context; import șiroid.content.Intent; import android.media.RingtoneManager; importul android.net.Uri; importați android.support.v4.app.NotificationCompat; clasa publică MyFirebaseMessagingService extinde FirebaseMessagingService @Override public void onMessageReceived (RemoteMessage remoteMessage) // Verificați dacă mesajul conține o încărcătură de date. dacă (remoteMessage.getData () .mărime ()> 0) showNotification (remoteMessage.getData (). get ("title"), remoteMessage.getData ().  // Verificați dacă mesajul conține o sarcină utilă de notificare. dacă (remoteMessage.getNotification ()! = null)  privat void showNotificare (Titlu șir, Autorul șirului) Intent intent = Intent intent (this, MainActivity.class); intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity (acest lucru, 0 / * Cod de solicitare * /, intenție, PendingIntent.FLAG_ONE_SHOT); Uri implicitSoundUri = RingtoneManager.getDefaultUri (RingtoneManager.TYPE_NOTIFICATION); NotificareCompat.Builder notificationBuilder = Notificare nouăCompat.Builder (this) .setContentTitle ("Articol nou": + titlu) .setSmallIcon (R.mipmap.ic_launcher) .setContentText ("By" + autor) .setAutoCancel (true) .setSound ) .setContentIntent (pendingIntent); NotificareManager notificationManager = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); notificationManager.notify (0 / * ID de notificare * /, notificationBuilder.build ()); 

În codul de mai sus, obținem și sarcina utilă a datelor și afișăm-o într-o notificare, indiferent dacă aplicația se află într-o stare primară sau de fond.  

Actualizați fișierul Manifest

Actualizați fișierul manifest, inclusiv serviciul creat mai devreme în interiorul etichetă.

// ...      // ... 

Abonați-vă la un subiect

În cele din urmă, trebuie să ne abonați la subiectul "Android"astfel încât dispozitivul să poată primi și procesa mesaje trimise la acel subiect. 

/ ... @Override protejat void onCreate (Bundle savedInstanceState) // ... FirebaseMessaging.getInstance (). SubscribeToTopic ("android"); // ... // ... 

Rulați aplicația 

Rulați aplicația pentru a doua oară și introduceți un titlu și un autor, apoi faceți clic pe butonul Trimiteți. De data aceasta, o notificare va apărea ori de câte ori un articol nou este postat în baza de date de către orice utilizator de aplicație.

Pentru a face acest lucru înainte de funcțiile Cloud, ați avea nevoie de un server HTTP sau XMPP, ceea ce ar însemna mai multe coduri de scriere, precum și un server pentru configurare și suport.

Concluzie

În acest tutorial, ați aflat despre Funcțiile Cloud pentru Firebase: ce sunt, de ce ați putea avea nevoie de ele și cum să începeți să utilizați funcțiile Cloud pentru aplicația dvs. Fiți conștient de faptul că funcțiile Cloud pentru Firebase sunt încă în versiunea beta publică de la această scriere. 

Pentru a afla mai multe despre funcțiile Cloud pentru Firebase, consultați documentația oficială. Între timp, verificați câteva dintre celelalte cursuri și tutoriale ale dezvoltării aplicațiilor Android!

Cod