Firestore-Datenbank mit einer Web- oder mobilen Clientbibliothek erstellen

In dieser Kurzanleitung wird gezeigt, wie Sie Firestore einrichten und mit der Clientbibliothek für Android, Apple-Plattformen, Web, Unity und C++ Daten hinzufügen sowie lesen.

verwendet.
  1. Falls noch nicht geschehen, erstellen Sie ein Firebase-Projekt: Klicken Sie in der Firebase Console auf Projekt hinzufügen und folgen Sie der Anleitung auf dem Bildschirm, um ein Firebase-Projekt zu erstellen oder Firebase-Dienste für ein vorhandenes Google Cloud -Projekt hinzuzufügen.

  2. Klicken Sie im linken Bereich auf Databases & Storage > Firestore.

  3. Klicken Sie auf Datenbank erstellen.

  4. Wählen Sie einen Speicherort für Ihre Datenbank aus.

    Wenn Sie keinen Speicherort auswählen können, wurde der Speicherort für Standardressourcen Ihres Projekts bereits festgelegt. Google Cloud Einige Ressourcen Ihres Projekts (z. B. die standardmäßige Firestore-Instanz) haben eine gemeinsame Standortabhängigkeit. Ihr Standort kann entweder bei der Projekterstellung oder beim Einrichten eines anderen Dienstes festgelegt werden, der diese Standortabhängigkeit hat.

  5. Wählen Sie einen Startmodus für Ihre Firestore-Sicherheitsregeln aus:

    Testmodus

    Gut für die ersten Schritte mit den Mobil- und Web-Clientbibliotheken, allerdings können Ihre Daten von beliebigen Personen gelesen und überschrieben werden. Prüfen Sie nach dem Test den Abschnitt Daten schützen.

    Wählen Sie den Testmodus aus, um mit dem Web-, Apple-Plattform- oder Android SDK zu beginnen.

    Sperrmodus

    Verweigert alle Lese- und Schreibvorgänge von Mobil- und Webclients. Ihre authentifizierten Anwendungsserver (C#, Go, Java, Node.js, PHP, Python oder Ruby) können weiterhin auf Ihre Datenbank zugreifen.

    Wenn Sie die C#-, Go-, Java-, Node.js-, PHP-, Python- oder Ruby-Server-Clientbibliothek verwenden möchten, wählen Sie den Sperrmodus aus.

    Ihre ursprünglichen Firestore-Sicherheitsregeln gelten für Ihre standardmäßige Firestore-Datenbank. Wenn Sie mehrere Datenbanken für Ihr Projekt erstellen, können Sie für jede Datenbank Firestore-Sicherheitsregeln bereitstellen.

  6. Klicken Sie auf Erstellen.

Wenn Sie Firestore aktivieren, wird auch die API im Cloud API Manager aktiviert.

Entwicklungsumgebung einrichten

Fügen Sie Ihrer Anwendung die erforderlichen Abhängigkeiten und Clientbibliotheken hinzu.

Webversion 9

  1. Folgen Sie der Anleitung unter Firebase zu meiner Webanwendung hinzufügen.
  2. Importieren Sie Firebase und Firestore:
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";

Webversion 8

  1. Folgen Sie der Anleitung unter Firebase zu meiner Webanwendung hinzufügen.
  2. Fügen Sie der Anwendung die Firebase- und Firestore-Bibliotheken hinzu:
    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-firestore.js"></script>
    Das Firestore SDK ist auch als NPM-Paket verfügbar.
    npm install firebase@8.10.1 --save
    Sie müssen Firebase und Firestore manuell anfordern.
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
Apple-Plattformen

Folgen Sie der Anleitung unter Firebase zu meiner Apple-Anwendung hinzufügen.

Verwenden Sie Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.

  1. Öffnen Sie Ihr App-Projekt und gehen Sie in Xcode zu File > Swift Packages > Add Package Dependency (Datei > Swift-Pakete > Paketabhängigkeit hinzufügen).
  2. Fügen Sie bei entsprechender Aufforderung das Firebase Apple Platforms SDK-Repository hinzu:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Wählen Sie die Firestore-Bibliothek aus.
  5. Wenn Sie fertig, beginnt Xcode automatisch, Ihre Abhängigkeiten im Hintergrund aufzulösen und herunterzuladen.
Android
  1. Folgen Sie der Anleitung unter Firebase zu meiner Android-Anwendung hinzufügen.
  2. Deklarieren Sie die Abhängigkeit für die Firestore-Bibliothek für Android in der Gradle-Datei Ihres Moduls (auf App-Ebene, in der Regel app/build.gradle.kts oder app/build.gradle):
    implementation("com.google.firebase:firebase-firestore:26.5.0")

    Wenn Ihre App mehrere Firebase-Bibliotheken verwendet, sollten Sie die Firebase Android BoM nutzen. Das stellt sicher, dass die Versionen der Firebase-Bibliothek Ihrer Anwendung immer kompatibel sind.

    Sie suchen nach einem Kotlin-spezifischen Bibliotheksmodul? Ab der Version vom Oktober 2023 können sowohl Kotlin- als auch Java-Entwickler das Hauptbibliotheksmodul verwenden. Weitere Informationen finden Sie in den FAQs zu dieser Initiative.

Dart

  1. Falls noch nicht geschehen, konfigurieren und initialisieren Sie Firebase in Ihrer Flutter-App.
  2. Führen Sie im Stammverzeichnis Ihres Flutter-Projekts den folgenden Befehl aus, um das Plug-in zu installieren:
    flutter pub add cloud_firestore
  3. Erstellen Sie Ihre Flutter-Anwendung neu:
    flutter run
C++
  1. Folgen Sie der Anleitung unter Firebase zu einem C++-Projekt hinzufügen.
  2. C++-Schnittstelle für Android.
    • Gradle-Abhängigkeiten. Fügen Sie der Gradle-Datei des Moduls (auf Anwendungsebene, in der Regel app/build.gradle) Folgendes hinzu:
              android.defaultConfig.externalNativeBuild.cmake {
                arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"
              }
      
              apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
              firebaseCpp.dependencies {
                // earlier entries
                auth
                firestore
              }
              
    • Binäre Abhängigkeiten: Die empfohlene Methode zum Abrufen der binären Abhängigkeiten besteht darin, der Datei CMakeLists.txt Folgendes hinzuzufügen:
              add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
              set(firebase_libs firebase_auth firebase_firestore firebase_app)
              # Replace the target name below with the actual name of your target,
              # for example, "native-lib".
              target_link_libraries(${YOUR_TARGET_NAME_HERE} "${firebase_libs}")
              
  3. Informationen zum Einrichten der Desktopintegration finden Sie unter Firebase zu einem C++-Projekt hinzufügen.
Unity
  1. Folgen Sie der Anleitung unter Firebase zu einem Unity-Projekt hinzufügen.
  2. Verwenden Sie die Unity-Oberfläche, um Ihr Projekt für die Minimierung von Android-Builds zu konfigurieren.
  3. Sie müssen den Build minimieren, um die Meldung Error while merging dex archives zu vermeiden.

    • Sie finden die Option unter Player Settings > Android > Publishing Settings > Minify (Player-Einstellungen > Android > Veröffentlichungseinstellungen > Minimieren).
    • Die Optionen können sich in verschiedenen Unity-Versionen unterscheiden. Weitere Informationen finden Sie in der offiziellen Unity-Dokumentation und im Firebase Unity Build Debug Guide.
    • Wenn die Anzahl der referenzierten Methoden nach der Aktivierung der Minimierung immer noch das Limit überschreitet, können Sie multidex in
        aktivieren:
      • mainTemplate.gradle, wenn Benutzerdefinierte Gradle-Vorlage unter Playereinstellungen aktiviert ist
      • oder die build.gradle-Datei auf Modulebene, wenn Sie Android Studio zum Erstellen des exportierten Projekts verwenden.

Firestore im nativen Modus initialisieren

Initialisieren Sie eine Instanz von Firestore:

Webversion 9

// Initialize Firestore through Firebase
import { initializeApp } from "firebase/app"
import { getFirestore } from "firebase/firestore"
const firebaseApp = initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  projectId: '### CLOUD FIRESTORE PROJECT ID ###'
});

const db = getFirestore();
Die Werte für `initializeApp` finden Sie in der `firebaseConfig` Ihrer Webanwendung. Informationen zum dauerhaften Sichern von Daten für den Fall, dass die Verbindung des Geräts unterbrochen wird, finden Sie in der Dokumentation zum Aktivieren von Offlinedaten.

Webversion 8

// Initialize Firestore through Firebase
firebase.initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  projectId: '### CLOUD FIRESTORE PROJECT ID ###'
});

var db = firebase.firestore();
Die Werte für `initializeApp` finden Sie in der `firebaseConfig` Ihrer Webanwendung. Informationen zum dauerhaften Sichern von Daten für den Fall, dass die Verbindung des Geräts unterbrochen wird, finden Sie in der Dokumentation zum Aktivieren von Offlinedaten.
Swift
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
import FirebaseCore
import FirebaseFirestore

FirebaseApp.configure()

let db = Firestore.firestore()
Objective-C
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
@import FirebaseCore;
@import FirebaseFirestore;

// Use Firebase library to configure APIs
[FIRApp configure];

FIRFirestore *defaultFirestore = [FIRFirestore firestore];
  
Kotlin
Android
  // Access a Firestore instance from your Activity
  val db = Firebase.firestore
Java
Android
// Access a Firestore instance from your Activity
  FirebaseFirestore db = FirebaseFirestore.getInstance();

Dart

db = FirebaseFirestore.instance;
C++
// Make sure the call to `Create()` happens some time before you call Firestore::GetInstance().
App::Create();
Firestore* db = Firestore::GetInstance();
Unity
using Firebase.Firestore;
using Firebase.Extensions;
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;

Daten hinzufügen

In Firestore werden Daten in Dokumenten gespeichert, die wiederum in Sammlungen gespeichert sind. Firestore erstellt Sammlungen und Dokumente implizit, wenn Sie dem Dokument zum ersten Mal Daten hinzufügen. Sie müssen Sammlungen oder Dokumente also nicht explizit anlegen.

Mit dem folgenden Beispielcode können Sie eine neue Sammlung und ein Dokument erstellen.

Webversion 9

import { collection, addDoc } from "firebase/firestore"; 

try {
  const docRef = await addDoc(collection(db, "users"), {
    first: "Ada",
    last: "Lovelace",
    born: 1815
  });
  console.log("Document written with ID: ", docRef.id);
} catch (e) {
  console.error("Error adding document: ", e);
}

Webversion 8

db.collection("users").add({
    first: "Ada",
    last: "Lovelace",
    born: 1815
})
.then((docRef) => {
    console.log("Document written with ID: ", docRef.id);
})
.catch((error) => {
    console.error("Error adding document: ", error);
});
Swift
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
// Add a new document with a generated ID
do {
  let ref = try await db.collection("users").addDocument(data: [
    "first": "Ada",
    "last": "Lovelace",
    "born": 1815
  ])
  print("Document added with ID: \(ref.documentID)")
} catch {
  print("Error adding document: \(error)")
}
Objective-C
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
// Add a new document with a generated ID
__block FIRDocumentReference *ref =
    [[self.db collectionWithPath:@"users"] addDocumentWithData:@{
      @"first": @"Ada",
      @"last": @"Lovelace",
      @"born": @1815
    } completion:^(NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error adding document: %@", error);
      } else {
        NSLog(@"Document added with ID: %@", ref.documentID);
      }
    }];
Kotlin
Android
// Create a new user with a first and last name
val user = hashMapOf(
    "first" to "Ada",
    "last" to "Lovelace",
    "born" to 1815,
)

// Add a new document with a generated ID
db.collection("users")
    .add(user)
    .addOnSuccessListener { documentReference ->
        Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}")
    }
    .addOnFailureListener { e ->
        Log.w(TAG, "Error adding document", e)
    }
Java
Android
// Create a new user with a first and last name
Map<String, Object> user = new HashMap<>();
user.put("first", "Ada");
user.put("last", "Lovelace");
user.put("born", 1815);

// Add a new document with a generated ID
db.collection("users")
        .add(user)
        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error adding document", e);
            }
        });

Dart

// Create a new user with a first and last name
final user = <String, dynamic>{
  "first": "Ada",
  "last": "Lovelace",
  "born": 1815
};

// Add a new document with a generated ID
db.collection("users").add(user).then((DocumentReference doc) =>
    print('DocumentSnapshot added with ID: ${doc.id}'));
C++
// Add a new document with a generated ID
Future<DocumentReference> user_ref =
    db->Collection("users").Add({{"first", FieldValue::String("Ada")},
                                 {"last", FieldValue::String("Lovelace")},
                                 {"born", FieldValue::Integer(1815)}});

user_ref.OnCompletion([](const Future<DocumentReference>& future) {
  if (future.error() == Error::kErrorOk) {
    std::cout << "DocumentSnapshot added with ID: " << future.result()->id()
              << std::endl;
  } else {
    std::cout << "Error adding document: " << future.error_message() << std::endl;
  }
});
Unity
DocumentReference docRef = db.Collection("users").Document("alovelace");
Dictionary<string, object> user = new Dictionary<string, object>
{
	{ "First", "Ada" },
	{ "Last", "Lovelace" },
	{ "Born", 1815 },
};
docRef.SetAsync(user).ContinueWithOnMainThread(task => {
	Debug.Log("Added data to the alovelace document in the users collection.");
});

Fügen Sie jetzt der Sammlung users ein weiteres Dokument hinzu. Beachten Sie, dass dieses Dokument ein Schlüssel/Wert-Paar (zweiter Vorname) enthält, das im ersten Dokument nicht auftaucht. Dokumente in einer Sammlung können unterschiedliche Informationen enthalten.

Webversion 9

// Add a second document with a generated ID.
import { addDoc, collection } from "firebase/firestore"; 

try {
  const docRef = await addDoc(collection(db, "users"), {
    first: "Alan",
    middle: "Mathison",
    last: "Turing",
    born: 1912
  });

  console.log("Document written with ID: ", docRef.id);
} catch (e) {
  console.error("Error adding document: ", e);
}

Webversion 8

// Add a second document with a generated ID.
db.collection("users").add({
    first: "Alan",
    middle: "Mathison",
    last: "Turing",
    born: 1912
})
.then((docRef) => {
    console.log("Document written with ID: ", docRef.id);
})
.catch((error) => {
    console.error("Error adding document: ", error);
});
Swift
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
// Add a second document with a generated ID.
do {
  let ref = try await db.collection("users").addDocument(data: [
    "first": "Alan",
    "middle": "Mathison",
    "last": "Turing",
    "born": 1912
  ])
  print("Document added with ID: \(ref.documentID)")
} catch {
  print("Error adding document: \(error)")
}
Objective-C
Hinweis: Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
// Add a second document with a generated ID.
__block FIRDocumentReference *ref =
    [[self.db collectionWithPath:@"users"] addDocumentWithData:@{
      @"first": @"Alan",
      @"middle": @"Mathison",
      @"last": @"Turing",
      @"born": @1912
    } completion:^(NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error adding document: %@", error);
      } else {
        NSLog(@"Document added with ID: %@", ref.documentID);
      }
    }];