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

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

Создайте базу данных 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. Добавьте библиотеки Firebase и Cloud Firestore в свое приложение:
    <script src="https://www.gstatic.com/firebasejs/11.0.2/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/11.0.2/firebase-firestore-compat.js"></script>
    Cloud Firestore SDK также доступен в виде пакета npm.
    npm install firebase@11.0.2 --save
    Вам потребуется вручную запросить Firebase и Cloud Firestore .
    import firebase from "firebase/compat/app";
    // Required for side-effects
    import "firebase/firestore";

Web

  1. Следуйте инструкциям, чтобы добавить Firebase в свое веб-приложение .
  2. Cloud Firestore SDK доступен в виде пакета npm.
    npm install firebase@11.0.2 --save
    Вам нужно будет импортировать Firebase и Cloud Firestore .
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
iOS+

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

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

  1. В Xcode, открыв проект приложения, выберите «Файл» > «Пакеты Swift» > «Добавить зависимость пакета» .
  2. При появлении запроса добавьте репозиторий Firebase SDK для платформ Apple:
  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.7.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.1")
    }

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

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 в вашем подфайле:

    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 в свое приложение:
    • Использование Градла:
      compile 'com.google.firebase:firebase-admin:1.32.0'
    • Использование Мавена:
      <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 Build Debug Guide .
    • Если после включения минификации количество ссылочных методов все еще превышает лимит, другой вариант — включить 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 по умолчанию для аутентификации.
    • Чтобы пройти аутентификацию в среде разработки, установите переменную среды GOOGLE_APPLICATION_CREDENTIALS , чтобы она указывала на файл ключей сервисного аккаунта JSON. Создать ключевой файл можно на странице API Console Credentials .
      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 по умолчанию для аутентификации.
    • Чтобы пройти аутентификацию в среде разработки, установите переменную среды GOOGLE_APPLICATION_CREDENTIALS , чтобы она указывала на файл ключей сервисного аккаунта JSON. Создать ключевой файл можно на странице API Console Credentials .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • В вашей производственной среде вам не требуется проходить аутентификацию, если вы запускаете приложение в App Engine или Compute Engine, используя тот же проект, который вы используете для Cloud Firestore . В противном случае настройте учетную запись службы .
  2. Добавьте библиотеку C# Cloud Firestore в свое приложение в файле .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 по умолчанию для аутентификации.
    • Чтобы пройти аутентификацию в среде разработки, установите переменную среды GOOGLE_APPLICATION_CREDENTIALS , чтобы она указывала на файл ключей сервисного аккаунта JSON. Создать ключевой файл можно на странице API Console Credentials .
      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()
Цель-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 инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Полную информацию см. в разделе Инициализация 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 и администрирование > Сервисные учетные записи в консоли 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 инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Полную информацию см. в разделе Инициализация 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 и администрирование > Сервисные учетные записи в консоли 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 инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Полную информацию см. в разделе Инициализация 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 и администрирование > Сервисные учетные записи в консоли 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 инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Полную информацию см. в разделе Инициализация 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 и администрирование > Сервисные учетные записи в консоли 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 инициализируется по-разному в зависимости от вашей среды. Ниже приведены наиболее распространенные методы. Полную информацию см. в разделе Инициализация 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 и администрирование > Сервисные учетные записи в консоли 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)")
    }
    Цель-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)")
    }
    Цель-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)")
    }
    Цель-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+
    Андроид

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

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

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