Начните работу с Cloud 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. Откройте свой проект в консоли Firebase . В левой панели разверните раздел «Сборка» , а затем выберите базу данных Firestore .

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

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

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

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

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

    Подходит для начала работы с библиотеками мобильного и веб-клиента, но позволяет любому читать и перезаписывать ваши данные. После тестирования обязательно ознакомьтесь с разделом «Защита данных» .

    Для начала работы с веб-версией, платформами 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. Следуйте инструкциям, чтобы добавить Firebase в ваше веб-приложение .
  2. SDK Cloud Firestore доступен в виде пакета npm.
    npm install firebase@12.8.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.8.0/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/12.8.0/firebase-firestore-compat.js"></script>
    SDK Cloud Firestore также доступен в виде пакета npm.
    npm install firebase@12.8.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. В Xcode, открыв проект приложения, перейдите в меню 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.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")
    }

    Использование 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.1.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 ).

    Кроме того, убедитесь, что вы обновили CocoaPods до версии 1.9.1 или выше:

    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 если включена опция "Пользовательский шаблон Gradle" в настройках проигрывателя.
      • или файл 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.");
});

Теперь добавьте еще один документ в коллекцию users . Обратите внимание, что этот документ содержит пару ключ-значение (отчество), которой нет в первом документе. Документы в коллекции могут содержать разные наборы информации.

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 .

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

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

// 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.

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

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