Начните работу с Firestore Standard Edition.

В этом кратком руководстве показано, как настроить Cloud Firestore , добавить данные, а затем просмотреть только что добавленные данные в консоли Firebase.

Cloud Firestore поддерживает мобильные и веб-SDK, а также клиентские библиотеки для серверов:

  • Cloud Firestore поддерживает SDK для Android, iOS, веб-приложений и других платформ . В сочетании с Cloud Firestore Security Rules и Firebase Authentication , мобильные и веб-SDK поддерживают бессерверные архитектуры приложений, где клиенты подключаются напрямую к вашей базе данных Cloud Firestore .

  • Cloud Firestore поддерживает серверные клиентские библиотеки для C#, Go, Java, Node.js, PHP, Python и Ruby. Используйте эти клиентские библиотеки для настройки привилегированных серверных сред с полным доступом к вашей базе данных. Подробнее об этих библиотеках можно узнать в разделе «Быстрый старт для серверных клиентских библиотек» .

Создайте базу данных Cloud Firestore

  1. Если вы еще этого не сделали, создайте проект Firebase: в консоли Firebase нажмите «Добавить проект» , а затем следуйте инструкциям на экране, чтобы создать проект Firebase или добавить сервисы Firebase в существующий проект Google Cloud .

  2. В левой панели перейдите в раздел «Базы данных и хранилища» > «Firestore» .

  3. Нажмите «Создать базу данных» .

  4. Выберите местоположение для вашей базы данных.

    Если вы не можете выбрать местоположение, значит, «местоположение для ресурсов Google Cloud по умолчанию» в вашем проекте уже задано. Некоторые ресурсы вашего проекта (например, экземпляр Cloud Firestore по умолчанию) имеют общую зависимость от местоположения, и их местоположение можно задать либо при создании проекта, либо при настройке другой службы, которая также имеет эту зависимость от местоположения.

  5. Выберите режим запуска Cloud Firestore Security Rules :

    Тестовый режим

    Good for getting started with the mobile and web client libraries, but allows anyone to read and overwrite your data. After testing, make sure to review the Secure your data section.

    Для начала работы с веб-версией, платформами Apple или Android SDK выберите тестовый режим.

    Режим производства

    Запрещает все операции чтения и записи с мобильных и веб-клиентов. Ваши аутентифицированные серверы приложений (C#, Go, Java, Node.js, PHP, Python или Ruby) по-прежнему смогут получать доступ к вашей базе данных.

    Для начала работы с серверно-клиентской библиотекой на C#, Go, Java, Node.js, PHP, Python или Ruby выберите производственный режим.

    Первоначальный набор Cloud Firestore Security Rules будет применяться к вашей базе данных Cloud Firestore по умолчанию. Если вы создадите несколько баз данных для своего проекта, вы можете развернуть Cloud Firestore Security Rules для каждой из них.

  6. Нажмите «Создать» .

При включении Cloud Firestore также активируется API в Cloud API Manager .

Настройте среду разработки.

Добавьте необходимые зависимости и клиентские библиотеки в ваше приложение.

Web

  1. Follow the instructions to add Firebase to your web app .
  2. SDK Cloud Firestore доступен в виде пакета npm.
    npm install firebase@12.15.0 --save
    Вам потребуется импортировать как Firebase, так и Cloud Firestore .
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";

Web

  1. Следуйте инструкциям, чтобы добавить Firebase в ваше веб-приложение .
  2. Добавьте в свое приложение библиотеки Firebase и Cloud Firestore :
    <script src="https://www.gstatic.com/firebasejs/12.15.0/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/12.15.0/firebase-firestore-compat.js"></script>
    SDK Cloud Firestore также доступен в виде пакета npm.
    npm install firebase@12.15.0 --save
    Вам потребуется вручную подключить Firebase и Cloud Firestore .
    import firebase from "firebase/compat/app";
    // Required for side-effects
    import "firebase/firestore";
iOS+

Следуйте инструкциям, чтобы добавить Firebase в ваше приложение Apple .

Используйте Swift Package Manager для установки и управления зависимостями Firebase.

  1. In Xcode, with your app project open, navigate to File > Swift Packages > Add Package Dependency .
  2. При появлении запроса добавьте репозиторий Firebase Apple Platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Выберите библиотеку Firestore.
  5. После завершения Xcode автоматически начнет разрешение и загрузку ваших зависимостей в фоновом режиме.
Android
  1. Следуйте инструкциям, чтобы добавить Firebase в ваше Android-приложение .
  2. Используя Firebase Android BoM , укажите зависимость от библиотеки Cloud Firestore для Android в файле Gradle вашего модуля (уровня приложения) (обычно app/build.gradle.kts или app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.15.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")
    }

    Использование Firebase Android BoM гарантирует , что ваше приложение всегда будет использовать совместимые версии библиотек Firebase Android.

    (Альтернативный вариант) Объявление зависимостей библиотеки Firebase без использования BoM

    Если вы решите не использовать Firebase BoM , вам необходимо указать версию каждой библиотеки Firebase в строке зависимости.

    Обратите внимание, что если вы используете несколько библиотек Firebase в своем приложении, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.

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

    Ищете модуль библиотеки, специально предназначенный для Kotlin? Начиная с релиза в октябре 2023 года , разработчики на Kotlin и Java могут использовать основной модуль библиотеки (подробнее см. в разделе часто задаваемых вопросов об этой инициативе ).

Dart

  1. Если вы еще этого не сделали, настройте и инициализируйте Firebase в своем Flutter-приложении.
  2. Для установки плагина выполните следующую команду из корневой папки вашего Flutter-проекта:
    flutter pub add cloud_firestore
  3. После завершения пересоберите ваше Flutter-приложение:
    flutter run
  4. Дополнительно: Улучшите время сборки для iOS и macOS, включив предварительно скомпилированный фреймворк.

    В настоящее время SDK Firestore для iOS зависит от кода, компиляция которого в Xcode может занимать до 5 минут. Чтобы значительно сократить время сборки, вы можете использовать предварительно скомпилированную версию, добавив следующую строку в блок target 'Runner' do в вашем 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

    Замените IOS_SDK_VERSION на версию Firebase iOS SDK, указанную в файле firebase_sdk_version.rb компонента firebase_core . Если вы используете не последнюю версию firebase_core , найдите этот файл в локальном кэше пакетов Pub (обычно ~/.pub-cache ).

    Additionally, ensure that you have upgraded CocoaPods to 1.9.1 or higher:

    gem install cocoapods

    Для получения более подробной информации см. соответствующую проблему на GitHub .

C++
  1. Следуйте инструкциям, чтобы добавить Firebase в свой проект C++ .
  2. Интерфейс C++ для Android.
    • Зависимости Gradle. Добавьте следующее в файл Gradle вашего модуля (уровня приложения) (обычно 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
              }
              
    • Бинарные зависимости. Аналогичным образом, рекомендуемый способ получения бинарных зависимостей — добавить следующее в файл CMakeLists.txt :
              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. Для настройки интеграции с настольными приложениями см. раздел «Добавление Firebase в ваш проект C++» .
Единство
  1. Следуйте инструкциям, чтобы добавить Firebase в ваш проект Unity .
  2. Используйте интерфейс Unity для настройки проекта с целью минимизации сборок Android.
  3. Для предотвращения Error while merging dex archives необходимо минимизировать сборку.

    • Эту опцию можно найти в разделе «Настройки плеера» > «Android» > «Настройки публикации» > «Минимизировать» .
    • Параметры могут отличаться в разных версиях Unity, поэтому обратитесь к официальной документации Unity и руководству по отладке сборки Firebase Unity .
    • Если после включения минификации количество используемых методов по-прежнему превышает лимит, можно включить multidex в следующем коде:
      • mainTemplate.gradle if Custom Gradle Template under Player Settings is enabled
      • или файл build.gradle на уровне модуля, если вы используете Android Studio для сборки экспортированного проекта.

(Необязательно) Создайте прототип и протестируйте его с помощью Firebase Local Emulator Suite

Прежде чем говорить о том, как ваше приложение записывает и читает данные в Cloud Firestore , разработчикам мобильных приложений следует ознакомиться с набором инструментов, которые можно использовать для прототипирования и тестирования функциональности Cloud Firestore : Firebase Local Emulator Suite . Если вы экспериментируете с различными моделями данных, оптимизируете правила безопасности или ищете наиболее экономичный способ взаимодействия с бэкэндом, возможность работать локально без развертывания работающих сервисов может оказаться отличной идеей.

Эмулятор Cloud Firestore является частью Local Emulator Suite , который позволяет вашему приложению взаимодействовать с содержимым и конфигурацией эмулируемой базы данных, а также, при необходимости, с ресурсами эмулируемого проекта (функциями, другими базами данных и правилами безопасности).

Использование эмулятора Cloud Firestore включает всего несколько шагов:

  1. Добавление строки кода в конфигурацию тестирования вашего приложения для подключения к эмулятору.
  2. В корневом каталоге вашего локального проекта выполните firebase emulators:start .
  3. Выполнение вызовов из прототипа кода вашего приложения с использованием SDK платформы Cloud Firestore как обычно.

Подробное пошаговое руководство по Cloud Firestore и Cloud Functions доступно. Также рекомендуем ознакомиться с вводной информацией о Local Emulator Suite .

Инициализация Cloud Firestore

Инициализируйте экземпляр 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);

Замените FIREBASE_CONFIGURATION на значение firebaseConfig вашего веб-приложения.

Чтобы данные сохранялись при потере устройством соединения, см. документацию по включению автономной передачи данных .

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

Замените FIREBASE_CONFIGURATION на значение firebaseConfig вашего веб-приложения.

Чтобы данные сохранялись при потере устройством соединения, см. документацию по включению автономной передачи данных .

Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений App Clip.
import FirebaseCore
import FirebaseFirestore
FirebaseApp.configure()

let db = Firestore.firestore()
Objective-C
Примечание: Этот продукт недоступен для watchOS и приложений 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();
Единство
using Firebase.Firestore;
using Firebase.Extensions;
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;

Добавить данные

Cloud Firestore хранит данные в документах, которые хранятся в коллекциях. Cloud Firestore создает коллекции и документы автоматически при первом добавлении данных в документ. Вам не нужно создавать коллекции или документы явным образом.

Создайте новую коллекцию и документ, используя следующий пример кода.

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);
});
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений 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
Примечание: Этот продукт недоступен для watchOS и приложений 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;
  }
});
Единство
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.");
});

Now add another document to the users collection. Notice that this document includes a key-value pair (middle name) that does not appear in the first document. Documents in a collection can contain different sets of information.

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);
});
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений 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
Примечание: Этот продукт недоступен для watchOS и приложений 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;
      }
    });
Единство
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.");
});

Прочитать данные

Воспользуйтесь средством просмотра данных в консоли Firebase , чтобы быстро убедиться, что вы добавили данные в Cloud Firestore .

Также можно использовать метод `get` для получения всей коллекции целиком.

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()}`);
    });
});
Быстрый
Примечание: Этот продукт недоступен для watchOS и приложений 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
Примечание: Этот продукт недоступен для watchOS и приложений 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;
  }
});
Единство
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.");
});

Защитите свои данные

Если вы используете SDK для веб-платформ, Android или Apple, используйте Firebase Authentication и Cloud Firestore Security Rules для защиты ваших данных в Cloud Firestore .

Вот несколько базовых наборов правил, которые вы можете использовать для начала работы. Вы можете изменить свои правила безопасности в консоли Firebase на вкладке «Базы данных и хранилище» > «Firestore» > «Правила» .

Требуется авторизация

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

Режим производства

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

Прежде чем развертывать веб-приложение, приложение для Android или iOS в рабочей среде, также примите меры для обеспечения доступа к данным Cloud Firestore только для клиентов вашего приложения. См. документацию по проверке приложений .

Если вы используете один из серверных SDK, воспользуйтесь системой управления идентификацией и доступом (IAM) для защиты ваших данных в Cloud Firestore .

Посмотрите видеоурок

Для получения подробных инструкций по началу работы с библиотеками мобильных клиентов Cloud Firestore посмотрите один из следующих видеоуроков:

Веб
iOS+
Android

Больше видеороликов вы найдете на YouTube-канале Firebase.

Следующие шаги

Углубите свои знания по следующим темам: