Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Firebase

Erste Schritte mit Cloud Firestore für iOS

by
Difficulty:IntermediateLength:LongLanguages:

German (Deutsch) translation by Katharina Nevolina (you can also view the original English article)

Mobile Codierer nutzen seit vielen Jahren die Firebase Realtime Database der Mobile Backend as a Service-Plattform (MBaaS) von Google, um sich auf die Erstellung von Funktionen für ihre Apps zu konzentrieren, ohne sich um die Back-End-Infrastruktur und -Datenbank kümmern zu müssen. Firebase vereinfacht das Speichern und Speichern von Daten in der Cloud sowie die Authentifizierung und Sicherheit und ermöglicht es Codierern, sich auf die Clientseite zu konzentrieren.

Im vergangenen Jahr kündigte Google mit Cloud Firestore eine weitere Back-End-Datenbanklösung an, die von Grund auf mit dem Versprechen einer größeren Skalierbarkeit und Intuitivität entwickelt wurde. Dies führte jedoch zu Verwirrung hinsichtlich des Platzes in Bezug auf das bereits vorhandene Flaggschiffprodukt von Google, die Firebase Realtime Database. In diesem Tutorial werden die Unterschiede zwischen den beiden Plattformen und die jeweiligen Vorteile beschrieben. Sie lernen, wie Sie mit Firestore-Dokumentreferenzen arbeiten sowie Daten in Echtzeit lesen, schreiben, aktualisieren und löschen, indem Sie eine einfache Erinnerungs-App erstellen.

Ziele dieses Tutorials

In diesem Tutorial lernen Sie den Cloud Firestore kennen. Sie erfahren, wie Sie die Plattform für die Persistenz und Synchronisierung von Datenbanken in Echtzeit nutzen können. Wir werden die folgenden Themen behandeln:

  • Was ist Cloud Firestore?
  • Das Firestore-Datenmodell
  • Cloud Firestore einrichten
  • Erstellen und Arbeiten mit Cloud Firestore-Referenzen
  • Lesen von Daten in Echtzeit aus dem Cloud Firestore
  • Daten erstellen, aktualisieren und löschen
  • Filterung und zusammengesetzte Abfragen

Vorausgesetztes Wissen

In diesem Tutorial wird davon ausgegangen, dass Sie mit Firebase vertraut waren und dass sich mit Swift und Xcode ein Hintergrund entwickelt hat.

Was ist Cloud Firestore?

Wie die Firebase Realtime Database bietet Firestore Mobil- und Webentwicklern eine plattformübergreifende Cloud-Lösung, mit der Daten unabhängig von Netzwerklatenz oder Internetverbindung in Echtzeit gespeichert werden können, sowie eine nahtlose Integration in die Google Cloud Platform-Produktsuite. Neben diesen Ähnlichkeiten gibt es unterschiedliche Vor- und Nachteile, die sich voneinander unterscheiden.

Datenmodell

Grundsätzlich speichert die Echtzeitdatenbank Daten als einen großen, monolithischen, hierarchischen JSON-Baum, während Firestore Daten in Dokumenten und Sammlungen sowie in Untersammlungen organisiert. Dies erfordert weniger Denormalisierung. Das Speichern von Daten in einem JSON-Baum bietet den Vorteil der Einfachheit bei der Arbeit mit einfachen Datenanforderungen. Bei der Arbeit mit komplexeren hierarchischen Daten wird es jedoch im Maßstab umständlicher.

Offline-Support

Beide Produkte bieten Offline-Support und speichern Daten aktiv in Warteschlangen, wenn eine latente oder keine Netzwerkverbindung besteht. So werden lokale Änderungen nach Möglichkeit wieder mit dem Back-End synchronisiert. Firestore unterstützt neben mobilen Apps auch die Offline-Synchronisierung für Web-Apps, während die Echtzeitdatenbank nur die mobile Synchronisierung ermöglicht.

Abfragen und Transaktionen

Die Echtzeitdatenbank unterstützt nur eingeschränkte Sortier- und Filterfunktionen. Sie können nur auf Eigenschaftsebene sortieren oder filtern, nicht jedoch auf beiden in einer einzigen Abfrage. Abfragen sind auch tiefgreifend, was bedeutet, dass sie einen großen Teilbaum von Ergebnissen zurückgeben. Das Produkt unterstützt nur einfache Schreib- und Transaktionsvorgänge, für die ein Abschlussrückruf erforderlich ist.

Firestore hingegen führt Indexabfragen mit zusammengesetzter Sortierung und Filterung ein, sodass Sie Aktionen kombinieren können, um Kettenfilter und Sortierung zu erstellen. Sie können auch flache Abfragen ausführen, die Untersammlungen anstelle der gesamten Sammlung zurückgeben, die Sie mit der Echtzeitdatenbank erhalten würden. Transaktionen sind atomarer Natur, unabhängig davon, ob Sie eine Stapeloperation oder eine einzelne senden. Transaktionen werden automatisch wiederholt, bis sie abgeschlossen sind. Darüber hinaus unterstützt die Echtzeitdatenbank nur einzelne Schreibtransaktionen, während Firestore Stapeloperationen atomar ermöglicht.

Leistung und Skalierbarkeit

Die Echtzeitdatenbank ist erwartungsgemäß recht robust und weist eine geringe Latenz auf. Datenbanken sind jedoch abhängig von der zonalen Verfügbarkeit auf einzelne Regionen beschränkt. Firestore hingegen speichert Daten horizontal über mehrere Zonen und Regionen hinweg, um eine echte globale Verfügbarkeit, Skalierbarkeit und Zuverlässigkeit sicherzustellen. Tatsächlich hat Google versprochen, dass Firestore zuverlässiger als die Echtzeitdatenbank sein wird.

Ein weiteres Manko der Echtzeitdatenbank ist die Beschränkung auf 100.000 gleichzeitige Benutzer (100.000 gleichzeitige Verbindungen und 1.000 Schreibvorgänge/Sekunde in einer einzelnen Datenbank). Danach müssten Sie Ihre Datenbank aufteilen (Ihre Datenbank in mehrere Datenbanken aufteilen), um mehr Benutzer zu unterstützen. Firestore wird automatisch über mehrere Instanzen skaliert, ohne dass Sie eingreifen müssen.

Firestore wurde von Grund auf unter Berücksichtigung der Skalierbarkeit entwickelt und verfügt über eine neue schematische Architektur, die Daten über mehrere Regionen hinweg repliziert, sich um die Authentifizierung kümmert und andere sicherheitsrelevante Angelegenheiten innerhalb des clientseitigen SDK behandelt. Das neue Datenmodell ist intuitiver als das von Firebase und ähnelt eher anderen vergleichbaren NoSQL-Datenbanklösungen wie MongoDB. Gleichzeitig bietet es eine robustere Abfrage-Engine.

Sicherheit

Wie Sie aus unseren vorherigen Tutorials wissen, verwaltet die Echtzeitdatenbank die Sicherheit durch kaskadierende Regeln mit separaten Validierungsauslösern. Dies funktioniert mit Firebase-Datenbankregeln, bei denen Ihre Daten separat überprüft werden. Firestore hingegen bietet ein einfacheres und dennoch leistungsfähigeres Sicherheitsmodell, das die Sicherheitsregeln des Cloud Firestore und das Identitäts- und Zugriffsmanagement (IAM) nutzt, wobei die Datenvalidierung automatisch ausgenommen wird.

Das Firestore-Datenmodell

Firestore ist eine dokumentbasierte NoSQL-Datenbank, die aus Sammlungen von Dokumenten besteht, von denen jede Daten enthält. Da es sich um eine NoSQL-Datenbank handelt, erhalten Sie keine Tabellen, Zeilen und andere Elemente, die Sie in einer relationalen Datenbank finden würden, sondern Sätze von Schlüssel/Wert-Paaren, die Sie in Dokumenten finden würden.

Sie erstellen Dokumente und Sammlungen implizit, indem Sie einem Dokument Daten zuweisen. Wenn das Dokument oder die Sammlung nicht vorhanden ist, werden sie automatisch für Sie erstellt, da die Sammlung immer der Stammknoten (erster Knoten) sein muss. Hier ist ein einfaches Aufgabenbeispielschema des Projekts, an dem Sie in Kürze arbeiten werden. Es besteht aus der Aufgabensammlung sowie zahlreichen Dokumenten, die zwei Felder enthalten, den Namen (Zeichenfolge) und ein Flag für die Ausführung der Aufgabe (boolesch). .

simple Tasks example schema of the project

Zerlegen wir jedes der Elemente, damit Sie sie besser verstehen können.

Sammlungen

Sammlungen sind ein Synonym für Datenbanktabellen in der SQL-Welt und enthalten ein oder mehrere Dokumente. Sammlungen müssen die Stammelemente in Ihrem Schema sein und dürfen nur Dokumente enthalten, keine anderen Sammlungen. Sie können jedoch auf ein Dokument verweisen, das sich wiederum auf Sammlungen (Untersammlungen) bezieht.

Diagram of document and collections

Im obigen Diagramm besteht eine Aufgabe aus zwei primitiven Feldern (Name und erledigt) sowie einer Unterauflistung (Unteraufgabe), die aus zwei eigenen primitiven Feldern besteht.

Unterlagen

Dokumente bestehen aus Schlüssel/Wert-Paaren, wobei die Werte einen der folgenden Typen haben:

  • primitive Felder (wie Zeichenfolgen, Zahlen, Boolesche Werte)
  • komplexe verschachtelte Objekte (Listen oder Arrays von Grundelementen)
  • Untersammlungen

Verschachtelte Objekte werden auch als Karten bezeichnet und können im Dokument wie folgt dargestellt werden. Das folgende Beispiel zeigt ein verschachteltes Objekt und Array.

Weitere Informationen zu den unterstützten Datentypen finden Sie in der Dokumentation zu den Datentypen von Google. Als Nächstes richten Sie ein Projekt für die Arbeit mit Cloud Firestore ein.

Projekt einrichten

Wenn Sie bereits mit Firebase gearbeitet haben, sollte Ihnen vieles davon bekannt sein. Andernfalls müssen Sie ein Konto in Firebase erstellen und die Anweisungen im Abschnitt "Einrichten des Projekts" unseres vorherigen Tutorials "Erste Schritte mit der Firebase-Authentifizierung für iOS" befolgen.

Um diesem Tutorial zu folgen, klonen Sie das Tutorial-Projekt-Repo. Fügen Sie als Nächstes die Firestore-Bibliothek hinzu, indem Sie Ihrem Podfile Folgendes hinzufügen:

Geben Sie Folgendes in Ihr Terminal ein, um Ihre Bibliothek zu erstellen:

Wechseln Sie als Nächstes zu Xcode und öffnen Sie die .xcworkspace-Datei. Navigieren Sie zur Datei AppDelegate.swift und geben Sie Folgendes in die didapplication:FinishLaunchingWithOptions:-Methode ein:

Gehen Sie in Ihrem Browser zur Firebase-Konsole und wählen Sie links die Registerkarte Datenbank.

Database tab in the Firebase console

Stellen Sie sicher, dass Sie die Option zum Starten im Testmodus auswählen, damit Sie während des Experimentierens keine Sicherheitsprobleme haben, und beachten Sie den Sicherheitshinweis, wenn Sie Ihre App in die Produktion verschieben. Sie können jetzt eine Sammlung und einige Beispieldokumente erstellen.

Hinzufügen einer Sammlung und eines Beispieldokuments

Erstellen Sie zunächst eine erste Sammlung, Tasks, indem Sie auf die Schaltfläche Sammlung hinzufügen klicken und die Sammlung wie unten dargestellt benennen:

naming the collection

Für das erste Dokument lassen Sie die Dokument-ID leer, wodurch automatisch eine ID für Sie generiert wird. Das Dokument besteht einfach aus zwei Feldern: name und done.

Document with two fields

Speichern Sie das Dokument, und Sie sollten in der Lage sein, die Sammlung und das Dokument zusammen mit der automatisch generierten ID zu bestätigen:

collection and document with the auto-generated ID

Wenn die Datenbank mit einem Beispieldokument in der Cloud eingerichtet ist, können Sie mit der Implementierung des Firestore SDK in Xcode beginnen.

Erstellen und Arbeiten mit Datenbankreferenzen

Öffnen Sie die Datei MasterViewController.swift in Xcode und fügen Sie die folgenden Zeilen hinzu, um die Bibliothek zu importieren:

Hier erstellen Sie einfach eine Listener-Variable, mit der Sie bei Änderungen in Echtzeit eine Verbindung zur Datenbank herstellen können. Sie erstellen auch eine DocumentSnapshot-Referenz, die den temporären Datenschnappschuss enthält.

Bevor Sie mit dem View Controller fortfahren, erstellen Sie eine weitere schnelle Datei, Task.swift, die Ihr Datenmodell darstellt:

Das obige Code-Snippet enthält eine Convenience-Eigenschaft (Wörterbuch) und eine Methode (init), die das Auffüllen des Modellobjekts erleichtern. Wechseln Sie zurück zum Ansichts-Controller und deklarieren Sie eine globale Setter-Variable, die die Basisabfrage auf die Top 50-Einträge in der Aufgabenliste beschränkt. Sie werden den Listener auch entfernen, sobald Sie die Abfragevariable festgelegt haben, wie in der folgenden didSet-Eigenschaft angegeben:

Lesen von Daten in Echtzeit aus dem Cloud Firestore

Verknüpfen Sie mit der vorhandenen Dokumentreferenz in viewWillAppear(_animated: Bool) den zuvor erstellten Listener mit den Ergebnissen des Abfrage-Snapshots und rufen Sie eine Liste der Dokumente ab. Dies erfolgt durch Aufrufen der Firestore-Methode query?.AddSnapshotListener:

Der obige Abschluss weist die snapshot.documents zu, indem das Array iterativ zugeordnet und für jedes Datenelement im Snapshot in ein neues Task-Modell-Instanzobjekt eingeschlossen wird. Mit nur wenigen Zeilen haben Sie alle Aufgaben erfolgreich aus der Cloud eingelesen und dem globalen tasks-Array zugewiesen.

Füllen Sie die folgenden TableView-Delegatenmethoden aus, um die Ergebnisse anzuzeigen:

Erstellen und führen Sie zu diesem Zeitpunkt das Projekt aus, und im Simulator sollten Sie in der Lage sein, Daten in Echtzeit zu beobachten. Fügen Sie Daten über die Firebase-Konsole hinzu, und Sie sollten sehen, dass sie sofort im App-Simulator angezeigt werden.

Data appearing in the app simulator

Daten erstellen, aktualisieren und löschen

Nachdem Sie den Inhalt des Backends erfolgreich gelesen haben, erstellen, aktualisieren und löschen Sie als Nächstes Daten. Das nächste Beispiel zeigt anhand eines erfundenen Beispiels, wie Sie ein Element nur durch Tippen auf die Zelle als erledigt markieren können. Beachten Sie die Closure-Eigenschaft collection.document(item.id).updateData (["done":!item.done]), die einfach auf eine bestimmte Dokument-ID verweist und jedes der Felder im Wörterbuch aktualisiert:

Rufen Sie zum Löschen eines Elements die Methode document(item.id).delete() auf:

Das Erstellen einer neuen Aufgabe umfasst das Hinzufügen einer neuen Schaltfläche in Ihrem Storyboard und das Verbinden der IBAction mit dem Ansichts-Controller sowie das Erstellen einer addTask(_ sender:)-Methode. Wenn ein Benutzer die Taste drückt, wird ein Warnblatt angezeigt, in dem der Benutzer einen neuen Aufgabennamen hinzufügen kann:

Vervollständigen Sie den letzten Teil der App, indem Sie Folgendes eingeben:

Erstellen Sie die App und führen Sie sie erneut aus. Wenn der Simulator angezeigt wird, fügen Sie einige Aufgaben hinzu und markieren Sie einige als erledigt. Testen Sie schließlich die Löschfunktion, indem Sie einige Aufgaben entfernen. Sie können bestätigen, dass die gespeicherten Daten in Echtzeit aktualisiert wurden, indem Sie zu Ihrer Firebase-Datenbankkonsole wechseln und die Sammlung und Dokumente beobachten.

collection and documents in the console

Filterung und zusammengesetzte Abfragen

Bisher haben Sie nur mit einer einfachen Abfrage ohne spezielle Filterfunktionen gearbeitet. Um etwas robustere Abfragen zu erstellen, können Sie nach bestimmten Werten filtern, indem Sie eine whereField-Klausel verwenden:

Sie können Ihre Abfragedaten bestellen und einschränken, indem Sie die Methoden order(by: ) und limit(to: ) wie folgt verwenden:

In der FirebaseDo-App haben Sie bereits limit für die Basisabfrage verwendet. Im obigen Snippet haben Sie auch eine andere Funktion verwendet, zusammengesetzte Abfragen, bei denen sowohl die Reihenfolge als auch das Limit miteinander verkettet sind. Sie können so viele Abfragen verketten, wie Sie möchten, wie im folgenden Beispiel:

Abschluss

In diesem Tutorial haben Sie das neue MBaaS-Produkt von Google, Cloud Firestore, untersucht und dabei eine einfache App zur Aufgabenerinnerung erstellt, die zeigt, wie einfach es für Sie ist, Ihre Daten in der Cloud zu speichern, zu synchronisieren und abzufragen. Sie haben die Datenschemastruktur von Firestore im Vergleich zur Firebase-Echtzeitdatenbank kennengelernt und erfahren, wie Sie Daten in Echtzeit lesen und schreiben sowie Daten aktualisieren und löschen. Sie haben auch gelernt, wie Sie einfache und zusammengesetzte Abfragen durchführen und Daten filtern.

Cloud Firestore wurde mit dem Ziel erstellt, die Robustheit der Firebase-Echtzeitdatenbank ohne viele der Einschränkungen bereitzustellen, die mobile Entwickler erdulden mussten, insbesondere im Hinblick auf Skalierbarkeit und Abfrage. Wir haben nur die Oberfläche dessen zerkratzt, was Sie mit Firestore erreichen können, und es lohnt sich auf jeden Fall, einige der fortgeschritteneren Konzepte zu untersuchen, z. B. das Paginieren von Daten mit Abfragecursorn, das Verwalten von Indizes und das Sichern Ihrer Daten.

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.