Wprowadzenie do wersji standardowej Firestore

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

Cloud Firestore obsługuje pakiety SDK na urządzenia mobilne i do przeglądarek oraz biblioteki klienta serwera:

  • Cloud Firestore obsługuje pakiety SDK na Androida, iOS, do aplikacji internetowych i nie tylko. W połączeniu z Cloud Firestore Security Rules i Firebase Authentication pakiety SDK do aplikacji mobilnych i internetowych obsługują bezserwerowe architektury aplikacji, w których klienci łączą się bezpośrednio z bazą danych Cloud Firestore.

  • Cloud Firestore obsługuje biblioteki klienta serwera w językach C#, Go, Java, Node.js, PHP, Python i Ruby. Użyj tych bibliotek klienta, aby skonfigurować uprzywilejowane środowiska serwerowe z pełnym dostępem do bazy danych. Więcej informacji o tych bibliotekach znajdziesz w krótkim wprowadzeniu do bibliotek klienta serwera.

Aby uzyskać pomoc AI, skopiuj poniższy prompt do agenta kodowania AI (takiego jak Gemini w Android Studio, Antigravity, Claude Code, Codex czy Cursor). Możesz dostosować prompta i wprowadzać zmiany z agentem. Szczegółowe informacje o instalacji znajdziesz w artykule Umiejętności agenta Firebase.

Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me set up and use Firebase for the backend of my app. Set up Firestore database in **Standard edition**. Help me to choose the best location for my database instance.

Tworzenie bazy danych Cloud Firestore

  1. Jeśli nie masz jeszcze projektu w Firebase, utwórz go: w konsoli Firebase kliknij Dodaj projekt, a następnie postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby utworzyć projekt w Firebase lub dodać usługi Firebase do dotychczasowego projektu Google Cloud.

  2. W panelu po lewej stronie kliknij Bazy danych i pamięć masowa > Firestore.

  3. Kliknij Utwórz bazę danych.

  4. Wybierz lokalizację bazy danych.

    Jeśli nie możesz wybrać lokalizacji, oznacza to, że „lokalizacja domyślnych zasobów Google Cloud” w Twoim projekcie została już ustawiona. Niektóre zasoby projektu (np. domyślna instancja Cloud Firestore) mają wspólną zależność lokalizacyjną, a ich lokalizację można ustawić podczas tworzenia projektu lub podczas konfigurowania innej usługi, która ma tę samą zależność lokalizacyjną.

  5. Wybierz tryb początkowy dla urządzenia Cloud Firestore Security Rules:

    Tryb testowy

    Dobry sposób na rozpoczęcie korzystania z bibliotek klienta mobilnego i internetowego, ale umożliwia każdemu odczytywanie i zastępowanie Twoich danych. Po zakończeniu testów zapoznaj się z sekcją Zabezpieczanie danych.

    Aby rozpocząć korzystanie z pakietu SDK na platformy Apple, Android lub internet, wybierz tryb testowy.

    tryb produkcyjny,

    Odrzucanie wszystkich odczytów i zapisów z klientów mobilnych i internetowych. Uwierzytelnione serwery aplikacji (C#, Go, Java, Node.js, PHP, Python lub Ruby) nadal mogą uzyskiwać dostęp do bazy danych.

    Aby rozpocząć korzystanie z biblioteki klienta serwera w języku C#, Go, Java, Node.js, PHP, Python lub Ruby, wybierz tryb produkcyjny.

    Początkowy zestaw Cloud Firestore Security Rules zostanie zastosowany do domyślnej bazy danych Cloud Firestore. Jeśli utworzysz wiele baz danych dla projektu, możesz wdrożyć Cloud Firestore Security Rules dla każdej z nich.

  6. Kliknij Utwórz.

Gdy włączysz Cloud Firestore, interfejs API zostanie też włączony w Menedżerze interfejsów Cloud API.

Konfigurowanie środowiska programistycznego

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

Web

  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do aplikacji internetowej.
  2. Pakiet SDK Cloud Firestore jest dostępny jako pakiet npm.
    npm install firebase@13.0.0 --save
    Musisz zaimportować zarówno Firebase, jak i Cloud Firestore.
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";

Web

  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do aplikacji internetowej.
  2. Dodaj do aplikacji biblioteki Firebase i Cloud Firestore:
    <script src="https://www.gstatic.com/firebasejs/13.0.0/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/13.0.0/firebase-firestore-compat.js"></script>
    Pakiet SDK Cloud Firestore jest też dostępny jako pakiet npm.
    npm install firebase@13.0.0 --save
    Musisz ręcznie wymagać zarówno Firebase, jak i Cloud Firestore.
    import firebase from "firebase/compat/app";
    // Required for side-effects
    import "firebase/firestore";
iOS+

Postępuj zgodnie z instrukcjami, aby dodać Firebase do aplikacji na urządzenia Apple.

Do instalowania zależności Firebase i zarządzania nimi używaj menedżera pakietów Swift.

  1. W Xcode, po otwarciu projektu aplikacji, kliknij File > Swift Packages > Add Package Dependency (Plik > Pakiety Swift > Dodaj zależność pakietu).
  2. Gdy pojawi się prośba, dodaj repozytorium pakietu SDK Firebase na platformy Apple:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Wybierz bibliotekę Firestore.
  5. Gdy skończysz, Xcode zacznie automatycznie przetwarzać i pobierać zależności w tle.
Android
  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do aplikacji na Androida.
  2. Używając listy BoM Firebase dla Androida, zadeklaruj zależność z biblioteką Cloud Firestore na Androida w pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle.kts lub app/build.gradle).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:35.0.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")
    }

    Gdy korzystamy z listy BoM Firebase dla Androida, aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida.

    (Alternatywa) Zadeklaruj zależności biblioteki Firebase bez używania BoM

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

    Pamiętaj, że jeśli w aplikacji używasz kilku bibliotek Firebase, 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:27.0.0")
    }

    Szukasz modułu biblioteki przeznaczonego dla języka Kotlin? Począwszy od wersji z października 2023 r., zarówno deweloperzy Kotlin, jak i Java mogą korzystać z głównego modułu biblioteki (szczegółowe informacje znajdziesz w najczęstszych pytaniach dotyczących tej inicjatywy).

Dart

  1. Jeśli jeszcze nie korzystasz z Firebase, skonfiguruj i zainicjuj tę usługę w aplikacji Flutter.
  2. Aby zainstalować wtyczkę, uruchom to polecenie w katalogu głównym projektu Flutter:
    flutter pub add cloud_firestore
  3. Gdy to zrobisz, ponownie skompiluj aplikację Flutter:
    flutter run
  4. Opcjonalnie: skróć czas kompilacji na iOS i macOS, dołączając wstępnie skompilowaną platformę.

    Obecnie pakiet SDK Firestore na iOS zależy od kodu, którego kompilacja w Xcode może potrwać ponad 5 minut. Aby znacznie skrócić czas kompilacji, możesz użyć wstępnie skompilowanej wersji, dodając ten wiersz do bloku target 'Runner' do w pliku Podfile:

    target 'Runner' do
      use_frameworks!
      use_modular_headers!
    
      pod 'FirebaseFirestore',
        :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git',
        :tag => 'IOS_SDK_VERSION'
    
      flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
      target 'RunnerTests' do
        inherit! :search_paths
      end
    end

    Zastąp IOS_SDK_VERSION wersją pakietu SDK Firebase na iOS określoną w pliku firebase_sdk_version.rb usługi firebase_core. Jeśli nie używasz najnowszej wersji firebase_core, poszukaj tego pliku w lokalnej pamięci podręcznej pakietu Pub (zwykle ~/.pub-cache).

    Dodatkowo upewnij się, że masz CocoaPods w wersji 1.9.1 lub nowszej:

    gem install cocoapods

    Więcej informacji znajdziesz w opisie problemu na GitHubie.

C++
  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do projektu w C++.
  2. Interfejs C++ na Androida
    • Zależności Gradle. Dodaj do pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle) poniższy kod:
              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 uzyskania zależności binarnych jest dodanie do pliku CMakeLists.txt tego kodu:
              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ę z komputerem, zapoznaj się z artykułem Dodawanie Firebase do projektu C++.
Unity
  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do projektu Unity.
  2. Użyj interfejsu Unity, aby skonfigurować projekt pod kątem minifikacji kompilacji na Androida.
  3. Aby uniknąć komunikatu Error while merging dex archives, musisz zminimalizować kompilację.

    • Tę opcję znajdziesz w sekcji Player Settings > Android > Publishing Settings > Minify (Ustawienia odtwarzacza > Android > Ustawienia publikowania > Minifikacja).
    • Opcje mogą się różnić w zależności od wersji Unity, dlatego zapoznaj się z oficjalną dokumentacją Unity i przewodnikiem po debugowaniu kompilacji Unity w Firebase.
    • Jeśli po włączeniu minifikacji liczba metod, do których się odwołujesz, nadal przekracza limit, możesz włączyć multidex w:
      • mainTemplate.gradle, jeśli włączona jest opcja Custom Gradle Template (Niestandardowy szablon Gradle) w sekcji Player Settings (Ustawienia odtwarzacza).
      • lub pliku build.gradle na poziomie modułu, jeśli do utworzenia wyeksportowanego projektu używasz Android Studio.

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

Zanim omówimy, jak aplikacja zapisuje dane w Cloud Firestore i je z niej odczytuje, przedstawimy zestaw narzędzi, których możesz używać do prototypowania i testowania funkcji Cloud Firestore: Firebase Local Emulator Suite. Jeśli testujesz różne modele danych, optymalizujesz reguły zabezpieczeń lub szukasz najbardziej opłacalnego sposobu na interakcję z backendem, możliwość pracy lokalnej bez wdrażania usług na żywo może być świetnym rozwiązaniem.

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

Aby użyć emulatora Cloud Firestore, wystarczy wykonać kilka czynności:

  1. dodanie do konfiguracji testowej aplikacji wiersza kodu, który umożliwia połączenie z emulatorem;
  2. Uruchom firebase emulators:start w katalogu głównym projektu lokalnego.
  3. wykonywanie wywołań z kodu prototypu aplikacji za pomocą pakietu SDK platformy Cloud Firestore w zwykły sposób;

Dostępny jest szczegółowy przewodnik dotyczący Cloud Firestore i Cloud Functions. Warto też zapoznać się z wprowadzeniem do Local Emulator Suite.

Zainicjuj Cloud Firestore

Zainicjuj instancję 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);


// Initialize Cloud Firestore and get a reference to the service
const db = getFirestore(app);

Zastąp FIREBASE_CONFIGURATION adresem firebaseConfig aplikacji internetowej.

Aby zachować dane, gdy urządzenie utraci połączenie, zapoznaj się z dokumentacją dotyczącą włączania danych offline.

Web

import firebase from "firebase/app";
import "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
firebase.initializeApp(firebaseConfig);


// Initialize Cloud Firestore and get a reference to the service
const db = firebase.firestore();

Zastąp FIREBASE_CONFIGURATION adresem firebaseConfig aplikacji internetowej.

Aby zachować dane, gdy urządzenie utraci połączenie, zapoznaj się z dokumentacją dotyczącą włączania danych offline.

Swift
Uwaga: ta usługa nie jest dostępna w przypadku watchOS i App Clip.
import FirebaseCore
import FirebaseFirestore
FirebaseApp.configure()

let db = Firestore.firestore()
Objective-C
Uwaga: ta usługa nie jest dostępna w przypadku watchOS i App Clip.
@import FirebaseCore;
@import FirebaseFirestore;

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

Kotlin

// Access a Cloud Firestore instance from your Activity
val db = Firebase.firestore

Java

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

Dart

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

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.

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
Uwaga: ta usługa nie jest dostępna w przypadku watchOS i App Clip.
// Add a new document with a generated ID
do {
  let ref = try await db.collection("users").addDocument(data: [
    "first": "Ada",
    "last": "Lovelace",
    "born": 1815
  ])
  print("Document added with ID: \(ref.documentID)")
} catch {
  print("Error adding document: \(error)")
}
Objective-C
Uwaga: ta usługa nie jest dostępna w przypadku watchOS i App Clip.
// Add a new document with a generated ID
__block FIRDocumentReference *ref =
    [[self.db collectionWithPath:@"users"] addDocumentWithData:@{
      @"first": @"Ada",
      @"last": @"Lovelace",
      @"born": @1815
    } completion:^(NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error adding document: %@", error);
      } else {
        NSLog(@"Document added with ID: %@", ref.documentID);
      }
    }];

Kotlin

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

Dart

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

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

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

Teraz dodaj kolejny dokument do kolekcji users. Zauważ, ż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

// 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
Uwaga: ta usługa nie jest dostępna w przypadku watchOS i App Clip.
// Add a second document with a generated ID.
do {
  let ref = try await db.collection("users").addDocument(data: [
    "first": "Alan",
    "middle": "Mathison",
    "last": "Turing",
    "born": 1912
  ])
  print("Document added with ID: \(ref.documentID)")
} catch {
  print("Error adding document: \(error)")
}
Objective-C
Uwaga: ta usługa nie jest dostępna w przypadku watchOS i App Clip.
// 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);
      }
    }];

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

Dart

// Create a new user with a first and last name
final user = <String, dynamic>{
  "first": "Alan",
  "middle": "Mathison",
  "last": "Turing",
  "born": 1912
};

// Add a new document with a generated ID
db.collection("users").add(user).then((DocumentReference doc) =>
    print('DocumentSnapshot added with ID: ${doc.id}'));
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() << std::endl;
      } else {
        std::cout << "Error adding document: " << future.error_message()
                  << std::endl;
      }
    });
Unity
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.");
});

Odczytywanie danych

Użyj przeglądarki danych w konsoli Firebase, aby szybko sprawdzić, czy dane zostały dodane do Cloud Firestore.

Możesz też użyć metody „get”, aby pobrać całą kolekcję.

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
Uwaga: ta usługa nie jest dostępna w przypadku watchOS i App Clip.
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)")
}
Objective-C
Uwaga: ta usługa nie jest dostępna w przypadku watchOS i App Clip.
[[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);
        }
      }
    }];

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

Dart

await db.collection("users").get().then((event) {
  for (var doc in event.docs) {
    print("${doc.id} => ${doc.data()}");
  }
});
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 << std::endl;
    }
  } else {
    std::cout << "Error getting documents: " << future.error_message()
              << std::endl;
  }
});
Unity
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.");
});

Zabezpieczanie danych

Jeśli używasz pakietu SDK dla platform internetowych, Androida lub Apple, użyj Firebase Authentication i Cloud Firestore Security Rules, aby zabezpieczyć dane w Cloud Firestore.

Oto kilka podstawowych zestawów reguł, od których możesz zacząć. Reguły zabezpieczeń możesz modyfikować w konsoli Firebase na karcie Bazy danych i pamięć masowa > Firestore > Reguły.

Wymagane uwierzytelnianie

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

tryb produkcyjny,

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

Zanim wdrożysz aplikację internetową, aplikację na Androida lub aplikację na iOS w środowisku produkcyjnym, podejmij też działania, aby mieć pewność, że tylko klienci Twojej aplikacji będą mieć dostęp do danych Cloud Firestore. Zapoznaj się z dokumentacją Sprawdzania aplikacji.

Jeśli używasz jednego z pakietów SDK serwera, do zabezpieczenia danych w Cloud Firestore użyj Identity and Access Management (IAM).

Obejrzyj film instruktażowy

Szczegółowe instrukcje dotyczące rozpoczęcia korzystania z bibliotek klienta mobilnego Cloud Firestore znajdziesz w jednym z tych filmów instruktażowych:

Sieć
iOS+
Android

Więcej filmów znajdziesz na kanale Firebase w YouTube.

Dalsze kroki

Poszerz swoją wiedzę, zapoznając się z tymi tematami: