Zacznij korzystać z Cloud Firestore

Z tego krótkiego wprowadzenia dowiesz się, jak skonfigurować Cloud Firestore, dodać dane, a następnie wyświetlić dodane przed chwilą dane w konsoli Firebase.

Utwórz bazę danych Cloud Firestore

  1. Jeśli nie masz już stwórz projekt Firebase: W konsoli Firebase , kliknij przycisk Dodaj projekt, a następnie postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby utworzyć projekt Firebase lub dodać usług Firebase do istniejącego projektu GCP.

  2. Przejdź do sekcji Chmura FireStore z konsoli Firebase . Zostaniesz poproszony o wybranie istniejącego projektu Firebase. Postępuj zgodnie z przepływem pracy tworzenia bazy danych.

  3. Wybierz tryb początkowy dla reguł bezpieczeństwa Cloud Firestore:

    Tryb testowy

    Dobry do rozpoczęcia pracy z bibliotekami klientów mobilnych i internetowych, ale umożliwia każdemu odczytywanie i nadpisywanie danych. Po przetestowaniu, upewnij się, aby przejrzeć zabezpieczyć dane sekcję.

    Aby rozpocząć korzystanie z pakietu SDK do internetu, systemu iOS lub Android, wybierz tryb testowy.

    Tryb zablokowany

    Odrzuca wszystkie odczyty i zapisy z klientów mobilnych i internetowych. Twoje uwierzytelnione serwery aplikacji (C#, Go, Java, Node.js, PHP, Python lub Ruby) nadal mogą uzyskiwać dostęp do Twojej bazy danych.

    Aby rozpocząć korzystanie z biblioteki klienta serwera C#, Go, Java, Node.js, PHP, Python lub Ruby, wybierz tryb zablokowany.

  4. Wybierz lokalizację dla swojej bazie danych.

    • To ustawienie jest lokalizacja Twojego projektu domyślny Google Cloud Platform (GCP) lokalizacja zasobów . Zauważ, że ta lokalizacja zostanie wykorzystany na usługi GCP w projekcie, które wymagają ustawienie lokalizacji, konkretnie domyślnego Cloud Storage wiadro i swojej App Engine aplikacji (co jest wymagane w przypadku korzystania Chmura Scheduler).

    • Jeśli nie możesz wybrać lokalizacji, oznacza to, że Twój projekt ma już domyślną lokalizację zasobu GCP. Została ustawiona albo podczas tworzenia projektu, albo podczas konfigurowania innej usługi, która wymaga ustawienia lokalizacji.

  5. Kliknij Gotowe.

Po włączeniu Chmura FireStore, umożliwia również API w chmurze API Managera .

Skonfiguruj swoje środowisko programistyczne

Dodaj wymagane zależności i biblioteki klienta do swojej aplikacji.

Wersja internetowa 8

  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do aplikacji sieci Web .
  2. Dodaj bibliotek Firebase i Chmura FireStore do aplikacji:
    <script src="https://www.gstatic.com/firebasejs/9.1.0/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/9.1.0/firebase-firestore.js"></script>
    Cloud Firestore SDK jest również dostępna jako pakiet npm.
    npm install firebase@9.1.0 --save
    
    Musisz ręcznie wymagają zarówno Firebase i chmura FireStore.
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
    

Wersja internetowa 9

  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do aplikacji sieci Web .
  2. Pakiet Cloud Firestore SDK jest dostępny jako pakiet npm.
    npm install firebase@9.1.0 --save
    
    Musisz importować zarówno Firebase i chmura FireStore.
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
    
iOS
  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do swojej aplikacji na iOS .
  2. Dodaj kapsułę Chmura FireStore do Podfile
    pod 'Firebase/Firestore'
    
    # Optionally, include the Swift extensions if you're using Swift.
    pod 'FirebaseFirestoreSwift'
    
  3. Zapisz plik i uruchom pod install .

Jawa

  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do aplikacji na Androida .
  2. Korzystanie z Firebase Android Bom , deklarują zależność dla biblioteki Chmura Firestore Android w module (app szczebla) Gradle plik (zazwyczaj app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.1')
    
        // 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'
    }
    

    Korzystając z Firebase Bom Android , aplikacja będzie zawsze używać kompatybilne wersje bibliotek Firebase Android.

    (Alternatywna) Stwierdzenie Firebase zależności biblioteki bez użycia BOM

    Jeśli zdecydujesz się nie korzystać z BoM Firebase, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.

    Należy pamiętać, że w przypadku korzystania z wielu bibliotek Firebase w swojej aplikacji, zalecamy korzystania z BOM do zarządzania wersjami biblioteki, co gwarantuje, że wszystkie wersje są kompatybilne.

    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:23.0.3'
    }
    

Kotlin+KTX

  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do aplikacji na Androida .
  2. Korzystanie z Firebase Android Bom , deklarują zależność dla biblioteki Chmura Firestore Android w module (app szczebla) Gradle plik (zazwyczaj app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.1')
    
        // 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-ktx'
    }
    

    Korzystając z Firebase Bom Android , aplikacja będzie zawsze używać kompatybilne wersje bibliotek Firebase Android.

    (Alternatywna) Stwierdzenie Firebase zależności biblioteki bez użycia BOM

    Jeśli zdecydujesz się nie korzystać z BoM Firebase, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.

    Należy pamiętać, że w przypadku korzystania z wielu bibliotek Firebase w swojej aplikacji, zalecamy korzystania z BOM do zarządzania wersjami biblioteki, co gwarantuje, że wszystkie wersje są kompatybilne.

    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-ktx:23.0.3'
    }
    
Jawa
  1. Dodaj pakiet Firebase Admin SDK do swojej aplikacji:
    • Korzystanie Gradle:
      compile 'com.google.firebase:firebase-admin:8.1.0'
      
    • Korzystanie Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>8.1.0</version>
      </dependency>
           
  2. Postępuj zgodnie z poniższymi instrukcjami, aby zainicjować Cloud Firestore przy użyciu odpowiednich danych logowania w swoim środowisku.
Pyton
  1. Dodaj Firebase Admin SDK do aplikacji Pythona:
    pip install --upgrade firebase-admin
  2. Postępuj zgodnie z poniższymi instrukcjami, aby zainicjować Cloud Firestore przy użyciu odpowiednich danych logowania w swoim środowisku.
C++
  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do projektu C ++ .
  2. Interfejs C++ dla Androida.
    • Zależności Gradle. Dodaj następującą do modułu (ok szczebla) Gradle plików (zwykle app/build.gradle ):
              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
              }
              
    • Zależności binarne. Podobnie, zalecanym sposobem dostać zależności binarnych jest dodanie następujących do CMakeLists.txt pliku:
              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. Aby skonfigurować integrację pulpitu, zobacz Dodaj Firebase do projektu C ++ .
Jedność
  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do projektu Unity .
  2. Interfejs Unity dla Androida.
  3. Podczas kompilowania dla systemu Android włącz ProGuarding, aby uniknąć limitu Android DEX. Aby to zrobić, w edytorze Unity:

    1. Wybierz Plik > Ustawienia kompilacji
    2. Przełącz „Platformę” na „Android” i kliknij „Przełącz platformę”
    3. Kliknij „Ustawienia odtwarzacza…”
    4. W głównym interfejsie Unity w sekcji „Ustawienia dla Androida” wybierz „Ustawienia publikowania”
    5. W sekcji „Minify” zmień ustawienia wersji i debugowania z „Brak” na „ProGuard”
Node.js
  1. Dodaj Firebase Admin SDK do aplikacji:
    npm install firebase-admin --save
  2. Postępuj zgodnie z poniższymi instrukcjami, aby zainicjować Cloud Firestore przy użyciu odpowiednich danych logowania w swoim środowisku.
Udać się
  1. Dodaj Firebase Admin SDK do aplikacji Go:
    go get firebase.google.com/go
    
  2. Postępuj zgodnie z poniższymi instrukcjami, aby zainicjować Cloud Firestore przy użyciu odpowiednich danych logowania w swoim środowisku.
PHP
  1. Biblioteki Chmura FireStore klient serwer (Java, node.js, Python, idź, PHP, C #, Ruby) i stosowanie Poświadczenia Google domyślną aplikacją do uwierzytelniania.
    • Aby uwierzytelnić ze środowiska rozwoju, ustaw GOOGLE_APPLICATION_CREDENTIALS zmienną środowiskową pkt do pliku klucza konto serwisu JSON. Można utworzyć plik klucza na API Console stronie Poświadczenia .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • W środowisku produkcyjnym nie musisz się uwierzytelniać, jeśli uruchamiasz aplikację w App Engine lub Compute Engine przy użyciu tego samego projektu, którego używasz w Cloud Firestore. W przeciwnym razie utwórz konto usługi .
  2. Zainstalować i umożliwi rozszerzenie gRPC dla PHP, które będą potrzebne do korzystania z biblioteki klienta.
  3. Dodaj bibliotekę Chmura Firestore PHP do swojej aplikacji:
    composer require google/cloud-firestore
C#
  1. Biblioteki Chmura FireStore klient serwer (Java, node.js, Python, idź, PHP, C #, Ruby) i stosowanie Poświadczenia Google domyślną aplikacją do uwierzytelniania.
    • Aby uwierzytelnić ze środowiska rozwoju, ustaw GOOGLE_APPLICATION_CREDENTIALS zmienną środowiskową pkt do pliku klucza konto serwisu JSON. Można utworzyć plik klucza na API Console stronie Poświadczenia .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • W środowisku produkcyjnym nie musisz się uwierzytelniać, jeśli uruchamiasz aplikację w App Engine lub Compute Engine przy użyciu tego samego projektu, którego używasz w Cloud Firestore. W przeciwnym razie utwórz konto usługi .
  2. Dodaj # bibliotekę Chmura Firestore C do swojej aplikacji w .csproj pliku:
    <ItemGroup>
      <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" />
    </ItemGroup>
  3. Dodaj następującą do Program.cs pliku:
    using Google.Cloud.Firestore;
Rubin
  1. Biblioteki Chmura FireStore klient serwer (Java, node.js, Python, idź, PHP, C #, Ruby) i stosowanie Poświadczenia Google domyślną aplikacją do uwierzytelniania.
    • Aby uwierzytelnić ze środowiska rozwoju, ustaw GOOGLE_APPLICATION_CREDENTIALS zmienną środowiskową pkt do pliku klucza konto serwisu JSON. Można utworzyć plik klucza na API Console stronie Poświadczenia .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • W środowisku produkcyjnym nie musisz się uwierzytelniać, jeśli uruchamiasz aplikację w App Engine lub Compute Engine przy użyciu tego samego projektu, którego używasz w Cloud Firestore. W przeciwnym razie utwórz konto usługi .
  2. Dodaj bibliotekę Chmura Firestore Ruby do swojej aplikacji w Gemfile :
    gem "google-cloud-firestore"
  3. Zainstalować zależności od Gemfile Zastosowanie:
    bundle install

(Opcjonalnie) Prototypowanie i testowanie za pomocą pakietu Firebase Local Emulator Suite

Dla programistów mobilnych, zanim omówimy sposób, w jaki Twoja aplikacja zapisuje i odczytuje z Cloud Firestore, przedstawmy zestaw narzędzi, których możesz użyć do prototypowania i testowania funkcjonalności Cloud Firestore: Firebase Local Emulator Suite. Jeśli wypróbowujesz różne modele danych, optymalizujesz reguły zabezpieczeń lub pracujesz nad znalezieniem najbardziej opłacalnego sposobu interakcji z zapleczem, możliwość pracy lokalnej bez wdrażania usług na żywo może być świetnym pomysłem.

Emulator Cloud Firestore jest częścią pakietu Local Emulator Suite, który umożliwia aplikacji interakcję z zawartością i konfiguracją emulowanej bazy danych, a także opcjonalnie z emulowanymi zasobami projektu (funkcjami, innymi bazami danych i regułami zabezpieczeń).

Korzystanie z emulatora Cloud Firestore obejmuje tylko kilka kroków:

  1. Dodanie wiersza kodu do konfiguracji testowej aplikacji, aby połączyć się z emulatorem.
  2. Z katalogu lokalnego katalogu projektu, uruchomiony firebase emulators:start .
  3. Wykonywanie wywołań z kodu prototypu aplikacji przy użyciu pakietu SDK platformy Cloud Firestore tak jak zwykle.

Szczegółowy solucja udziałem Chmura FireStore i chmura funkcji jest dostępna. Należy również spojrzeć na wstępie Local Emulator Suite .

Zainicjuj Cloud Firestore

Zainicjuj instancję Cloud Firestore:

Wersja internetowa 8

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

var db = firebase.firestore();
Wartości `initializeApp` można znaleźć w aplikacji internetowej ` firebaseConfig` . Utrzymują się dane, gdy urządzenie traci połączenie, zobacz Włączanie danych w trybie offline dokumentacji.

Wersja internetowa 9

// Initialize Cloud 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();
Wartości `initializeApp` można znaleźć w aplikacji internetowej ` firebaseConfig` . Utrzymują się dane, gdy urządzenie traci połączenie, zobacz Włączanie danych w trybie offline dokumentacji.
Szybki
import Firebase
FirebaseApp.configure()

let db = Firestore.firestore()
Cel C
@import Firebase;

// Use Firebase library to configure APIs
[FIRApp configure];
  
FIRFirestore *defaultFirestore = [FIRFirestore firestore];

Jawa

// Access a Cloud Firestore instance from your Activity
FirebaseFirestore db = FirebaseFirestore.getInstance();

Kotlin+KTX

// Access a Cloud Firestore instance from your Activity
val db = Firebase.firestore
Jawa
Pakiet SDK Cloud Firestore jest inicjowany na różne sposoby w zależności od środowiska. Poniżej znajdują się najczęstsze metody. Pełną odniesienia, patrz Inicjalizacja Admin SDK .
  • Zainicjować na Google Cloud Platform
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use the application default credentials
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .setProjectId(projectId)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
    
  • Zainicjuj na własnym serwerze

    Aby korzystać z Firebase Admin SDK na własnym serwerze, należy użyć konta usługi .

    Przejdź do IAM & Administrator> kont usług w konsoli Cloud Platform. Wygeneruj nowy klucz prywatny i zapisz plik JSON. Następnie użyj pliku, aby zainicjować SDK:

    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use a service account
    InputStream serviceAccount = new FileInputStream("path/to/serviceAccount.json");
    GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount);
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
    
  • Pyton
    Pakiet SDK Cloud Firestore jest inicjowany na różne sposoby w zależności od środowiska. Poniżej znajdują się najczęstsze metody. Pełną odniesienia, patrz Inicjalizacja Admin SDK .
  • Zainicjować na Google Cloud Platform
    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use the application default credentials
    cred = credentials.ApplicationDefault()
    firebase_admin.initialize_app(cred, {
      'projectId': project_id,
    })
    
    db = firestore.client()
    
  • Zainicjuj na własnym serwerze

    Aby korzystać z Firebase Admin SDK na własnym serwerze, należy użyć konta usługi .

    Przejdź do IAM & Administrator> kont usług w konsoli Cloud Platform. Wygeneruj nowy klucz prywatny i zapisz plik JSON. Następnie użyj pliku, aby zainicjować SDK:

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use a service account
    cred = credentials.Certificate('path/to/serviceAccount.json')
    firebase_admin.initialize_app(cred)
    
    db = firestore.client()
    
  • Pyton

    Pakiet SDK Cloud Firestore jest inicjowany na różne sposoby w zależności od środowiska. Poniżej znajdują się najczęstsze metody. Pełną odniesienia, patrz Inicjalizacja Admin SDK .
  • Zainicjować na Google Cloud Platform
    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use the application default credentials
    cred = credentials.ApplicationDefault()
    firebase_admin.initialize_app(cred, {
      'projectId': project_id,
    })
    
    db = firestore.AsyncClient()
    
  • Zainicjuj na własnym serwerze

    Aby korzystać z Firebase Admin SDK na własnym serwerze, należy użyć konta usługi .

    Przejdź do IAM & Administrator> kont usług w konsoli Cloud Platform. Wygeneruj nowy klucz prywatny i zapisz plik JSON. Następnie użyj pliku, aby zainicjować SDK:

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use a service account
    cred = credentials.Certificate('path/to/serviceAccount.json')
    firebase_admin.initialize_app(cred)
    
    db = firestore.AsyncClient()
    
  • C++
    // Make sure the call to `Create()` happens some time before you call Firestore::GetInstance().
    App::Create();
    Firestore* db = Firestore::GetInstance();
    Node.js
    Pakiet SDK Cloud Firestore jest inicjowany na różne sposoby w zależności od środowiska. Poniżej znajdują się najczęstsze metody. Pełną odniesienia, patrz Inicjalizacja Admin SDK .
    • Funkcje zainicjować na chmurze
      const admin = require('firebase-admin');
      admin.initializeApp();
      
      const db = admin.firestore();
      
    • Zainicjować na Google Cloud Platform
      const admin = require('firebase-admin');
      admin.initializeApp({
        credential: admin.credential.applicationDefault()
      });
      
      const db = admin.firestore();
    • Zainicjuj na własnym serwerze

      Aby korzystać z Firebase Admin SDK na własnym serwerze (lub innego środowiska node.js), należy użyć konta usługi . Przejdź do IAM & Administrator> kont usług w konsoli Cloud Platform. Wygeneruj nowy klucz prywatny i zapisz plik JSON. Następnie użyj pliku, aby zainicjować SDK:

      const admin = require('firebase-admin');
      const serviceAccount = require('./path/to/serviceAccountKey.json');
      
      admin.initializeApp({
        credential: admin.credential.cert(serviceAccount)
      });
      
      const db = admin.firestore();
      
    Udać się
    Pakiet SDK Cloud Firestore jest inicjowany na różne sposoby w zależności od środowiska. Poniżej znajdują się najczęstsze metody. Pełną odniesienia, patrz Inicjalizacja Admin SDK .
  • Zainicjować na Google Cloud Platform
    import (
      "log"
    
      firebase "firebase.google.com/go"
      "google.golang.org/api/option"
    )
    
    // Use the application default credentials
    ctx := context.Background()
    conf := &firebase.Config{ProjectID: projectID}
    app, err := firebase.NewApp(ctx, conf)
    if err != nil {
      log.Fatalln(err)
    }
    
    client, err := app.Firestore(ctx)
    if err != nil {
      log.Fatalln(err)
    }
    defer client.Close()
    
  • Zainicjuj na własnym serwerze

    Aby korzystać z Firebase Admin SDK na własnym serwerze, należy użyć konta usługi .

    Przejdź do IAM & Administrator> kont usług w konsoli Cloud Platform. Wygeneruj nowy klucz prywatny i zapisz plik JSON. Następnie użyj pliku, aby zainicjować SDK:

    import (
      "log"
    
      firebase "firebase.google.com/go"
      "google.golang.org/api/option"
    )
    
    // Use a service account
    ctx := context.Background()
    sa := option.WithCredentialsFile("path/to/serviceAccount.json")
    app, err := firebase.NewApp(ctx, nil, sa)
    if err != nil {
      log.Fatalln(err)
    }
    
    client, err := app.Firestore(ctx)
    if err != nil {
      log.Fatalln(err)
    }
    defer client.Close()
    
  • PHP
    use Google\Cloud\Firestore\FirestoreClient;
    
    /**
     * Initialize Cloud Firestore with default project ID.
     */
    function setup_client_create()
    {
        // Create the Cloud Firestore client
        $db = new FirestoreClient();
        printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);
    }
    Jedność
    using Firebase.Firestore;
    using Firebase.Extensions;
    FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
    C#
    FirestoreDb db = FirestoreDb.Create(project);
    Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
    Rubin
    require "google/cloud/firestore"
    
    # The `project_id` parameter is optional and represents which project the
    # client will act on behalf of. If not supplied, the client falls back to the
    # default project inferred from the environment.
    firestore = Google::Cloud::Firestore.new project_id: project_id
    
    puts "Created Cloud Firestore client with given project ID."

    Dodaj dane

    Cloud Firestore przechowuje dane w Dokumentach, które są przechowywane w kolekcjach. Cloud Firestore tworzy kolekcje i dokumenty niejawnie, gdy po raz pierwszy dodajesz dane do dokumentu. Nie musisz jawnie tworzyć kolekcji ani dokumentów.

    Utwórz nową kolekcję i dokument, korzystając z poniższego przykładowego kodu.

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

    Wersja internetowa 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);
    });
    Szybki
    // Add a new document with a generated ID
    var ref: DocumentReference? = nil
    ref = db.collection("users").addDocument(data: [
        "first": "Ada",
        "last": "Lovelace",
        "born": 1815
    ]) { err in
        if let err = err {
            print("Error adding document: \(err)")
        } else {
            print("Document added with ID: \(ref!.documentID)")
        }
    }
    Cel C
    // 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);
          }
        }];

    Jawa

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

    Kotlin+KTX

    // 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)
        }
    Jawa
    DocumentReference docRef = db.collection("users").document("alovelace");
    // Add document data  with id "alovelace" using a hashmap
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Ada");
    data.put("last", "Lovelace");
    data.put("born", 1815);
    //asynchronously write data
    ApiFuture<WriteResult> result = docRef.set(data);
    // ...
    // result.get() blocks on response
    System.out.println("Update time : " + result.get().getUpdateTime());
    Pyton
    doc_ref = db.collection(u'users').document(u'alovelace')
    doc_ref.set({
        u'first': u'Ada',
        u'last': u'Lovelace',
        u'born': 1815
    })

    Pyton

    doc_ref = db.collection("users").document("alovelace")
    await doc_ref.set({"first": "Ada", "last": "Lovelace", "born": 1815})
    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()
                  << '\n';
      } else {
        std::cout << "Error adding document: " << future.error_message() << '\n';
      }
    });
    Node.js
    const docRef = db.collection('users').doc('alovelace');
    
    await docRef.set({
      first: 'Ada',
      last: 'Lovelace',
      born: 1815
    });
    Udać się
    _, _, err := client.Collection("users").Add(ctx, map[string]interface{}{
    	"first": "Ada",
    	"last":  "Lovelace",
    	"born":  1815,
    })
    if err != nil {
    	log.Fatalf("Failed adding alovelace: %v", err)
    }
    PHP
    $docRef = $db->collection('samples/php/users')->document('lovelace');
    $docRef->set([
        'first' => 'Ada',
        'last' => 'Lovelace',
        'born' => 1815
    ]);
    printf('Added data to the lovelace document in the users collection.' . PHP_EOL);
    Jedność
    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.");
    });
    C#
    DocumentReference docRef = db.Collection("users").Document("alovelace");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
        { "First", "Ada" },
        { "Last", "Lovelace" },
        { "Born", 1815 }
    };
    await docRef.SetAsync(user);
    Rubin
    doc_ref = firestore.doc "#{collection_path}/alovelace"
    
    doc_ref.set(
      {
        first: "Ada",
        last:  "Lovelace",
        born:  1815
      }
    )
    
    puts "Added data to the alovelace document in the users collection."

    Teraz dodać nowy dokument do users kolekcji. Zwróć uwagę, że ten dokument zawiera parę klucz-wartość (drugie imię), która nie pojawia się w pierwszym dokumencie. Dokumenty w kolekcji mogą zawierać różne zestawy informacji.

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

    Wersja internetowa 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);
    });
    Szybki
    // Add a second document with a generated ID.
    ref = db.collection("users").addDocument(data: [
        "first": "Alan",
        "middle": "Mathison",
        "last": "Turing",
        "born": 1912
    ]) { err in
        if let err = err {
            print("Error adding document: \(err)")
        } else {
            print("Document added with ID: \(ref!.documentID)")
        }
    }
    Cel C
    // 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);
          }
        }];

    Jawa

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

    Kotlin+KTX

    // 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)
        }
    Jawa
    DocumentReference docRef = db.collection("users").document("aturing");
    // Add document data with an additional field ("middle")
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Alan");
    data.put("middle", "Mathison");
    data.put("last", "Turing");
    data.put("born", 1912);
    
    ApiFuture<WriteResult> result = docRef.set(data);
    System.out.println("Update time : " + result.get().getUpdateTime());
    Pyton
    doc_ref = db.collection(u'users').document(u'aturing')
    doc_ref.set({
        u'first': u'Alan',
        u'middle': u'Mathison',
        u'last': u'Turing',
        u'born': 1912
    })

    Pyton

    doc_ref = db.collection("users").document("aturing")
    await doc_ref.set(
        {"first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912}
    )
    C++
    db->Collection("users")
        .Add({{"first", FieldValue::String("Alan")},
              {"middle", FieldValue::String("Mathison")},
              {"last", FieldValue::String("Turing")},
              {"born", FieldValue::Integer(1912)}})
        .OnCompletion([](const Future<DocumentReference>& future) {
          if (future.error() == Error::kErrorOk) {
            std::cout << "DocumentSnapshot added with ID: "
                      << future.result()->id() << '\n';
          } else {
            std::cout << "Error adding document: " << future.error_message()
                      << '\n';
          }
        });
    Node.js
    const aTuringRef = db.collection('users').doc('aturing');
    
    await aTuringRef.set({
      'first': 'Alan',
      'middle': 'Mathison',
      'last': 'Turing',
      'born': 1912
    });
    Udać się
    _, _, err = client.Collection("users").Add(ctx, map[string]interface{}{
    	"first":  "Alan",
    	"middle": "Mathison",
    	"last":   "Turing",
    	"born":   1912,
    })
    if err != nil {
    	log.Fatalf("Failed adding aturing: %v", err)
    }
    PHP
    $docRef = $db->collection('samples/php/users')->document('aturing');
    $docRef->set([
        'first' => 'Alan',
        'middle' => 'Mathison',
        'last' => 'Turing',
        'born' => 1912
    ]);
    printf('Added data to the aturing document in the users collection.' . PHP_EOL);
    Jedność
    DocumentReference docRef = db.Collection("users").Document("aturing");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
    	{ "First", "Alan" },
    	{ "Middle", "Mathison" },
    	{ "Last", "Turing" },
    	{ "Born", 1912 }
    };
    docRef.SetAsync(user).ContinueWithOnMainThread(task => {
    	Debug.Log("Added data to the aturing document in the users collection.");
    });
    C#
    DocumentReference docRef = db.Collection("users").Document("aturing");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
        { "First", "Alan" },
        { "Middle", "Mathison" },
        { "Last", "Turing" },
        { "Born", 1912 }
    };
    await docRef.SetAsync(user);
    Rubin
    doc_ref = firestore.doc "#{collection_path}/aturing"
    
    doc_ref.set(
      {
        first:  "Alan",
        middle: "Mathison",
        last:   "Turing",
        born:   1912
      }
    )
    
    puts "Added data to the aturing document in the users collection."

    Przeczytaj dane

    Aby szybko sprawdzić, czy dane zostały dodane do Cloud FireStore użyć widza danych w konsoli Firebase .

    Możesz również użyć metody "get", aby pobrać całą kolekcję.

    Wersja internetowa 9

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

    Wersja internetowa 8

    db.collection("users").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            console.log(`${doc.id} => ${doc.data()}`);
        });
    });
    Szybki
    db.collection("users").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                print("\(document.documentID) => \(document.data())")
            }
        }
    }
    Cel C
    [[self.db collectionWithPath:@"users"]
        getDocumentsWithCompletion:^(FIRQuerySnapshot * _Nullable snapshot,
                                     NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Error getting documents: %@", error);
          } else {
            for (FIRDocumentSnapshot *document in snapshot.documents) {
              NSLog(@"%@ => %@", document.documentID, document.data);
            }
          }
        }];

    Jawa

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

    Kotlin+KTX

    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)
            }
    Jawa
    // asynchronously retrieve all users
    ApiFuture<QuerySnapshot> query = db.collection("users").get();
    // ...
    // query.get() blocks on response
    QuerySnapshot querySnapshot = query.get();
    List<QueryDocumentSnapshot> documents = querySnapshot.getDocuments();
    for (QueryDocumentSnapshot document : documents) {
      System.out.println("User: " + document.getId());
      System.out.println("First: " + document.getString("first"));
      if (document.contains("middle")) {
        System.out.println("Middle: " + document.getString("middle"));
      }
      System.out.println("Last: " + document.getString("last"));
      System.out.println("Born: " + document.getLong("born"));
    }
    Pyton
    users_ref = db.collection(u'users')
    docs = users_ref.stream()
    
    for doc in docs:
        print(f'{doc.id} => {doc.to_dict()}')

    Pyton

    users_ref = db.collection("users")
    docs = users_ref.stream()
    
    async for doc in docs:
        print(f"{doc.id} => {doc.to_dict()}")
    C++
    Future<QuerySnapshot> users = db->Collection("users").Get();
    users.OnCompletion([](const Future<QuerySnapshot>& future) {
      if (future.error() == Error::kErrorOk) {
        for (const DocumentSnapshot& document : future.result()->documents()) {
          std::cout << document << '\n';
        }
      } else {
        std::cout << "Error getting documents: " << future.error_message()
                  << '\n';
      }
    });
    Node.js
    const snapshot = await db.collection('users').get();
    snapshot.forEach((doc) => {
      console.log(doc.id, '=>', doc.data());
    });
    Udać się
    iter := client.Collection("users").Documents(ctx)
    for {
    	doc, err := iter.Next()
    	if err == iterator.Done {
    		break
    	}
    	if err != nil {
    		log.Fatalf("Failed to iterate: %v", err)
    	}
    	fmt.Println(doc.Data())
    }
    PHP
    $usersRef = $db->collection('samples/php/users');
    $snapshot = $usersRef->documents();
    foreach ($snapshot as $user) {
        printf('User: %s' . PHP_EOL, $user->id());
        printf('First: %s' . PHP_EOL, $user['first']);
        if (!empty($user['middle'])) {
            printf('Middle: %s' . PHP_EOL, $user['middle']);
        }
        printf('Last: %s' . PHP_EOL, $user['last']);
        printf('Born: %d' . PHP_EOL, $user['born']);
        printf(PHP_EOL);
    }
    printf('Retrieved and printed out all documents from the users collection.' . PHP_EOL);
    Jedność
    CollectionReference usersRef = db.Collection("users");
    usersRef.GetSnapshotAsync().ContinueWithOnMainThread(task =>
    {
      QuerySnapshot snapshot = task.Result;
      foreach (DocumentSnapshot document in snapshot.Documents)
      {
        Debug.Log(String.Format("User: {0}", document.Id));
        Dictionary<string, object> documentDictionary = document.ToDictionary();
        Debug.Log(String.Format("First: {0}", documentDictionary["First"]));
        if (documentDictionary.ContainsKey("Middle"))
        {
          Debug.Log(String.Format("Middle: {0}", documentDictionary["Middle"]));
        }
    
        Debug.Log(String.Format("Last: {0}", documentDictionary["Last"]));
        Debug.Log(String.Format("Born: {0}", documentDictionary["Born"]));
      }
    
      Debug.Log("Read all data from the users collection.");
    });
    C#
    CollectionReference usersRef = db.Collection("users");
    QuerySnapshot snapshot = await usersRef.GetSnapshotAsync();
    foreach (DocumentSnapshot document in snapshot.Documents)
    {
        Console.WriteLine("User: {0}", document.Id);
        Dictionary<string, object> documentDictionary = document.ToDictionary();
        Console.WriteLine("First: {0}", documentDictionary["First"]);
        if (documentDictionary.ContainsKey("Middle"))
        {
            Console.WriteLine("Middle: {0}", documentDictionary["Middle"]);
        }
        Console.WriteLine("Last: {0}", documentDictionary["Last"]);
        Console.WriteLine("Born: {0}", documentDictionary["Born"]);
        Console.WriteLine();
    }
    Rubin
    users_ref = firestore.col collection_path
    users_ref.get do |user|
      puts "#{user.document_id} data: #{user.data}."
    end

    Zabezpiecz swoje dane

    Jeśli korzystasz z internetu, Android lub iOS SDK, korzystanie Firebase Uwierzytelnianie i Chmura FireStore Zasady zabezpieczeń , aby zabezpieczyć swoje dane w chmurze FireStore.

    Oto kilka podstawowych zestawów reguł, których możesz użyć na początek. Można zmodyfikować swoje zasady bezpieczeństwa w karcie Reguły konsoli.

    Wymagane uwierzytelnienie

    // Allow read/write access on all documents to any user signed in to the application
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if request.auth != null;
        }
      }
    }
    

    Tryb zablokowany

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

    Tryb testowy

    // Allow read/write access to all users under any conditions
    // Warning: **NEVER** use this rule set in production; it allows
    // anyone to overwrite your entire database.
    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if true;
        }
      }
    }
    

    Jeśli używasz jednego z SDK Server, należy użyć Zarządzanie tożsamością i dostępem (IAM) , aby zabezpieczyć dane w chmurze FireStore.

    Obejrzyj samouczek wideo

    Aby uzyskać szczegółowe wskazówki dotyczące rozpoczęcia korzystania z bibliotek klienta mobilnego Cloud Firestore, obejrzyj jeden z następujących samouczków wideo:

    iOS
    Android

    Można znaleźć więcej filmów w Firebase kanale YouTube .

    Następne kroki

    Pogłębij swoją wiedzę o następujące tematy: