Начните работу с Cloud Firestore

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

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

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

  2. Откройте свой проект в консоли Firebase . На левой панели разверните Build и выберите Firestore database .

  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. Cloud Firestore SDK доступен в виде пакета npm.
    npm install firebase@11.7.1 --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/11.7.1/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/11.7.1/firebase-firestore-compat.js"></script>
    Cloud Firestore SDK также доступен в виде пакета npm.
    npm install firebase@11.7.1 --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 откройте проект приложения и перейдите в меню Файл > Пакеты Swift > Добавить зависимость пакета .
  2. При появлении соответствующего запроса добавьте репозиторий Firebase Apple platform SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Выберите библиотеку Firestore.
  5. По завершении Xcode автоматически начнет разрешать и загружать ваши зависимости в фоновом режиме.
андроид
  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:33.13.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:25.1.4")
    }

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

Dart

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

    В настоящее время Firestore SDK для 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 .

Ява
  1. Добавьте Firebase Admin SDK в свое приложение:
    • Использование Gradle:
      compile 'com.google.firebase:firebase-admin:1.32.0'
    • Использование Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>1.32.0</version>
      </dependency>
           
  2. Следуйте инструкциям ниже, чтобы инициализировать Cloud Firestore с правильными учетными данными в вашей среде.
Питон
  1. Добавьте Firebase Admin SDK в свое приложение Python:
    pip install --upgrade firebase-admin
  2. Следуйте инструкциям ниже, чтобы инициализировать Cloud Firestore с правильными учетными данными в вашей среде.
С++
  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 для сборки экспортированного проекта.
Node.js
  1. Добавьте Firebase Admin SDK в свое приложение:
    npm install firebase-admin --save
  2. Следуйте инструкциям ниже, чтобы инициализировать Cloud Firestore с правильными учетными данными в вашей среде.
Идти
  1. Добавьте Firebase Admin SDK в свое приложение Go:
    go get firebase.google.com/go
  2. Следуйте инструкциям ниже, чтобы инициализировать Cloud Firestore с правильными учетными данными в вашей среде.
PHP
  1. Клиентские библиотеки сервера Cloud Firestore (Java, Node.js, Python, Go, PHP, C# и Ruby) используют учетные данные Google Application Default Credentials для аутентификации.
    • Для аутентификации из среды разработки установите переменную среды GOOGLE_APPLICATION_CREDENTIALS так, чтобы она указывала на файл ключа учетной записи службы JSON. Вы можете создать файл ключа на странице учетных данных консоли API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • В вашей производственной среде вам не нужно проходить аутентификацию, если вы запускаете свое приложение на App Engine или Compute Engine, используя тот же проект, который вы используете для Cloud Firestore . В противном случае настройте учетную запись службы .
  2. Установите и включите расширение gRPC для PHP, которое вам понадобится для использования клиентской библиотеки.
  3. Добавьте PHP-библиотеку Cloud Firestore в свое приложение:
    composer require google/cloud-firestore
С#
  1. Клиентские библиотеки сервера Cloud Firestore (Java, Node.js, Python, Go, PHP, C# и Ruby) используют учетные данные Google Application Default Credentials для аутентификации.
    • Для аутентификации из среды разработки установите переменную среды GOOGLE_APPLICATION_CREDENTIALS так, чтобы она указывала на файл ключа учетной записи службы JSON. Вы можете создать файл ключа на странице учетных данных консоли API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • В вашей производственной среде вам не нужно проходить аутентификацию, если вы запускаете свое приложение на App Engine или Compute Engine, используя тот же проект, который вы используете для Cloud Firestore . В противном случае настройте учетную запись службы .
  2. Добавьте библиотеку Cloud Firestore C# в свое приложение в файле .csproj :
    <ItemGroup>
      <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" />
    </ItemGroup>
  3. Добавьте следующее в файл Program.cs :
    using Google.Cloud.Firestore;
Рубин
  1. Клиентские библиотеки сервера Cloud Firestore (Java, Node.js, Python, Go, PHP, C# и Ruby) используют учетные данные Google Application Default Credentials для аутентификации.
    • Для аутентификации из среды разработки установите переменную среды GOOGLE_APPLICATION_CREDENTIALS так, чтобы она указывала на файл ключа учетной записи службы JSON. Вы можете создать файл ключа на странице учетных данных консоли API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • В вашей производственной среде вам не нужно проходить аутентификацию, если вы запускаете свое приложение на App Engine или Compute Engine, используя тот же проект, который вы используете для Cloud Firestore . В противном случае настройте учетную запись службы .
  2. Добавьте библиотеку Cloud Firestore Ruby в свое приложение в Gemfile :
    gem "google-cloud-firestore"
  3. Установите зависимости из вашего Gemfile , используя:
    bundle install

(Необязательно) Создание прототипа и тестирование с помощью 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;
Ява
Cloud Firestore SDK инициализируется разными способами в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Для полной справки см. Initialize the Admin SDK .
  • Инициализировать в Google Cloud
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use the application default credentials
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .setProjectId(projectId)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
  • Инициализируйте на своем сервере

    Чтобы использовать Firebase Admin SDK на своем сервере, используйте учетную запись службы .

    Перейдите в IAM & admin > Service accounts в консоли Google Cloud. Сгенерируйте новый закрытый ключ и сохраните файл JSON. Затем используйте файл для инициализации SDK:

    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use a service account
    InputStream serviceAccount = new FileInputStream("path/to/serviceAccount.json");
    GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount);
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
  • Питон
    Cloud Firestore SDK инициализируется разными способами в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Для полной справки см. Initialize the Admin SDK .
  • Инициализировать в Google Cloud
    import firebase_admin
    from firebase_admin import firestore
    
    # Application Default credentials are automatically created.
    app = firebase_admin.initialize_app()
    db = firestore.client()

    Для инициализации SDK можно также использовать существующие учетные данные приложения по умолчанию.

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use the application default credentials.
    cred = credentials.ApplicationDefault()
    
    firebase_admin.initialize_app(cred)
    db = firestore.client()
  • Инициализируйте на своем сервере

    Чтобы использовать Firebase Admin SDK на своем сервере, используйте учетную запись службы .

    Перейдите в IAM & admin > Service accounts в консоли Google Cloud. Сгенерируйте новый закрытый ключ и сохраните файл JSON. Затем используйте файл для инициализации SDK:

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use a service account.
    cred = credentials.Certificate('path/to/serviceAccount.json')
    
    app = firebase_admin.initialize_app(cred)
    
    db = firestore.client()
  • Python

    Cloud Firestore SDK инициализируется разными способами в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Для полной справки см. Initialize the Admin SDK .
  • Инициализировать в Google Cloud
    import firebase_admin
    from firebase_admin import firestore_async
    
    # Application Default credentials are automatically created.
    app = firebase_admin.initialize_app()
    db = firestore_async.client()

    Для инициализации SDK можно также использовать существующие учетные данные приложения по умолчанию.

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore_async
    
    # Use the application default credentials.
    cred = credentials.ApplicationDefault()
    
    firebase_admin.initialize_app(cred)
    db = firestore_async.client()
  • Инициализируйте на своем сервере

    Чтобы использовать Firebase Admin SDK на своем сервере, используйте учетную запись службы .

    Перейдите в IAM & admin > Service accounts в консоли Google Cloud. Сгенерируйте новый закрытый ключ и сохраните файл JSON. Затем используйте файл для инициализации SDK:

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore_async
    
    # Use a service account.
    cred = credentials.Certificate('path/to/serviceAccount.json')
    
    app = firebase_admin.initialize_app(cred)
    
    db = firestore_async.client()
  • С++
    // Make sure the call to `Create()` happens some time before you call Firestore::GetInstance().
    App::Create();
    Firestore* db = Firestore::GetInstance();
    Node.js
    Cloud Firestore SDK инициализируется разными способами в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Для полной справки см. Initialize the Admin SDK .
    • Инициализация в Cloud Functions
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      initializeApp();
      
      const db = getFirestore();
      
    • Инициализировать в Google Cloud
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      initializeApp({
        credential: applicationDefault()
      });
      
      const db = getFirestore();
    • Инициализируйте на своем сервере

      Чтобы использовать Firebase Admin SDK на своем сервере (или в любой другой среде Node.js), используйте учетную запись службы . Перейдите в IAM & admin > Учетные записи служб в консоли Google Cloud. Сгенерируйте новый закрытый ключ и сохраните файл JSON. Затем используйте файл для инициализации SDK:

      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      const serviceAccount = require('./path/to/serviceAccountKey.json');
      
      initializeApp({
        credential: cert(serviceAccount)
      });
      
      const db = getFirestore();
      
    Идти
    Cloud Firestore SDK инициализируется разными способами в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Для полной справки см. Initialize the Admin SDK .
  • Инициализировать в Google Cloud
    import (
      "log"
    
      firebase "firebase.google.com/go"
      "google.golang.org/api/option"
    )
    
    // Use the application default credentials
    ctx := context.Background()
    conf := &firebase.Config{ProjectID: projectID}
    app, err := firebase.NewApp(ctx, conf)
    if err != nil {
      log.Fatalln(err)
    }
    
    client, err := app.Firestore(ctx)
    if err != nil {
      log.Fatalln(err)
    }
    defer client.Close()
  • Инициализируйте на своем сервере

    Чтобы использовать Firebase Admin SDK на своем сервере, используйте учетную запись службы .

    Перейдите в IAM & admin > Service accounts в консоли Google Cloud. Сгенерируйте новый закрытый ключ и сохраните файл JSON. Затем используйте файл для инициализации SDK:

    import (
      "log"
    
      firebase "firebase.google.com/go"
      "google.golang.org/api/option"
    )
    
    // Use a service account
    ctx := context.Background()
    sa := option.WithCredentialsFile("path/to/serviceAccount.json")
    app, err := firebase.NewApp(ctx, nil, sa)
    if err != nil {
      log.Fatalln(err)
    }
    
    client, err := app.Firestore(ctx)
    if err != nil {
      log.Fatalln(err)
    }
    defer client.Close()
  • PHP

    PHP

    Дополнительную информацию об установке и создании клиента Cloud Firestore см. в разделе Библиотеки клиента Cloud Firestore .

    use Google\Cloud\Firestore\FirestoreClient;
    
    /**
     * Initialize Cloud Firestore with default project ID.
     */
    function setup_client_create(string $projectId = null)
    {
        // Create the Cloud Firestore client
        if (empty($projectId)) {
            // The `projectId` parameter is optional and represents which project the
            // client will act on behalf of. If not supplied, the client falls back to
            // the default project inferred from the environment.
            $db = new FirestoreClient();
            printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);
        } else {
            $db = new FirestoreClient([
                'projectId' => $projectId,
            ]);
            printf('Created Cloud Firestore client with project ID: %s' . PHP_EOL, $projectId);
        }
    }
    Единство
    using Firebase.Firestore;
    using Firebase.Extensions;
    FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
    С#

    С#

    Дополнительную информацию об установке и создании клиента Cloud Firestore см. в разделе Библиотеки клиента Cloud Firestore .

    FirestoreDb db = FirestoreDb.Create(project);
    Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
    Рубин
    require "google/cloud/firestore"
    
    # The `project_id` parameter is optional and represents which project the
    # client will act on behalf of. If not supplied, the client falls back to the
    # default project inferred from the environment.
    firestore = Google::Cloud::Firestore.new project_id: project_id
    
    puts "Created Cloud Firestore client with given project ID."

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

    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}'));
    Ява
    DocumentReference docRef = db.collection("users").document("alovelace");
    // Add document data  with id "alovelace" using a hashmap
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Ada");
    data.put("last", "Lovelace");
    data.put("born", 1815);
    //asynchronously write data
    ApiFuture<WriteResult> result = docRef.set(data);
    // ...
    // result.get() blocks on response
    System.out.println("Update time : " + result.get().getUpdateTime());
    Питон
    doc_ref = db.collection("users").document("alovelace")
    doc_ref.set({"first": "Ada", "last": "Lovelace", "born": 1815})

    Python

    doc_ref = db.collection("users").document("alovelace")
    await doc_ref.set({"first": "Ada", "last": "Lovelace", "born": 1815})
    С++
    // 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;
      }
    });
    Node.js
    const docRef = db.collection('users').doc('alovelace');
    
    await docRef.set({
      first: 'Ada',
      last: 'Lovelace',
      born: 1815
    });
    Идти
    _, _, err := client.Collection("users").Add(ctx, map[string]interface{}{
    	"first": "Ada",
    	"last":  "Lovelace",
    	"born":  1815,
    })
    if err != nil {
    	log.Fatalf("Failed adding alovelace: %v", err)
    }
    PHP

    PHP

    Дополнительную информацию об установке и создании клиента Cloud Firestore см. в разделе Библиотеки клиента Cloud Firestore .

    $docRef = $db->collection('samples/php/users')->document('alovelace');
    $docRef->set([
        'first' => 'Ada',
        'last' => 'Lovelace',
        'born' => 1815
    ]);
    printf('Added data to the lovelace document in the users collection.' . PHP_EOL);
    Единство
    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.");
    });
    С#
    DocumentReference docRef = db.Collection("users").Document("alovelace");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
        { "First", "Ada" },
        { "Last", "Lovelace" },
        { "Born", 1815 }
    };
    await docRef.SetAsync(user);
    Рубин
    doc_ref = firestore.doc "#{collection_path}/alovelace"
    
    doc_ref.set(
      {
        first: "Ada",
        last:  "Lovelace",
        born:  1815
      }
    )
    
    puts "Added data to the alovelace document in the users collection."

    Теперь добавьте еще один документ в коллекцию 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}'));
    Ява
    DocumentReference docRef = db.collection("users").document("aturing");
    // Add document data with an additional field ("middle")
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Alan");
    data.put("middle", "Mathison");
    data.put("last", "Turing");
    data.put("born", 1912);
    
    ApiFuture<WriteResult> result = docRef.set(data);
    System.out.println("Update time : " + result.get().getUpdateTime());
    Питон
    doc_ref = db.collection("users").document("aturing")
    doc_ref.set({"first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912})

    Python

    doc_ref = db.collection("users").document("aturing")
    await doc_ref.set(
        {"first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912}
    )
    С++
    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;
          }
        });
    Node.js
    const aTuringRef = db.collection('users').doc('aturing');
    
    await aTuringRef.set({
      'first': 'Alan',
      'middle': 'Mathison',
      'last': 'Turing',
      'born': 1912
    });
    Идти
    _, _, err = client.Collection("users").Add(ctx, map[string]interface{}{
    	"first":  "Alan",
    	"middle": "Mathison",
    	"last":   "Turing",
    	"born":   1912,
    })
    if err != nil {
    	log.Fatalf("Failed adding aturing: %v", err)
    }
    PHP

    PHP

    Дополнительную информацию об установке и создании клиента Cloud Firestore см. в разделе Библиотеки клиента Cloud Firestore .

    $docRef = $db->collection('samples/php/users')->document('aturing');
    $docRef->set([
        'first' => 'Alan',
        'middle' => 'Mathison',
        'last' => 'Turing',
        'born' => 1912
    ]);
    printf('Added data to the aturing document in the users collection.' . PHP_EOL);
    Единство
    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.");
    });
    С#
    DocumentReference docRef = db.Collection("users").Document("aturing");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
        { "First", "Alan" },
        { "Middle", "Mathison" },
        { "Last", "Turing" },
        { "Born", 1912 }
    };
    await docRef.SetAsync(user);
    Рубин
    doc_ref = firestore.doc "#{collection_path}/aturing"
    
    doc_ref.set(
      {
        first:  "Alan",
        middle: "Mathison",
        last:   "Turing",
        born:   1912
      }
    )
    
    puts "Added data to the aturing document in the users collection."

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

    Используйте средство просмотра данных в консоли 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()}");
      }
    });
    Ява
    // asynchronously retrieve all users
    ApiFuture<QuerySnapshot> query = db.collection("users").get();
    // ...
    // query.get() blocks on response
    QuerySnapshot querySnapshot = query.get();
    List<QueryDocumentSnapshot> documents = querySnapshot.getDocuments();
    for (QueryDocumentSnapshot document : documents) {
      System.out.println("User: " + document.getId());
      System.out.println("First: " + document.getString("first"));
      if (document.contains("middle")) {
        System.out.println("Middle: " + document.getString("middle"));
      }
      System.out.println("Last: " + document.getString("last"));
      System.out.println("Born: " + document.getLong("born"));
    }
    Питон
    users_ref = db.collection("users")
    docs = users_ref.stream()
    
    for doc in docs:
        print(f"{doc.id} => {doc.to_dict()}")

    Python

    users_ref = db.collection("users")
    docs = users_ref.stream()
    
    async for doc in docs:
        print(f"{doc.id} => {doc.to_dict()}")
    С++
    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;
      }
    });
    Node.js
    const snapshot = await db.collection('users').get();
    snapshot.forEach((doc) => {
      console.log(doc.id, '=>', doc.data());
    });
    Идти
    iter := client.Collection("users").Documents(ctx)
    for {
    	doc, err := iter.Next()
    	if err == iterator.Done {
    		break
    	}
    	if err != nil {
    		log.Fatalf("Failed to iterate: %v", err)
    	}
    	fmt.Println(doc.Data())
    }
    PHP

    PHP

    Дополнительную информацию об установке и создании клиента Cloud Firestore см. в разделе Библиотеки клиента Cloud Firestore .

    $usersRef = $db->collection('samples/php/users');
    $snapshot = $usersRef->documents();
    foreach ($snapshot as $user) {
        printf('User: %s' . PHP_EOL, $user->id());
        printf('First: %s' . PHP_EOL, $user['first']);
        if (!empty($user['middle'])) {
            printf('Middle: %s' . PHP_EOL, $user['middle']);
        }
        printf('Last: %s' . PHP_EOL, $user['last']);
        printf('Born: %d' . PHP_EOL, $user['born']);
        printf(PHP_EOL);
    }
    printf('Retrieved and printed out all documents from the users collection.' . PHP_EOL);
    Единство
    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.");
    });
    С#
    CollectionReference usersRef = db.Collection("users");
    QuerySnapshot snapshot = await usersRef.GetSnapshotAsync();
    foreach (DocumentSnapshot document in snapshot.Documents)
    {
        Console.WriteLine("User: {0}", document.Id);
        Dictionary<string, object> documentDictionary = document.ToDictionary();
        Console.WriteLine("First: {0}", documentDictionary["First"]);
        if (documentDictionary.ContainsKey("Middle"))
        {
            Console.WriteLine("Middle: {0}", documentDictionary["Middle"]);
        }
        Console.WriteLine("Last: {0}", documentDictionary["Last"]);
        Console.WriteLine("Born: {0}", documentDictionary["Born"]);
        Console.WriteLine();
    }
    Рубин
    users_ref = firestore.col collection_path
    users_ref.get do |user|
      puts "#{user.document_id} data: #{user.data}."
    end

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

    Если вы используете SDK для веб-платформ, Android или Apple, используйте аутентификацию Firebase и 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+
    андроид

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

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

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