Firebase har som mål å hjelpe utviklere til å bygge bedre apper og utvide dem til vellykkede bedrifter. Ved å ta vare på din app-back-end eller infrastruktur, kan Firebase du fokusere på å løse problemer for brukerne. En av de nye spennende funksjonene som ble annonsert på Google Cloud Next '17-konferansen i mars for Firebase, var Cloud Functions. I denne opplæringen lærer du om denne nye funksjonen ved å bygge en enkel Android-app med den.
Firebase Cloud Funksjoner kjører i et vertsbasert, privat og skalerbart Node.js-miljø der du kan kjøre JavaScript-kode. Du oppretter bare reaktive funksjoner som utløser når en hendelse oppstår. Cloud-funksjoner er tilgjengelige for både Google Cloud Platform og Firebase (de ble bygget på toppen av Google Cloud-funksjoner).
For øyeblikket støtter Cloud Functions følgende triggere som du kan lytte til og svare på:
Så nå har du sett rekkevidde av muligheter som Cloud Functions kan tilby. Men hvorfor bruke dem?
Å kjøre og sette opp en bakre ende og servere kan være en ekte smerte. Du må håndtere problemer som skalerbarhet og skrivingskode på server-side språk, men med Cloud Functions reduseres denne kompleksiteten. Beregningsintensiv oppgaver kan også utføres i skyen i stedet for på klientenheten (for eksempel størrelsen på bildet for opplasting eller skriving til flere baner i databasen). Koden din vil også være sikrere i skyen enn på klientenheten, slik at du trygt kan lagre data som hemmelige taster på serveren din.
I denne opplæringen lærer du hvordan du bruker Realtime Database Triggers som vil brenne når en database skrivehendelse oppstår. Deretter ser vi hvordan du bruker tjenesten Firebase Cloud Messaging til å sende et varsel til enheter som abonnerer på et emne. Vi lager en enkel app som heter Tutsplus Alerts, som vil sende et varsel til abonnenter av "android" emnet når en ny artikkel er tilgjengelig.
For å følge med denne opplæringen, bør du være kjent med:
Og du bør ha Node.js installert på datamaskinen din.
Ta en titt på følgende veiledninger her på Envato Tuts + hvis du trenger hjelp med å komme i gang med Firebase:
Nå som forutsetningene er satt opp, la oss laste ned Cloud Functions.
For å begynne å bruke Cloud Functions, trenger vi Firebase CLI (kommandolinjegrensesnitt) installert fra npm. Hvis du allerede har Node satt opp på maskinen din, kan du installere Cloud Functions med:
npm installer -g firebase-verktøy
Denne kommandoen vil installere Firebase CLI globalt sammen med eventuelle nødvendige Node.js-avhengigheter.
For å initialisere prosjektet ditt:
Firebase login
å logge på Firebase via nettleseren og autentisere CLI-verktøyet.firebase init funksjoner
fra den nye katalogen. Dette verktøyet gir deg muligheten til å installere avhengigheter med NPM. Det er trygt å avvise hvis du vil håndtere avhengigheter på en annen måte.Etter at disse kommandoene er fullført, ser prosjektstrukturen ut slik:
brannbruk bruk
.For å utvikle vår enkle Tutsplus Alerts-app trenger vi bare to node-moduler: Cloud Functions og Admin SDK-moduler (disse modulene er allerede installert for oss). Så gå til index.js og krever disse modulene, og deretter initialisere en admin app instans.
var functions = krever ('firebase-funksjoner'); var admin = krever ('firebase-admin'); admin.initializeApp (. functions.config () Fire);
Nå som de nødvendige modulene for prosjektet vårt er importert og initialisert, la oss kode vår skyfunksjon i index.js fil. Som tidligere sagt, skal vi skrive en funksjon som vil bli sparket når en onWrite ()
hendelsen oppstår i vår Firebase realtime database og deretter, som svar, vil sende et varsel (en nedstrøms melding) til abonnenter på enheten.
// ... exports.sendNotification = functions.database.ref ('/ articles / articleId') .onWrite (event => // Grab gjeldende verdi av det som ble skrevet til Realtime Database. Var eventSnapshot = event.data ; var str1 = "Forfatter er"; var str = str1.concat (eventSnapshot.child ("author") .val ()); console.log (str); var topic = "android"; var nyttelast = data: title: eventSnapshot.child ("title") .val (), forfatter: eventSnapshot.child ("author") .val (); // Send en melding til enheter som abonnerer på oppgitt emne. () .sendToTopic (emne, nyttelast) .then (funksjon (svar) // Se referansedokumentasjonen for MessagingTopicResponse for // innholdet i svaret. console.log ("Sendt sendt melding:", svar);). (funksjon (feil) console.log ("Feil sending melding:", feil);););
I koden ovenfor lytter vi til databasebanen / artikler / artikkelID
, hvor ArtikkelID
representerer iden til artikkelen som ble skrevet vellykket. Nå er det vi er veldig opptatt av, dataene som ble skrevet. For å få det, bruker vi event.data
, som er et DeltaSnapshot statisk grensesnitt.
Deretter legger du til data fra dette øyeblikksbildet til en nyttelast for meldinger og sender den til "android" -emnet. Den asynkrone koden forenkles med JavaScript-løfter.
Merk at i koden ovenfor skrev vi til konsollen ved å bruke console.log ()
, som vil hjelpe oss med feilsøking og overvåking. Vi kan se denne loggen enten i Firebase-dashbordet eller via kommandolinjen med:
ildbasefunksjoner: logg
Vær oppmerksom på at siden dette kjører på Node.js, kan du installere andre moduler tilgjengelig fra NPM. Du kan også kode i JavaScript ES6 eller TypeScript i stedet for vanilla JavaScript.
La oss distribuere vår Cloud-funksjon. Kjør denne kommandoen for distribusjon:
$ firebase distribuere - bare funksjoner
Nå kan vi kode Android-appen som vil abonnere på emnet, skrive til realtidsdatabasen, og motta et varsel når data er skrevet til vår realtidsdatabase - det er da vår skyfunksjon ville bli utført!
Først, brann opp Android Studio og opprett et nytt prosjekt "TutsplusAlerts"med en tom aktivitet kalt Hoved aktivitet
.
For å følge med, sørg for at du har integrert Firebase i appen din.
Legg til følgende avhengighet til din build.gradle fil:
kompilere 'com.google.firebase: firebase-database: 10.2.1'
Pass på at du synkroniserer prosjektet ditt etter å ha lagt det til.
La oss modellere en artikkel enhet for å være vedvarende til vår realtime database.
offentlig klasse Artikkel Public String title; offentlig String forfatter; offentlig artikkel () // Standardkonstruksjon kreves for samtaler til DataSnapshot.getValue (Article.class) offentlig artikkel (Stringtittel, Stringforfatter) this.title = title; this.author = author;
Vår XML-layout for hovedaktiviteten vil bare ha to EditTexts
og bare en knapp som vil sende inn den nye artikkelen.
Nå skal vi skrive til Realtime Database-banen / artikler /
.
// ... @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); siste FirebaseDatabase database = FirebaseDatabase.getInstance (); Endelig EditText titleEditText = (EditText) findViewById (R.id.et_title); Endelig EditText authorEditText = (EditText) findViewById (R.id.et_author); Button submitButton = (Button) findViewById (R.id.btn_submit); submitButton.setOnClickListener (ny View.OnClickListener () @Override public void onClick (Vis visning) DatabaseReference myRef = database.getReference ("articles"). push (); Artikkelartikkel = nytt Artikkel (titleEditText.getText () .String (), authorEditText.getText (). toString ()); myRef.setValue (artikkel);); // ...
Appen din trenger skriveadgang til databasen. Bare for demo-formål kan du angi sikkerhetsregler for å tillate at alle leser og skriver. I en ekte applikasjon vil du aldri bruke slike usikre sikkerhetsinnstillinger.
"regler": ".read": "true", ".write": "true"
Du kan lære mer om Firebase Security Rules i mitt innlegg her på Envato Tuts+.
På dette stadiet kan vi teste appen og se om Cloud Funksjonen ble utført med hell. Skriv inn en tittel og forfatter, og klikk deretter på send-knappen. Etter det, besøk funksjoner dashbord og se loggene. Vår tilpassede logg skal vises.
Fra loggene over ser vi at vi har fullført vår Cloud-funksjon og sendt en melding med nyttelast til enheter som abonnerer på "android'emne, men ingen enhet har abonnert på emnet ennå. I neste avsnitt bruker vi Firebase Cloud Messaging, slik at enheter kan abonnere på et emne og deretter behandle den innkommende meldingen fra serveren for å vise et varsel.
Inkluder Firebase Messaging avhengighet til din build.gradle fil og synkroniser prosjektet ditt etterpå:
kompilere 'com.google.firebase: firebase-messaging: 10.2.1'
Vi må opprette en tjeneste som utvider FirebaseMessagingService og overstyrer onMessageReceived
callbacks.
pakke com.chikeandroid.tutsplusalerts; importer com.google.firebase.messaging.FirebaseMessagingService; importer com.google.firebase.messaging.RemoteMessage; importer android.app.NotificationManager; importer android.app.PendingIntent; importer android.content.Context; importer android.content.Intent; importer android.media.RingtoneManager; importer android.net.Uri; importer android.support.v4.app.NotificationCompat; offentlig klasse MyFirebaseMessagingService utvider FirebaseMessagingService @Override public void onMessageReceived (RemoteMessage remoteMessage) // Sjekk om meldingen inneholder en data nyttelast. hvis (remoteMessage.getData () .størrelse ()> 0) showNotification (remoteMessage.getData (). get ("title"), remoteMessage.getData (). get ("author")); // Sjekk om meldingen inneholder en nyttelast for varsling. hvis (remoteMessage.getNotification ()! = null) privat void showNotification (String title, String author) Intent intention = new Intent (dette, MainActivity.class); intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity (dette, 0 / * Forespørselskode * /, hensikt, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri = RingtoneManager.getDefaultUri (RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = ny NotificationCompat.Builder (this) .setContentTitle ("Ny artikkel:" + tittel) .setSmallIcon (R.mipmap.ic_launcher) .setContentText ("By" + forfatter) .setAutoCancel (true) .setSound (defaultSoundUri ) .setContentIntent (pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); notificationManager.notify (0 / * ID of notification * /, notificationBuilder.build ());
I den ovennevnte koden får vi også nyttelastene for data og viser det i et varsel, uavhengig av om programmet ligger i forgrunns- eller bakgrunnsstatus.
Oppdater manifestfilen, inkludert tjenesten som ble opprettet tidligere inne i
stikkord.
// ...// ...
Til slutt må vi abonnere på emnet 'android'slik at enheten kan motta og behandle meldinger sendt til det aktuelle emnet.
/ ... @Override protected void onCreate (Bundle savedInstanceState) // ... FirebaseMessaging.getInstance (). SubscribeToTopic ("android"); // ... // ...
Kjør appen for andre gang og skriv inn en tittel og en forfatter, og klikk deretter på send-knappen. Denne gangen vises et varsel når en ny artikkel blir lagt ut i databasen av en hvilken som helst appbruker.
For å gjøre dette før Cloud Functions, ville du ha behov for en HTTP- eller XMPP-server, noe som vil bety at flere kodeer skal skrives, samt en server for å sette opp og støtte.
I denne opplæringen har du lært om Cloud Functions for Firebase: hva de er, hvorfor du kanskje trenger dem, og hvordan du begynner å bruke Cloud Functions for appen din. Vær oppmerksom på at Cloud Functions for Firebase fortsatt er i offentlig beta som av denne skrivingen.
Hvis du vil vite mer om Cloud Functions for Firebase, kan du se den offisielle dokumentasjonen. Og i mellomtiden, sjekk ut noen av våre andre kurs og opplæringsprogrammer på Android app utvikling!