Erste Schritte mit Firestore Enterprise-Version

In dieser Kurzanleitung erfahren Sie, wie Sie Firestore Enterprise Edition einrichten, Daten hinzufügen und dann entweder Core- oder Pipelinevorgänge verwenden, um die Daten abzufragen, die Sie gerade in der Firebase Console hinzugefügt haben.

Cloud Firestore unterstützt mobile oder Web-SDKs und Server-Clientbibliotheken:

  • Cloud Firestore unterstützt SDKs für Android, iOS, das Web und mehr. In Kombination mit Cloud Firestore Security Rules und Firebase Authentication, unterstützen die mobilen und Web-SDKs serverlose App-Architekturen, bei denen Clients direkt eine Verbindung zu Ihrer Cloud Firestore Datenbank herstellen.

  • Cloud Firestore unterstützt Server-Clientbibliotheken für Java, Node.js und Python. Mit diesen Clientbibliotheken können Sie privilegierte Serverumgebungen mit vollem Zugriff auf Ihre Datenbank einrichten. Weitere Informationen zu diesen Bibliotheken finden Sie in der Kurzanleitung für Server-Clientbibliotheken.

Firestore Enterprise Edition-Datenbank erstellen

  1. Erstellen Sie ein Firebase-Projekt, falls noch nicht geschehen: Klicken Sie in der Firebase Console auf Projekt hinzufügen, folgen Sie dann der Anleitung auf dem Bildschirm, um ein Firebase-Projekt zu erstellen oder Firebase-Dienste zu einem vorhandenen Google Cloud Projekt hinzuzufügen.

  2. Öffnen Sie Ihr Projekt in der Firebase Console. Maximieren Sie im linken Bereich Erstellen und wählen Sie dann Firestore-Datenbank aus.

  3. Klicken Sie auf Datenbank erstellen.

  4. Wählen Sie für den Datenbankmodus Enterprise aus.

  5. Wählen Sie für den Betriebsmodus Firestore im nativen Modus aus, der Core- und Pipelinevorgänge unterstützt.

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

  7. Wählen Sie einen Startmodus für Ihre Cloud Firestore Security Rules aus:

    Testmodus

    Gut für den Einstieg mit den mobilen und Web-Clientbibliotheken, ermöglicht aber jedem, Ihre Daten zu lesen und zu überschreiben. Nach dem Testen sollten Sie den Abschnitt Daten schützen lesen.

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

    Produktionsmodus

    Verweigert alle Lese- und Schreibvorgänge von mobilen und Web-Clients. Ihre authentifizierten Anwendungsserver (Python) können weiterhin auf Ihre Datenbank zugreifen.

    Die erste Gruppe von Cloud Firestore Security Rules gilt für Ihre Standard Cloud Firestore Datenbank. Wenn Sie mehrere Datenbanken für Ihr Projekt erstellen, können Sie Cloud Firestore Security Rules für jede Datenbank bereitstellen.

  8. Klicken Sie auf Erstellen.

Wenn Sie Firestore Enterprise Edition aktivieren, wird auch die API in der Cloud API Manager aktiviert.

Entwicklungsumgebung einrichten

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

Web

  1. Folgen Sie der Anleitung unter Firebase zu meiner Webanwendung hinzufügen.
  2. Das Cloud Firestore SDK ist als npm-Paket verfügbar.
    npm install firebase@12.11.0 --save
    Sie müssen sowohl Firebase als auch Cloud Firestore importieren.
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
iOS+

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 mit der Firebase BoM für Android die Abhängigkeit für die Cloud Firestore Bibliothek für Android in Ihrer Gradle-Datei des Moduls (auf App-Ebene) (in der Regel app/build.gradle.kts oder app/build.gradle).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.11.0"))
    
        // Declare the dependency for the Cloud Firestore library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-firestore")
    }

    Mit der Firebase BoM für Android, haben Sie immer eine kompatible Version der Firebase Android-Bibliotheken in Ihrer App.

    (Alternative) Firebase-Bibliotheksabhängigkeiten ohne Verwendung der BoM deklarieren

    Wenn Sie die Firebase BoM nicht verwenden möchten, müssen Sie die Version jeder Firebase-Bibliothek in der entsprechenden Abhängigkeitszeile angeben.

    Wenn Sie mehrere Firebase-Bibliotheken in Ihrer App verwenden, empfehlen wir dringend, die BoM zu verwenden, um die Bibliotheksversionen zu verwalten. So wird sichergestellt, dass alle Versionen kompatibel sind.

    dependencies {
        // Declare the dependency for the Cloud Firestore library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-firestore:26.1.2")
    }

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

Cloud Firestore initialisieren

Initialisieren Sie eine Instanz von Cloud Firestore:

Web

import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";

// TODO: Replace the following with your app's Firebase project configuration
// See: https://support.google.com/firebase/answer/7015592
const firebaseConfig = {
    FIREBASE_CONFIGURATION
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);


// When initializing Firestore, remember to use the name of the database you created earlier:
const db = initializeFirestore(app, {}, 'your-new-enterprise-database');

Ersetzen Sie FIREBASE_CONFIGURATION durch die firebaseConfig Ihrer Webanwendung.

Informationen zum Beibehalten von Daten, wenn die Verbindung des Geräts unterbrochen wird, finden Sie in der Dokumentation zu Offline-Daten aktivieren.

Swift
import FirebaseCore
import FirebaseFirestore

FirebaseApp.configure()

// When initializing Firestore, remember to use the name of the database you created earlier:
let db = Firestore.firestore(database: "your-new-enterprise-database")

Kotlin

// Access a Cloud Firestore instance from your Activity
// When initializing Firestore, remember to use the name of the database you created earlier:
val firestore = FirebaseFirestore.getInstance("your-new-enterprise-database")

Java

// Access a Cloud Firestore instance from your Activity
// When initializing Firestore, remember to use the name of the database you created earlier:
FirebaseFirestore firestore = FirebaseFirestore.getInstance("your-new-enterprise-database");

Daten mit Core-Vorgängen hinzufügen

Um Core- und Pipelinevorgänge zum Abfragen von Daten zu testen, fügen Sie Ihrer Datenbank mit Core-Vorgängen Daten hinzu.

Cloud Firestore speichert Daten in Dokumenten, die in Sammlungen gespeichert sind. Cloud Firestore erstellt Sammlungen und Dokumente implizit wenn Sie zum ersten Mal Daten zum Dokument hinzufügen. Sie müssen Sammlungen oder Dokumente nicht explizit erstellen.

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

Web

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);
}

Web

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)")
}

Kotlin

// 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

// 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);
            }
        });

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.

Web

// 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);
}

Web

// 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)")
}

Kotlin

// Create a new user with a first, middle, and last name
val user = hashMapOf(
    "first" to "Alan",
    "middle" to "Mathison",
    "last" to "Turing",
    "born" to 1912,
)

// 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

// Create a new user with a first, middle, and last name
Map<String, Object> user = new HashMap<>();
user.put("first", "Alan");
user.put("middle", "Mathison");
user.put("last", "Turing");
user.put("born", 1912);

// 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);
            }
        });

Daten mit Core-Vorgängen lesen

Verwenden Sie die Datenansicht in der Firebase Console , um schnell zu prüfen, ob Sie Daten zu Cloud Firestore hinzugefügt haben.

Sie können auch die Methode „get“ verwenden, um die gesamte Sammlung abzurufen.

Web

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

const querySnapshot = await getDocs(collection(db, "users"));
querySnapshot.forEach((doc) => {
  console.log(`${doc.id} => ${doc.data()}`);
});

Web

db.collection("users").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${doc.data()}`);
    });
});
Swift
Hinweis:Dieses Produkt nicht ist auf WatchOS- und App Clip-Zielen verfügbar.
do {
  let snapshot = try await db.collection("users").getDocuments()
  for document in snapshot.documents {
    print("\(document.documentID) => \(document.data())")
  }
} catch {
  print("Error getting documents: \(error)")
}

Kotlin

db.collection("users")
    .get()
    .addOnSuccessListener { result ->
        for (document in result) {
            Log.d(TAG, "${document.id} => ${document.data}")
        }
    }
    .addOnFailureListener { exception ->
        Log.w(TAG, "Error getting documents.", exception)
    }

Java

db.collection("users")
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        Log.d(TAG, document.getId() + " => " + document.getData());
                    }
                } else {
                    Log.w(TAG, "Error getting documents.", task.getException());
                }
            }
        });

Daten mit Pipelinevorgängen lesen

Jetzt können Sie die Pipelineabfrage mit der Core-Abfrage vergleichen.

Web

// The import/require of "firebase/firestore/pipelines" has a side-effect
// of extending the Firestore class with the `.pipeline()` method.
// Without this import/require, you will not be able to create a Pipeline.
// import { execute } from "firebase/firestore/pipelines";
const readDataPipeline = db.pipeline()
  .collection("users");

// Execute the pipeline and handle the result
try {
  const querySnapshot = await execute(readDataPipeline);
  querySnapshot.results.forEach((result) => {
    console.log(`${result.id} => ${result.data()}`);
  });
} catch (error) {
    console.error("Error getting documents: ", error);
}
Swift
do {
  // Initialize a Firestore Pipeline instance and specify the "users" collection as the
  // input stage.
  let snapshot = try await db.pipeline()
    .collection("users")
    .execute() // Execute the pipeline to retrieve documents.

  // Iterate through the documents in the pipeline results, similar to a regular query
  // snapshot.
  for result in snapshot.results {
    print("\(result.id ?? "no ID") => \(result.data)")
  }
} catch {
  print("Error getting documents with pipeline: \(error)")
}

Kotlin

val readDataPipeline = db.pipeline()
    .collection("users")

// Execute the pipeline and handle the result
readDataPipeline.execute()
    .addOnSuccessListener { result ->
        for (document in result) {
            println("${document.getId()} => ${document.getData()}")
        }
    }
    .addOnFailureListener { exception ->
        println("Error getting documents: $exception")
    }

Java

Pipeline readDataPipeline = db.pipeline()
.collection("users");

readDataPipeline.execute()
.addOnSuccessListener(new OnSuccessListener<Pipeline.Snapshot>() {
    @Override
    public void onSuccess(Pipeline.Snapshot snapshot) {
        for (PipelineResult result : snapshot.getResults()) {
            System.out.println(result.getId() + " => " + result.getData());
        }
    }
})
.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        System.out.println("Error getting documents: " + e);
    }
});

Daten für mobile und Web-SDKs schützen

Wenn Sie das Web-, Android- oder Apple-Plattformen-SDK verwenden, schützen Sie Ihre Daten in Cloud Firestore mit Firebase Authentication und Cloud Firestore Security Rules.

Hier sind einige grundlegende Regelsätze, die Sie für den Einstieg verwenden können. Sie können Ihre Sicherheitsregeln auf dem Tab Regeln in der Console ändern.

Auth erforderlich

// Allow read/write access to a document keyed by the user's UID
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{uid} {
      allow read, write: if request.auth != null && request.auth.uid == uid;
    }
  }
}

Produktionsmodus

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Bevor Sie Ihre Web-, Android- oder iOS-App in der Produktion bereitstellen, müssen Sie auch Schritte unternehmen, um sicherzustellen, dass nur Ihre App-Clients auf Ihre Cloud Firestore Daten zugreifen können. Weitere Informationen finden Sie in der App Check-Dokumentation.

Wenn Sie eines der Server-SDKs verwenden, schützen Sie Ihre Daten in Cloud Firestore mit Identity and Access Management (IAM).

Nächste Schritte

Vertiefen Sie Ihr Wissen über Core- und Pipelinevorgänge mit den folgenden Themen: