Wprowadzenie do Cloud Firestore w wersji standardowej

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

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

  • Cloud Firestore obsługuje pakiety SDK na Androida, iOS i do internetu. W połączeniu z Cloud Firestore Security RulesFirebase Authentication pakiety SDK na urządzenia mobilne i do internetu 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 serwera z pełnym dostępem do bazy danych. Więcej informacji o tych bibliotekach znajdziesz w krótkim wprowadzeniu do bibliotek klienta serwera.

Tworzenie bazy danych Cloud Firestore

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

  2. Otwórz projekt w Firebasekonsoli. W panelu po lewej stronie rozwiń Kompilacja, a następnie kliknij Baza danych 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 instancjaCloud Firestore) mają wspólne zależności od lokalizacji, a ich lokalizację można ustawić podczas tworzenia projektu lub konfigurowania innej usługi, która ma te same zależności od lokalizacji.

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

    Tryb testowy

    Dobre rozwiązanie na początek korzystania z bibliotek klienta mobilnego i internetowego, ale umożliwia odczytywanie i nadpisywanie danych przez dowolną osobę. Po przetestowaniu koniecznie zapoznaj się z sekcją Zabezpieczanie danych.

    Aby rozpocząć korzystanie z pakietu SDK na potrzeby internetu, platform Apple lub Androida, wybierz tryb testowy.

    Tryb produkcji

    Odrzuca wszystkie odczyty i zapisy klientów mobilnych oraz 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 danychCloud Firestore. Jeśli utworzysz wiele baz danych w projekcie, możesz wdrożyć Cloud Firestore Security Rules dla każdej z nich.

  6. Kliknij Utwórz.

Gdy włączysz Cloud Firestore, włączy się też interfejs API w Cloud API Manager.

Konfigurowanie środowiska programistycznego

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

Web

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

Web

  1. Wykonaj instrukcje, aby dodać Firebase do aplikacji internetowej.
  2. Dodaj do aplikacji biblioteki Firebase i Cloud Firestore:
    <script src="https://www.gstatic.com/firebasejs/12.8.0/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/12.8.0/firebase-firestore-compat.js"></script>
    Pakiet SDK Cloud Firestore jest też dostępny jako pakiet npm.
    npm install firebase@12.8.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+

Wykonaj instrukcje, aby dodać Firebase do aplikacji Apple.

Do instalacji zależności Firebase i do zarządzania nimi możesz używać menedżera pakietów Swift.

  1. Po otwarciu projektu aplikacji wybierz w Xcode opcję 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 wyszukiwać i pobierać zależności w tle.
Android
  1. Wykonaj instrukcje, aby dodać Firebase do aplikacji na Androida.
  2. Korzystając z Firebase Android BoM, 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:34.8.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")
    }

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

    (Alternatywnie) Zadeklaruj zależności biblioteki Firebase bez użycia BoM

    Jeśli nie chcesz używać Firebase BoM, musisz określić wersję każdej biblioteki Firebase w wierszu zależności.

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

    Szukasz modułu biblioteki przeznaczonego specjalnie dla języka Kotlin? Począwszy od październikowej wersji 2023 r. zarówno programiści Kotlin, jak i Java mogą korzystać z głównego modułu biblioteki (więcej informacji znajdziesz w tym artykule).

Dart

  1. Jeśli nie zostało to jeszcze zrobione, skonfiguruj i zainicjuj Firebase w aplikacji Flutter.
  2. W katalogu głównym projektu Flutter uruchom to polecenie, aby zainstalować wtyczkę:
    flutter pub add cloud_firestore
  3. Po zakończeniu 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 trwać 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 symbol IOS_SDK_VERSION wersją pakietu SDK Firebase na iOS podaną w pliku firebase_corefirebase_sdk_version.rb. Jeśli nie używasz najnowszej wersji firebase_core, poszukaj tego pliku w lokalnej pamięci podręcznej pakietu Pub (zwykle ~/.pub-cache).

    Sprawdź też, czy masz CocoaPods w wersji 1.9.1 lub nowszej:

    gem install cocoapods

    Więcej informacji znajdziesz w artykule na GitHubie.

C++
  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do projektu C++.
  2. Interfejs C++ na Androida.
    • Zależności Gradle Dodaj 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 zalecany sposób uzyskania zależności binarnych to 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, przeczytaj artykuł Dodawanie Firebase do projektu C++.
Unity
  1. Postępuj zgodnie z instrukcjami, aby dodać Firebase do projektu w Unity.
  2. Skonfiguruj projekt w interfejsie Unity, aby zminimalizować kompilacje na Androida.
  3. Aby uniknąć wyświetlania komunikatu Error while merging dex archives, musisz zminimalizować kompilację.

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

(Opcjonalnie) Tworzenie prototypów i testowanie za pomocą Firebase Local Emulator Suite

Zanim przejdziemy do tego, jak aplikacja dewelopera mobilnego zapisuje dane w Cloud Firestore i je odczytuje, przedstawimy zestaw narzędzi, których możesz używać do tworzenia prototypów i testowania funkcji Cloud Firestore:Firebase Local Emulator Suite Jeśli testujesz różne modele danych, optymalizujesz reguły bezpieczeństwa lub szukasz najbardziej opłacalnego sposobu interakcji z backendem, praca lokalna bez wdrażania usług na żywo może być świetnym rozwiązaniem.

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

Korzystanie z Cloud Firestore emulatora wymaga wykonania tylko kilku czynności:

  1. Dodanie do konfiguracji testowej aplikacji wiersza kodu, który połączy ją z emulatorem.
  2. z katalogu głównego projektu lokalnego, uruchamiając firebase emulators:start.
  3. Wykonywanie wywołań z kodu prototypu aplikacji przy użyciu pakietu SDK platformy Cloud Firestore w zwykły sposób.

Dostępny jest szczegółowy przewodnik dotyczący Cloud FirestoreCloud Functions. Zapoznaj się też z Local Emulator Suite wprowadzeniem.

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ą Włączanie 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ą Włączanie danych offline.

Swift
Uwaga: ten produkt nie jest dostępny na platformach watchOS ani w przypadku klipów aplikacji.
import FirebaseCore
import FirebaseFirestore
FirebaseApp.configure()

let db = Firestore.firestore()
Objective-C
Uwaga: ten produkt nie jest dostępny na platformach watchOS ani w przypadku klipów aplikacji.
@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 przy pierwszym dodaniu danych do dokumentu. Nie musisz jawnie tworzyć kolekcji ani dokumentów.

Utwórz nową kolekcję i dokument, korzystając z tego 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: ten produkt nie jest dostępny na platformach watchOS ani w przypadku klipów aplikacji.
// 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: ten produkt nie jest dostępny na platformach watchOS ani w przypadku klipów aplikacji.
// 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. Zwróć uwagę, że ten dokument zawiera parę klucz-wartość (drugie imię), która nie występuje 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: ten produkt nie jest dostępny na platformach watchOS ani w przypadku klipów aplikacji.
// 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: ten produkt nie jest dostępny na platformach watchOS ani w przypadku klipów aplikacji.
// 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

Za pomocą przeglądarki danych w konsoli Firebase możesz 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: ten produkt nie jest dostępny na platformach watchOS ani w przypadku klipów aplikacji.
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: ten produkt nie jest dostępny na platformach watchOS ani w przypadku klipów aplikacji.
[[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 na platformy internetowe, Android lub Apple, użyj uwierzytelniania FirebaseCloud Firestore Security Rules, aby zabezpieczyć dane w Cloud Firestore.

Oto kilka podstawowych zestawów reguł, które pomogą Ci zacząć. Reguły zabezpieczeń możesz modyfikować na karcie Reguły w konsoli.

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 produkcji

// 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ą lub aplikację na Androida lub iOS w wersji produkcyjnej, podejmij też działania, które zapewnią, że tylko Twoi klienci aplikacji będą mieć dostęp do Cloud Firestoredanych. Zapoznaj się z dokumentacją App Check.

Jeśli używasz jednego z pakietów SDK serwera, użyj Identity and Access Management (IAM), aby zabezpieczyć dane w Cloud Firestore.

Obejrzyj samouczek wideo

Szczegółowe wskazówki dotyczące rozpoczęcia korzystania z bibliotek klienta mobilnego Cloud Firestore znajdziesz w tych samouczkach wideo:

Sieć
iOS+
Android

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

Dalsze kroki

Poszerz swoją wiedzę w tych obszarach: