W tym krótkim wprowadzeniu dowiesz się, jak skonfigurować Cloud Firestore, dodać dane, a następnie wyświetlić te, które właśnie dodałeś w konsoli Firebase.
Utwórz bazę danych Cloud Firestore
Jeśli jeszcze tego nie zrobiłeś, utwórz projekt Firebase: w konsoli Firebase kliknij Dodaj projekt , a następnie postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby utworzyć projekt Firebase lub dodać usługi Firebase do istniejącego projektu GCP.
Przejdź do sekcji Cloud Firestore w konsoli Firebase . Zostaniesz poproszony o wybranie istniejącego projektu Firebase. Postępuj zgodnie z przepływem pracy tworzenia bazy danych.
Wybierz tryb początkowy dla reguł bezpieczeństwa Cloud Firestore:
- Tryb testowy
Dobry do rozpoczęcia pracy z bibliotekami klienta mobilnego i internetowego, ale umożliwia każdemu odczyt i nadpisanie danych. Po zakończeniu testów zapoznaj się z sekcją Zabezpiecz swoje dane .
Aby rozpocząć korzystanie z zestawu SDK w wersji internetowej, iOS lub Android, wybierz tryb testowy.
- Tryb zablokowany
Odmawia wszystkich odczytów i zapisów 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.
Wybierz lokalizację dla swojej bazy danych.
To ustawienie lokalizacji jest domyślną lokalizacją zasobów Google Cloud Platform (GCP) Twojego projektu. Pamiętaj, że ta lokalizacja będzie używana przez usługi GCP w Twoim projekcie, które wymagają ustawienia lokalizacji, w szczególności domyślny zasobnik Cloud Storage i aplikacja App Engine (która jest wymagana, jeśli używasz Cloud Scheduler).
Jeśli nie możesz wybrać lokalizacji, Twój projekt ma już domyślną lokalizację zasobów GCP. Został ustawiony podczas tworzenia projektu lub podczas konfigurowania innej usługi, która wymaga ustawienia lokalizacji.
Kliknij Gotowe .
Włączenie Cloud Firestore powoduje również włączenie interfejsu API w Cloud API Manager .
Skonfiguruj swoje środowisko programistyczne
Dodaj wymagane zależności i biblioteki klienta do swojej aplikacji.
Web v8
- Postępuj zgodnie z instrukcjami, aby dodać Firebase do swojej aplikacji internetowej .
- Dodaj biblioteki Firebase i Cloud Firestore do swojej aplikacji:
<script src="https://www.gstatic.com/firebasejs/8.4.1/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/8.4.1/firebase-firestore.js"></script>
Cloud Firestore SDK jest również dostępny jako pakiet npm.npm install firebase@8.4.1 --save
Musisz ręcznie wymagać zarówno Firebase, jak i Cloud Firestore.const firebase = require("firebase"); // Required for side-effects require("firebase/firestore");
Web v9
- Postępuj zgodnie z instrukcjami, aby dodać Firebase do swojej aplikacji internetowej .
- Pakiet Cloud Firestore SDK jest dostępny jako pakiet npm.
npm install firebase@9.0.0-beta.1 --save
Musisz zaimportować zarówno Firebase, jak i Cloud Firestore.import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore";
iOS
- Postępuj zgodnie z instrukcjami, aby dodać Firebase do swojej aplikacji na iOS .
- Dodaj
Podfile
Cloud Firestore do swojegoPodfile
Podfilepod 'Firebase/Firestore' # Optionally, include the Swift extensions if you're using Swift. pod 'FirebaseFirestoreSwift'
- Zapisz plik i uruchom
pod install
.
Jawa
- Postępuj zgodnie z instrukcjami, aby dodać Firebase do swojej aplikacji na Androida .
- Korzystając z narzędzia Firebase Android BoM , zadeklaruj zależność biblioteki Cloud Firestore dla systemu Android w pliku Gradle modułu (na poziomie aplikacji) (zwykle
app/build.gradle
).dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:27.0.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' }
Korzystając z BoM Firebase na Androida , Twoja aplikacja będzie zawsze używać zgodnych wersji bibliotek Firebase na Androida.
(Alternatywnie) Zadeklaruj zależności bibliotek Firebase bez korzystania z BoM
Jeśli zdecydujesz się nie używać BoM Firebase, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.
Pamiętaj, że jeśli używasz wielu bibliotek Firebase w swojej aplikacji, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji.
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:22.1.2' }
Kotlin + KTX
- Postępuj zgodnie z instrukcjami, aby dodać Firebase do swojej aplikacji na Androida .
- Korzystając z narzędzia Firebase Android BoM , zadeklaruj zależność biblioteki Cloud Firestore dla systemu Android w pliku Gradle modułu (na poziomie aplikacji) (zwykle
app/build.gradle
).dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:27.0.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-ktx' }
Korzystając z BoM Firebase na Androida , Twoja aplikacja będzie zawsze używać zgodnych wersji bibliotek Firebase na Androida.
(Alternatywnie) Zadeklaruj zależności bibliotek Firebase bez korzystania z BoM
Jeśli zdecydujesz się nie używać BoM Firebase, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.
Pamiętaj, że jeśli używasz wielu bibliotek Firebase w swojej aplikacji, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji.
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:22.1.2' }
Jawa
- Dodaj pakiet Firebase Admin SDK do swojej aplikacji:
- Korzystanie z Gradle:
compile 'com.google.firebase:firebase-admin:7.1.1'
- Korzystanie z Maven:
<dependency> <groupId>com.google.firebase</groupId> <artifactId>firebase-admin</artifactId> <version>7.1.1</version> </dependency>
- Korzystanie z Gradle:
- Postępuj zgodnie z poniższymi instrukcjami, aby zainicjować Cloud Firestore z odpowiednimi poświadczeniami w swoim środowisku.
Pyton
- Dodaj pakiet Firebase Admin SDK do aplikacji Python:
pip install --upgrade firebase-admin
- Postępuj zgodnie z poniższymi instrukcjami, aby zainicjować Cloud Firestore przy użyciu odpowiednich poświadczeń w swoim środowisku.
C ++
- Postępuj zgodnie z instrukcjami, aby dodać Firebase do projektu C ++ .
- Interfejs C ++ dla Androida.
- Zależności Gradle. Dodaj następujący kod do pliku Gradle modułu (na poziomie aplikacji) (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}")
- Aby skonfigurować integrację z komputerem , zobacz Dodawanie Firebase do projektu C ++ .
Jedność
- Postępuj zgodnie z instrukcjami, aby dodać Firebase do projektu Unity .
- Interfejs Unity dla Androida.
- Wybierz opcję Plik> Ustawienia kompilacji
- Przełącz „Platformę” na „Android” i kliknij „Zmień platformę”
- Kliknij „Ustawienia odtwarzacza…”
- W głównym interfejsie użytkownika Unity, w sekcji „Ustawienia dla Androida” wybierz „Ustawienia publikowania”
- W sekcji „Minify” zmień ustawienia Release i Debug z „None” na „ProGuard”
Tworząc dla Androida, włącz ProGuarding, aby uniknąć limitu Android DEX. Aby to zrobić, w edytorze Unity:
Node.js
- Dodaj pakiet Firebase Admin SDK do swojej aplikacji:
npm install firebase-admin --save
- Postępuj zgodnie z poniższymi instrukcjami, aby zainicjować Cloud Firestore przy użyciu odpowiednich poświadczeń w swoim środowisku.
Udać się
- Dodaj pakiet Firebase Admin SDK do aplikacji Go:
go get firebase.google.com/go
- Postępuj zgodnie z poniższymi instrukcjami, aby zainicjować Cloud Firestore przy użyciu odpowiednich poświadczeń w swoim środowisku.
PHP
- Biblioteki klienta serwera Cloud Firestore (Java, Node.js, Python, Go, PHP, C # i Ruby) używają domyślnych danych logowania aplikacji Google do uwierzytelniania.
- Aby uwierzytelnić się w środowisku programistycznym, ustaw zmienną środowiskową
GOOGLE_APPLICATION_CREDENTIALS
aby wskazywała na plik klucza konta usługi JSON. Możesz utworzyć plik klucza na stronie Poświadczenia konsoli interfejsu API .export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
- W środowisku produkcyjnym nie musisz uwierzytelniać się, jeśli uruchamiasz aplikację w App Engine lub Compute Engine przy użyciu tego samego projektu, którego używasz dla Cloud Firestore. W przeciwnym razie skonfiguruj konto usługi .
- Aby uwierzytelnić się w środowisku programistycznym, ustaw zmienną środowiskową
- Zainstaluj i włącz rozszerzenie gRPC dla języka PHP, które będzie potrzebne do korzystania z biblioteki klienta.
- Dodaj bibliotekę PHP Cloud Firestore do swojej aplikacji:
composer require google/cloud-firestore
DO#
- Biblioteki klienta serwera Cloud Firestore (Java, Node.js, Python, Go, PHP, C # i Ruby) używają domyślnych danych logowania aplikacji Google do uwierzytelniania.
- Aby uwierzytelnić się w środowisku programistycznym, ustaw zmienną środowiskową
GOOGLE_APPLICATION_CREDENTIALS
aby wskazywała na plik klucza konta usługi JSON. Możesz utworzyć plik klucza na stronie Poświadczenia konsoli interfejsu API .export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
- W środowisku produkcyjnym nie musisz uwierzytelniać się, jeśli uruchamiasz aplikację w App Engine lub Compute Engine przy użyciu tego samego projektu, którego używasz dla Cloud Firestore. W przeciwnym razie skonfiguruj konto usługi .
- Aby uwierzytelnić się w środowisku programistycznym, ustaw zmienną środowiskową
- Dodaj # bibliotekę Chmura Firestore C do swojej aplikacji w
.csproj
pliku:<ItemGroup> <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" /> </ItemGroup>
- Dodaj do swojego pliku
Program.cs
:using Google.Cloud.Firestore;
Rubin
- Biblioteki klienta serwera Cloud Firestore (Java, Node.js, Python, Go, PHP, C # i Ruby) używają domyślnych danych logowania aplikacji Google do uwierzytelniania.
- Aby uwierzytelnić się w środowisku programistycznym, ustaw zmienną środowiskową
GOOGLE_APPLICATION_CREDENTIALS
aby wskazywała na plik klucza konta usługi JSON. Możesz utworzyć plik klucza na stronie Poświadczenia konsoli interfejsu API .export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
- W środowisku produkcyjnym nie musisz uwierzytelniać się, jeśli uruchamiasz aplikację w App Engine lub Compute Engine przy użyciu tego samego projektu, którego używasz dla Cloud Firestore. W przeciwnym razie skonfiguruj konto usługi .
- Aby uwierzytelnić się w środowisku programistycznym, ustaw zmienną środowiskową
- Dodaj bibliotekę Cloud Firestore Ruby do swojej aplikacji w
Gemfile
:gem "google-cloud-firestore"
- Zainstaluj zależności z
Gemfile
za pomocą:bundle install
(Opcjonalnie) Twórz prototypy i testuj za pomocą pakietu Firebase Local Emulator Suite
Dla programistów mobilnych, zanim porozmawiamy o tym, jak 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 bezpieczeństwa lub pracujesz nad znalezieniem najbardziej opłacalnego sposobu interakcji z zapleczem, możliwość pracy lokalnie 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 emulowanymi zasobami projektu (funkcje, inne bazy danych i reguły bezpieczeństwa). Należy pamiętać, że pakiet Local Emulator Suite nie obsługuje jeszcze emulowanego magazynu w chmurze.
Korzystanie z emulatora Cloud Firestore obejmuje tylko kilka kroków:
- Dodanie wiersza kodu do konfiguracji testowej aplikacji w celu nawiązania połączenia z emulatorem.
-
firebase emulators:start
z katalogu głównego lokalnego projektufirebase emulators:start
. - Wykonywanie połączeń z prototypowego kodu aplikacji przy użyciu pakietu SDK platformy Cloud Firestore w zwykły sposób.
Dostępny jest szczegółowy przewodnik dotyczący Cloud Firestore i Cloud Functions . Powinieneś także rzucić okiem na wprowadzenie do pakietu lokalnego emulatora .
Zainicjuj Cloud Firestore
Zainicjuj wystąpienie Cloud Firestore:
Web v8
// 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 parametru „initializeApp” można znaleźć w pliku „firebaseConfig” aplikacji internetowej. Aby zachować dane, gdy urządzenie utraci połączenie, zapoznaj się z dokumentacją dotyczącą włączania danych offline .
Web v9
// 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 „firebaseConfig” aplikacji internetowej. Aby zachować dane, gdy urządzenie utraci połączenie, zapoznaj się z dokumentacją dotyczącą włączania danych offline .
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 Cloud Firestore SDK jest inicjowany na różne sposoby w zależności od środowiska. Poniżej znajdują się najpopularniejsze metody. Aby uzyskać pełne informacje, zobacz Inicjowanie zestawu Admin SDK .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();
Aby korzystać z pakietu Firebase Admin SDK na własnym serwerze, użyj konta usługi .
W konsoli Cloud Platform przejdź do IAM & admin> Service accounts . Wygeneruj nowy klucz prywatny i zapisz plik JSON. Następnie użyj pliku do zainicjowania zestawu 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 Cloud Firestore SDK jest inicjowany na różne sposoby w zależności od środowiska. Poniżej znajdują się najpopularniejsze metody. Aby uzyskać pełne informacje, zobacz Inicjowanie zestawu Admin SDK .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()
Aby korzystać z pakietu Firebase Admin SDK na własnym serwerze, użyj konta usługi .
W konsoli Cloud Platform przejdź do IAM & admin> Service accounts . 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()
C ++
// Make sure the call to `Create()` happens some time before you call Firestore::GetInstance(). App::Create(); Firestore* db = Firestore::GetInstance();
Node.js
Pakiet Cloud Firestore SDK jest inicjowany na różne sposoby w zależności od środowiska. Poniżej znajdują się najpopularniejsze metody. Aby uzyskać pełne informacje, zobacz Inicjowanie zestawu Admin SDK .- Zainicjuj w Cloud Functions
const admin = require('firebase-admin');
admin.initializeApp(); const db = admin.firestore();
- Zainicjuj w 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 pakietu Firebase Admin SDK na własnym serwerze (lub w dowolnym innym środowisku Node.js), użyj konta usługi . W konsoli Cloud Platform przejdź do IAM & admin> Service accounts . 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 Cloud Firestore SDK jest inicjowany na różne sposoby w zależności od środowiska. Poniżej znajdują się najpopularniejsze metody. Aby uzyskać pełne informacje, zobacz Inicjowanie zestawu Admin SDK .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()
Aby korzystać z pakietu Firebase Admin SDK na własnym serwerze, użyj konta usługi .
W konsoli Cloud Platform przejdź do IAM & admin> Service accounts . Wygeneruj nowy klucz prywatny i zapisz plik JSON. Następnie użyj pliku do zainicjowania zestawu 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. * ``` * initialize(); * ``` */ function initialize() { // 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;
DO#
FirestoreDb db = FirestoreDb.Create(project); Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
Rubin
require "google/cloud/firestore" 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 niejawnie tworzy kolekcje i dokumenty przy pierwszym dodaniu danych do dokumentu. Nie musisz jawnie tworzyć kolekcji ani dokumentów.
Utwórz nową kolekcję i dokument przy użyciu poniższego przykładowego kodu.
Web v8
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); });
Web v9
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); }
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 })
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('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."); });
DO#
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 dodaj kolejny dokument do kolekcji users
. 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.
Web v8
// 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); });
Web v9
// 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); }
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 })
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('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."); });
DO#
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."
Czytaj dane
Aby szybko sprawdzić, czy dane zostały dodane do Cloud Firestore, użyj przeglądarki danych w konsoli Firebase .
Możesz także użyć metody „get”, aby pobrać całą kolekcję.
Web v8
db.collection("users").get().then((querySnapshot) => { querySnapshot.forEach((doc) => { console.log(`${doc.id} => ${doc.data()}`); }); });
Web v9
import { collection, getDocs } from "firebase/firestore"; const querySnapshot = await getDocs(collection(db, "users")); 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()}')
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('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."); });
DO#
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 zestawu SDK sieci Web, Androida lub iOS, użyj uwierzytelniania Firebase i reguł zabezpieczeń Cloud Firestore, aby zabezpieczyć swoje dane w Cloud Firestore.
Oto kilka podstawowych zestawów reguł, których możesz użyć, aby rozpocząć. Możesz modyfikować swoje reguły bezpieczeństwa w zakładce 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 korzystasz z jednego z serwerów SDK, użyj Zarządzania tożsamością i dostępem (IAM), aby zabezpieczyć swoje dane w Cloud Firestore.
Obejrzyj samouczek wideo
Aby uzyskać szczegółowe wskazówki dotyczące rozpoczynania pracy z bibliotekami klienta mobilnego i internetowego Cloud Firestore, obejrzyj jeden z następujących samouczków wideo:
Web v8
iOS
Android
Więcej filmów znajdziesz na kanale Firebase YouTube .
Następne kroki
Pogłęb swoją wiedzę dzięki następującym tematom:
- Codelabs - naucz się korzystać z Cloud Firestore w prawdziwej aplikacji, postępując zgodnie z codelab dla Androida , iOS lub sieci .
- Model danych - dowiedz się więcej o strukturze danych w Cloud Firestore, w tym o danych hierarchicznych i kolekcjach podrzędnych.
- Dodaj dane - dowiedz się więcej o tworzeniu i aktualizowaniu danych w Cloud Firestore.
- Pobierz dane - dowiedz się więcej o pobieraniu danych.
- Wykonywanie zapytań prostych i złożonych - Dowiedz się, jak uruchamiać zapytania proste i złożone.
- Porządkowanie i ograniczanie zapytań Dowiedz się, jak porządkować i ograniczać dane zwracane przez zapytania.