Firebase s mål är att hjälpa utvecklare att bygga bättre apps och växa dem till framgångsrika företag. Genom att ta hand om ditt app-back-end eller infrastruktur kan du låta dig fokusera på att lösa problem för dina användare. En av de nya spännande funktionerna som meddelades vid Google Cloud Next '17-konferensen i mars för Firebase var Cloud Functions. I den här handledningen lär du dig information om den nya funktionen genom att bygga en enkel Android-app med den.
Firebase Cloud Functions körs i en värd, privat och skalbar Node.js-miljö där du kan köra JavaScript-kod. Du skapar helt enkelt reaktiva funktioner som utlöser när en händelse inträffar. Cloud-funktioner är tillgängliga för både Google Cloud Platform och Firebase (de byggdes ovanpå Google Cloud-funktioner).
För närvarande stöder Cloud Funktioner följande triggers som du kan lyssna på och svara på:
Så nu har du sett det utbud av funktioner som Cloud Functions kan erbjuda. Men varför använda dem?
Att köra och konfigurera en bakre ände och servrar kan vara en verklig smärta. Du måste hantera problem som skalbarhet och skrivkod på serversidan. Men med Cloud Functions minskar denna komplexitet. Beräkningsintensiva uppgifter kan också utföras i molnet istället för på klientenheten (t.ex. bildåterställning för uppladdning eller skrivning till flera banor i din databas). Din kod kommer också att vara säkrare i molnet än på klientenheten, så du kan säkert lagra data som hemliga nycklar på din server.
I den här handledningen lär du dig att använda Realtime Database Triggers som kommer att skjuta när en databasskrivnings händelse inträffar. Sedan ser vi hur du använder Firebase Cloud Messaging-tjänsten för att skicka en anmälan till enheter som prenumererar på ett ämne. Vi skapar en enkel app som heter Tutsplus Alerts, som kommer att skicka en anmälan till abonnenter av "android" ämnet när en ny artikel är tillgänglig.
För att följa med denna handledning borde du vara bekant med:
Och du borde ha Node.js installerat på din dator.
Kolla in följande handledning här på Envato Tuts + om du behöver hjälp med att komma igång med Firebase:
Nu när förutsättningarna är inställda, låt oss ladda ner Cloud Functions.
För att börja använda Cloud Functions behöver vi Firebase CLI (kommandoradsgränssnittet) installerat från npm. Om du redan har nod på din maskin kan du installera molnfunktioner med:
npm installera -g firebase-verktyg
Detta kommando kommer att installera Firebase CLI globalt tillsammans med alla nödvändiga Node.js beroenden.
För att initiera ditt projekt:
brandbaserad inloggning
att logga in i Firebase via webbläsaren och verifiera CLI-verktyget.firebase init-funktioner
från den nya katalogen. Det här verktyget ger dig möjlighet att installera beroenden med NPM. Det är säkert att avvisa om du vill hantera beroenden på ett annat sätt.När dessa kommandon har blivit framgångsrikt ser din projektstruktur ut så här:
brandbasanvändning
.För att utveckla vår enkla Tutsplus Alerts-app behöver vi bara två nodmoduler: Cloud Functions och Admin SDK-moduler (dessa moduler är redan installerade för oss). Så gå till index.js och kräva dessa moduler, och sedan initiera en admin app instans.
var functions = require ('firebase-funktioner'); var admin = kräver ('firebase-admin'); admin.initializeApp (. functions.config () Firebase);
Nu när de nödvändiga modulerna för vårt projekt har importerats och initialiserats, låt oss koda vår molnfunktion i index.js fil. Som tidigare sagt kommer vi att skriva en funktion som kommer att avfyras när en onWrite ()
händelse inträffar i vår Firebase realtime-databas och kommer då som svar att skicka en anmälan (ett nedströmsmeddelande) till enhetsabonnenter.
// ... exports.sendNotification = functions.database.ref ('/ articles / articleId') .onWrite (event => // Hämta det nuvarande värdet av det som skrivits till realtidsdatabasen. Var eventSnapshot = event.data ; var str1 = "Författare är"; var str = str1.concat (eventSnapshot.child ("author") .val ()); console.log (str); var topic = "android"; var nyttolast = data: title: eventSnapshot.child ("title") .val (), författare: eventSnapshot.child ("author") .val (); // Skicka ett meddelande till enheter prenumererade på det angivna ämnet. returnera admin.messaging () .sendToTopic (ämne, nyttolast) .then (funktion (svar) // Se referensdokumentationen MessagingTopicResponse för // innehållet i svaret. console.log ("Skickat meddelande:", svar);). (funktion (fel) console.log ("Felmeddelande:", fel);););
I koden ovan lyssnar vi på databasbanan / artiklar / articleId
, var ArticleId
representerar arten av artikeln som skrivits med framgång. Nu är det som vi verkligen är oroade över de data som skrivits. För att få det använder vi event.data
, vilket är ett statiskt gränssnitt för DeltaSnapshot.
Därefter lägger du till data från den här ögonblicksbilden till en nyttolast för meddelanden och skickar den till "android" -emnet. Den asynkrona koden förenklas med JavaScript-löften.
Observera att i koden ovan skrev vi till konsolen genom att använda console.log ()
, vilket hjälper oss att felsöka och övervaka. Vi kan se den här loggen antingen i vår Firebase-instrumentpanel eller via kommandoraden med:
brandbasfunktioner: logg
Var medveten om att eftersom det här körs på Node.js, kan du installera andra moduler som är tillgängliga från NPM. Du kan också koda i JavaScript ES6 eller TypeScript istället för vanilla JavaScript.
Låt oss använda vår Cloud-funktion. Kör det här kommandot för distribuering:
$ firebase distribuera - bara funktioner
Nu kan vi koda Android-appen som kommer att prenumerera på ämnet, skriva till realtidsdatabasen och få en anmälan när data skrivs till vår realtidsdatabas - det vill säga när vår molnfunktion skulle köras!
Först, eld upp Android Studio och skapa ett nytt projekt "TutsplusAlerts"med en tom aktivitet som heter Huvudaktivitet
.
För att följa med, se till att du har integrerad Firebase i din app.
Lägg till följande beroende på din build.gradle fil:
kompilera 'com.google.firebase: firebase-databas: 10.2.1'
Se till att du synkroniserar ditt projekt efter att du har lagt till det.
Låt oss modellera en artikelenhet som ska bestå i vår realtidsdatabas.
offentlig klass Artikel Public String title; allmän strängförfattare; offentlig artikel () // Standardkonstruktor krävs för samtal till DataSnapshot.getValue (Article.class) allmänartikel (Stringtitel, String-författare) this.title = title; this.author = author;
Vår XML-layout för huvudaktiviteten kommer bara att ha två EditTexts
och bara en knapp som skickar in den nya artikeln.
Nu ska vi skriva till Realtime Database-sökvägen / artiklar /
.
// ... @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); Final FirebaseDatabase database = FirebaseDatabase.getInstance (); Final EditText titleEditText = (EditText) findViewById (R.id.et_title); Final EditText authorEditText = (EditText) findViewById (R.id.et_author); Knapp submitButton = (Button) findViewById (R.id.btn_submit); submitButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (Visa visning) DatabaseReference myRef = database.getReference ("articles"). push (); artikelartikel = ny artikel (titleEditText.getText () .String (), authorEditText.getText (). toString ()); myRef.setValue (artikel);); // ...
Din app behöver skrivåtkomst till databasen. Endast för demo ändamål kan du ställa in dina säkerhetsregler så att alla läser och skriver. I en riktig applikation skulle du aldrig vilja använda sådana osäkra säkerhetsinställningar.
"rules": ".read": "true", ".write": "true"
Du kan lära dig mer om Firebase Security Rules i mitt inlägg här på Envato Tuts+.
I det här skedet kan vi testa appen och se om vår Cloud-funktion utfördes framgångsrikt. Ange en titel och författare och klicka sedan på Skicka. Därefter besöker du funktioner instrumentpanelen och visa loggarna. Vår anpassade logg ska visas.
Från loggarna ovan ser vi att vi framgångsrikt har utfört vår Cloud Function och skickat ett meddelande med en nyttolast till enheter som prenumererar på "android'ämne, men ingen enhet har prenumererat på ämnet än. I nästa avsnitt använder vi Firebase Cloud Messaging så att enheter kan prenumerera på ett ämne och sedan bearbeta det inkommande meddelandet från servern för att visa ett meddelande.
Inkludera Firebase Messaging beroende av din build.gradle Fil och synkronisera ditt projekt efteråt:
kompilera 'com.google.firebase: firebase-messaging: 10.2.1'
Vi behöver skapa en tjänst som utökar FirebaseMessagingService och åsidosätter onMessageReceived
återanrop.
paketet com.chikeandroid.tutsplusalerts; importera com.google.firebase.messaging.FirebaseMessagingService; importera com.google.firebase.messaging.RemoteMessage; importera android.app.NotificationManager; importera android.app.PendingIntent; importera android.content.Context; importera android.content.Intent; importera android.media.RingtoneManager; importera android.net.Uri; importera android.support.v4.app.NotificationCompat; public class MyFirebaseMessagingService utökar FirebaseMessagingService @Override public void onMessageReceived (RemoteMessage remoteMessage) // Kontrollera om meddelandet innehåller en data nyttolast. om (remoteMessage.getData () .storlek ()> 0) showNotification (remoteMessage.getData (). get ("title"), remoteMessage.getData (). get ("author")); // Kontrollera om meddelandet innehåller en anmälnings nyttolast. om (remoteMessage.getNotification ()! = null) privat void showNotification (String title, String author) Intent intention = new Intent (detta, MainActivity.class); intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity (detta, 0 / * Anmälningskod * /, avsikt, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri = RingtoneManager.getDefaultUri (RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = ny NotificationCompat.Builder (this) .setContentTitle ("Ny artikel:" + titel) .setSmallIcon (R.mipmap.ic_launcher) .setContentText ("By" + författare) .setAutoCancel (true) .setSound (defaultSoundUri ) .setContentIntent (pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); notificationManager.notify (0 / * ID för anmälan * /, notificationBuilder.build ());
I ovanstående kod får vi också nyttolastigheten för data och visar den i en anmälan oavsett om programmet ligger i förgrund eller bakgrund.
Uppdatera manifestfilen, inklusive den tjänst som skapats tidigare inuti
märka.
// ...// ...
Slutligen måste vi prenumerera på ämnet "android'så att enheten kan ta emot och bearbeta meddelanden som skickas till det ämnet.
/ ... @Override protected void onCreate (Bundle savedInstanceState) // ... FirebaseMessaging.getInstance (). SubscribeToTopic ("android"); // ... // ...
Kör appen för andra gången och skriv in en titel och en författare och klicka sedan på Skicka. Den här gången visas en anmälan när en ny artikel läggs ut i databasen av en appanvändare.
För att göra detta före Cloud-funktioner skulle du ha behövt en HTTP- eller XMPP-server, vilket skulle innebära att mer kod ska skrivas, liksom en server för att ställa in och stödja.
I den här handledningen lärde du dig om Cloud Functions for Firebase: vad de är, varför behöver du dem och hur du börjar använda Cloud Functions för din app. Var medveten om att Cloud Functions for Firebase fortfarande är offentligt betad från det här skrivandet.
För mer information om Cloud Functions for Firebase, se den officiella dokumentationen. Och under tiden, kolla in några av våra andra kurser och handledning om Android App-utveckling!