Firebase

1. Allgemeines

Firebase ist eine Entwicklungsplattform für mobile und Webanwendungen, die Backend-as-a-Service (BaaS)-Funktionalitäten bereitstellt. Dabei werden die Plattformen Android, iOS, Web, Unity etc. unterstützt. Im Zuge dessen stellt Firebase Entwicklern über ein Software Development Kit (SDK) Werkzeuge und Infrastruktur zur Verfügung. Diese ermöglichen es, serverseitige Funktionalitäten mittels Programmierschnittstellen für und auf verschiedenen Plattformen zu implementieren, ohne dabei die Serverinfrastruktur berücksichtigen zu müssen.

Im Jahr 2014 übernahm Google die Firebase Inc., welche im September 2011 von James Tamplin und Andrew Lee gegründet wurde und seitdem die Entwicklungsplattform Firebase entwickelte. Momentan wird die BaaS-Plattform von 1,5 Millionen Apps genutzt (vgl. [Wikipedia 2020], [Domin 2020]). Firebase besitzt achtzehn Produkte, welche zum Teil kostenpflichtig zur Verfügung stehen. Jedoch werden die meisten Produkte bis zu ihrer individuellen Schwelle kostenlos angeboten. Sobald die produktspezifische Schwelle erreicht ist, skaliert der Preis mit steigender Nutzung des Produkts (vgl. [Firebase 2020]). Beispielhafte Pricingmodelle sind im Folgenden zu sehen, wobei die Schwelle in der jeweils mittleren und die Preise bei Überschreiten der Schwelle in der jeweils rechten Spalte abgebildet sind.


Abbildung 1: Pricingmodell Firestore (vgl. [Firebase 2020])

Abbildung 2: Pricingmodell Authentication (vgl. [Firebase 2020])

2. Features

In der Firebase-Konsole lassen sich die über diverse API-Endpunkte anbindbaren Features von Firebase verwalten. Im Zuge dessen stehen dem Entwickler vier verschiedene Reiter zur Verfügung, in denen Softwarefeatures unterschiedlicher Art vorzufinden sind.

2.1 Entwicklung

2.1.1 Authentifizierung

Das von Firebase angebotene Authentication-Tool ermöglicht es, die loginspezifischen Daten von Nutzern sicher in der Firebase Cloud abzuspeichern und somit eine geräteübergreifende Nutzerauthentifizierung bereitzustellen. Dabei stellt Firebase unterschiedliche Authentifizierungsmethoden zur Verfügung. Dazu gehören die Authentifizierung mittels E-Mail und Passwort, anhand eines bestehenden Google-Accounts oder anhand der Telefonnummer des Nutzers. Nutzbar wird die Authentication-Funktionalität durch die Anbindung der entsprechenden API (vgl. [Firebase 2020]).

2.1.2 Realtime Database und Firestore

Das zentrale Entwicklungsfeature von Firebase ist Firestore. Hierbei handelt es sich um eine dokumentenorientierte NoSQL-Cloud-Datenbank, welche die Datenspeicherung für Clients ermöglicht. Firestore baut auf der Realtime Database von Google auf, die ebenfalls in Firebase zur Verfügung steht. Firestore bietet neue, intuitivere Datenmodelle, eine bessere Performance, umfangreichere Abfragen und ist skalierbarer als der Vorgänger. Jedoch bietet die Realtime Database ebenfalls Vorteile, beispielsweise bezüglich der laufenden Kosten in Produktionsumgebungen (vgl. [Firebase 2020], [Firestore 2020]).

2.1.3 Hosting

Ein weiteres Produkt von Firebase ist das Hosting von Anwendungen. Hierdurch wird eine schnelle und einfache Bereitstellung, beispielsweise von Webanwendungen, ermöglicht (vgl. [Firebase 2020]).

2.1.4 Storage

Das Produkt Storage ermöglicht das Hochladen von Multimedia- und anderen Dateien auf Firebase, um diese anschließend im Softwareprojekt nutzten zu können (vgl. [Firebase 2020]).

2.1.5 Machine Learning

Das Produkt Machine Learning stellt unter anderem Features zur Mustererkennung bereit, wobei man lediglich Text-, Bild- oder andere Dateien an die API senden muss. Die API liefert anschließend eine Response mit passenden Informationen, beispielsweise mit zur Bilddatei passenden Labels (vgl. [Firebase 2020]).

2.1.6 Functions

Das letzte Feature von Firebase im Reiter Entwicklung ist die Möglichkeit zur Implementierung eigener Cloud-Funktionen. Auf diese kann man anschließend aus dem Softwareprojekt zugreifen. Dies ermöglicht die Auslagerung komplexen Backendcodes in die Firebase Cloud (vgl. [Firebase 2020]).

2.2 Qualität

Im Reiter Qualität stellt Firebase Features zur Fehlererkennung, Fehlerbehebung, Leistungsüberwachung und zum Testing zur Verfügung. Darunter befindet sich das Tool Crashlytics, welches eine leichte Fehlererkennung und -behebung ermöglicht. Das Tool Performance dient der Leistungsüberwachung. Hierdurch werden Entwicklern Informationen zu Leistungsdaten der Anwendung, beispielsweise Ladezeiten oder die Dauer von Datenbankabfragen, bereitgestellt. Die Features Test Lab und App Distribution bieten die Möglichkeit, Anwendungen auf verschiedenen Deviceemulatoren mit verschiedenen Konfigurationen zu testen (vgl. [Firebase 2020]).

2.3 Analytics

Im Reiter Analytics, wobei es sich um das in Firebase integrierte Trackingtool Google Analytics handelt, stehen Entwicklern Möglichkeiten zum Tracking von Nutzeraktivitäten und -daten, von der Effektivität von Werbeanzeigen und Push-Benachrichtigungen sowie von Fehlern in der vom Entwickler angebundenen Anwendung zur Verfügung. Im Zuge dessen stellt Analytics unter anderem Features bereit, um zu trackende Events zu definieren und sich die getrackten Events in Dashboards anzeigen zu lassen. Des Weiteren lassen sich Audiences, also Gruppen von Nutzern, anhand deren Eigenschaften oder Verhaltensweisen innerhalb der Anwendung klassifizieren. Anschließend können gesonderte Push-Benachrichtigungen und Werbeanzeigen für diese Audiences festgelegt werden. Analytics stellt noch einige weitere Features zur Umsetzung von Funktionalitäten dieser Art zur Verfügung (vgl. [Firebase 2020]).

2.4 Wachstum

Über den Reiter Wachstum bietet Firebase Features zur Steigerung der Werbeeinnahmen, der Nutzerindividualität und weiteren Eigenschaften. So existiert beispielsweise das Produkt AdMob, wodurch die Anwendung monetarisiert und sinnvoll Werbung eingebunden werden kann. Weiterhin sind in diesem Reiter A/B Tests, Nutzungsvorhersagen durch auf Machine Learning basierten Methoden, Cloud Messaging zum Versenden individueller Benachrichtigungen an Nutzer et cetera möglich (vgl. [Firebase 2020]).

3. Konkurrenzvergleich

3.1 Firebase

Firebase vereinigt, wie viele weitere Konkurrenzprodukte, alle wichtigen Backend-Tools für Softwareprojekte. Ziel aller dieser Produkte ist die Reduzierung des Implementierungsaufwands und der Relevanz der Serverinfrastruktur für Entwickler. Konkurrenten von Firebase sind beispielsweise Back4App, Parse, Kinvey, Backendless oder AWS Amplify. Dabei besitzt Firebase folgende Vorteile (vgl. [Back4App 2020]):

  • eingebettetes Trackingtool Google-Analytics
  • fortgeschrittene Fehlerberichterstattung (z.B. durch Crashlytics)
  • unkomplizierte Nutzbarkeit durch ausgeprägte Dokumentation

Im Gegensatz dazu existieren folgende Nachteile:

  • nur dokumentenorientierte und keine relationale Datenbank (z.B. Back4App bietet SQL- und NoSQL-Lösung)
  • nur REST-APIs, keine GraphQL-APIs

3.2 Firestore

3.2.1 Datenbankmodell

Firestore ist eine dokumentenorientierte Datenbank. Im Gegensatz zu relationalen Datenbanken wird hierbei auf Abfragen mithilfe von SQL verzichtet. Dennoch ermöglichen dokumentenorientierte Datenbanken CRUD-Funktionalitäten. Ausgelegt sind sie auf die Speicherung semistrukturierter Daten, die keiner festen Struktur folgen. Dabei werden Daten durch Schlüssel-Wert-Paare in Dokumenten organisiert, welche wiederum in Sammlungen organisiert sind. Firestore speichert Daten im JSON-Format. Im Gegensatz zu relationalen Datenbanken, in denen für jedes nicht nullable Attribut ein Feld existieren muss, selbst wenn es in einem Datensatz nicht benötigt wird, müssen Datensätze keiner festen Struktur folgen. Das sorgt für weniger Einschränkungen, führt aber zur erhöhten Fehleranfälligkeit durch Uneinheitlichkeit. Im Allgemeinen besitzen dokumentenorientierte Datenbanken eine bessere Performanz bei Suchanfragen, da optimalerweise alle zu einem Sachverhalt notwendigen Daten in einem separaten Dokument gespeichert sind und somit nicht über viele Fremdschlüsselverknüpfungen gesucht werden müssen. Entscheidet man sich hingegen für den Einbau von Referenzen zwischen Dokumenten, kann dies zur gegenteiligen Wirkung führen (vgl. [Ionos 2019]).

3.2.2 Produkt

Konkurrenten von Firestore sind Elasticsearch, MongoDB, BaseX oder CouchDB. Die Vorteile gegenüber der Konkurrenz sind folgende (vgl. [DB-Engines 2020]):

  • bietet spezialisierte Zugriffskonzepte für App-Entwicklung
  • erfüllt Transaktionskonzept mit ACID-Eigenschaften
  • inkludierte User Authentication bei Einbindung

Jedoch ergeben sich folgende Nachteile:

  • unterstützt weniger Programmiersprachen als Konkurrenz (z.B. MongoDB)
  • keine SQL-Unterstützung

4. Einbindung in Ionic – Softwareprojekt

Für die Anbindung von Firebase in unser Softwareprojekt haben wir Angularfire verwendet. Dabei handelt es sich um die offizielle Angular Library für Firebase. Angularfire bietet eine leichtere Anbindung für die von Firebase bereitgestellten Features und sorgt für eine bessere Integrierung in die Umgebung von Angular.

Die auf den folgenden Abbildungen ersichtlichen Code-Snippets wurden eigenhändig erstellt.

4.1 Firestore

4.1.1 Anbindung

Abbildung 3: Beispiel einer Sammlung in Firestore (vgl. [Firebase 2020])

Abbildung 4: Referenz für eine Sammlung anlegen

Zuerst muss eine Referenz erstellt werden, um die Record Collection bearbeiten und beobachten zu können. Jetzt kann auf die Record-Collection in der Datenbank zugegriffen werden.

4.1.2 Create

Abbildung 5: Einer Sammlung einen neuen Eintrag hinzufügen

Um einen neuen Eintrag in die Sammlung hinzufügen zu können, wird die add Funktion verwendet. Hierbei wir ein Objekt an die Funktion übergeben. Eine ID ist jedoch nicht notwendig, da diese von Firebase automatisch erstellt wird. Deshalb wird mit Hilfe der copyAndPrepare Funktion der ID Eintrag entfernt.

4.1.3 Read

Abbildung 6: Einträge einer Sammlung auslesen

Neuerungen in einer Datensammlung können automatisch übermittelt werden, indem auf ein Observable subscribt zugegriffen wird. Deshalb wird zuerst ein Observable erstellt, welches die Änderungen der Record-Sammlung zurückgibt. Hierbei ist anzumerken, dass alle Felder eines Dokuments in Form eines Objekts von der Datenbank zurückgegeben werden und die ID separat übermittelt wird. Deshalb muss die ID dem Datenobjekt hinzugefügt werden.

4.1.4 Update

Abbildung 7: Eintrag einer Sammlung editieren

Um einen Eintrag ändern zu können, muss die ID des Dokumentes zusammen mit dem geänderten Objekt an die Funktion update übergeben werden.

4.1.5 Delete

Abbildung 8: Eintrag aus einer Sammlung entfernen

Für das Entfernen von Dokumenteinträgen muss lediglich die ID des entsprechenden Dokuments übergeben werden.

4.2 Authentifizierung

Für die Authentifizierung wurde das E-Mail/Passwort Verfahren gewählt.

4.2.1 Registrieren

Abbildung 9: Registrierung eines neuen Nutzers

Bei der Registrierung müssen eine E-Mail und ein Passwort an die createUserWithEmailAndPassword-Funktion übergeben werden. Firebase überprüft die übermittelten Daten und teilt den Erfolg oder Misserfolg mit. Bei Erfolg wird der neue Nutzer in der Authentifizierungsdatenbank von Firebase abgespeichert.

4.2.2 Login

Abbildung 10: Einloggen mithilfe der Nutzerdaten

Für das Einloggen müssen wieder E-Mail und Passwort übergeben werden. Die Funktion, welche das Einloggen handhabt, ist signInWithEmailAndPassword. Im Erfolgsfall wird der Nutzer eingeloggt, was auch in Firebase gespeichert wird.

4.2.3 Logout

Abbildung 11: Ausloggen eines Nutzers

Für das Ausloggen muss lediglich die signOut Funktion aufgerufen werden.

4.3 Storage

Abbildung 12: Storage Bereich in Firebase (vgl. [Firebase 2020])

Abbildung 13: Einbindung einer Bilddatei aus dem Firebase-Storage

Wie bereits beschrieben, ist es möglich, Multimedia- und andere Dateien in den Storage von Firebase zu laden und diese zu verwenden. Hier ist das in Firebase hochgeladene HTWK-Logo zu sehen. Im Softwareprojekt kann dieses über einen von Firebase bereitgestellten Link eingebunden werden.

4.4 Hosting

Eine Webanwendung über Firebase zu hosten kann in wenigen Schritten erreicht werden:

  • Firebase tools installieren (npm install firebase-tools)
  • bei Firebase einloggen (firebase login)
  • Firebase initialisieren (firebase init)
  • die Applikation bauen (ionic build –prod –release | für den Fall einer Ionic-Anwendung)
  • die Anwendung bereitstellen (firebase deploy)

Die im Rahmen des Vortrages erstellte Webanwendung kann über folgenden Link erreicht werden: https://ema-ss19-3706b.web.app

Literaturverzeichnis:

[Back4App 2020] Back4App, Die fünf besten Firebase-Alternativen, blog.back4app.com, 2020, URL: https://blog.back4app.com/de/die-funf-besten-firebase-alternativen/, gelesen am 25.11.2020.

[DB-Engines 2020] DB-Engines, Vergleich der Systemeigenschaften Elasticsearch vs. Google Cloud Firestore vs. MongoDB, db-engines.com, 2020, URL: https://db-engines.com/de/system/Elasticsearch%3BGoogle+Cloud+Firestore%3BMongoDB, gelesen am 25.11.2020.

[Domin 2020] Domin, A., Das derzeit wohl mächtigste Tool für Entwickler heißt Firebase, t3n.de, 2018, URL: https://t3n.de/news/das-derzeit-wohl-maechtigste-tool-fuer-entwickler-heisst-firebase-1101411/, gelesen am 25.11.2020.

[Firebase 2020] Firebase Dokumentation, firebase.google.com, 2020, URL: https://firebase.google.com/, gelesen am 29.11.2020.

[Firestore 2020] Firestore Dokumentation, firebase.google.com, 2020, URL: https://firebase.google.com/docs/firestore/data-model, gelesen am 25.11.2020.

[Ionos 2019] Ionos, Dokumentenorientierte Datenbank: Wie funktioniert der Document Store?, ionos.de, 2019, URL: https://www.ionos.de/digitalguide/hosting/hosting-technik/dokumentenorientierte-datenbank/, gelesen am 25.11.2020.

[Wikipedia 2020] Seite „Firebase“, In: Wikipedia, Die freie Enzyklopädie, de.wikipedia.org, 2020, URL: https://de.wikipedia.org/wiki/Firebase, gelesen am 26.11.2020.

Präsentationsfolien:

Firebase