В этом кратком руководстве показано, как настроить Cloud Firestore , добавить данные, а затем просмотреть только что добавленные данные в консоли Firebase.
Создайте базу данных Cloud Firestore
Создайте проект Firebase, если вы еще этого не сделали. В консоли Firebase нажмите « Добавить проект» , затем следуйте инструкциям на экране, чтобы создать проект Firebase или добавить сервисы Firebase в существующий проект Google Cloud .
Откройте свой проект в консоли Firebase . На левой панели разверните «Сборка» и выберите «База данных Firestore» .
Нажмите Создать базу данных .
Выберите место для вашей базы данных.
Если вы не можете выбрать местоположение, значит , «местоположение для ресурсов Google Cloud по умолчанию» вашего проекта уже установлено. Некоторые ресурсы вашего проекта (например, экземпляр Cloud Firestore по умолчанию) имеют общую зависимость от местоположения, и их местоположение можно установить либо во время создания проекта, либо при настройке другой службы, которая разделяет эту зависимость от местоположения.
Выберите режим запуска для 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 для каждой базы данных.
Нажмите Создать .
Когда вы включаете Cloud Firestore , он также включает API в Cloud API Manager .
Настройте среду разработки
Добавьте в свое приложение необходимые зависимости и клиентские библиотеки.
- Следуйте инструкциям, чтобы добавить Firebase в свое веб-приложение .
- Cloud Firestore SDK доступен в виде пакета npm.
Вам нужно будет импортировать Firebase и Cloud Firestore .npm install firebase@11.3.1 --save
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore";
- Следуйте инструкциям, чтобы добавить Firebase в свое веб-приложение .
- Добавьте библиотеки Firebase и Cloud Firestore в свое приложение:
Cloud Firestore SDK также доступен в виде пакета npm.<script src="https://www.gstatic.com/firebasejs/11.3.1/firebase-app-compat.js"></script> <script src="https://www.gstatic.com/firebasejs/11.3.1/firebase-firestore-compat.js"></script>
Вам потребуется вручную запросить Firebase и Cloud Firestore .npm install firebase@11.3.1 --save
import firebase from "firebase/compat/app"; // Required for side-effects import "firebase/firestore";
Следуйте инструкциям, чтобы добавить Firebase в свое приложение Apple .
Используйте Swift Package Manager для установки зависимостей Firebase и управления ими.
- В Xcode, открыв проект приложения, выберите «Файл» > «Пакеты Swift» > «Добавить зависимость пакета» .
- При появлении запроса добавьте репозиторий Firebase SDK для платформ Apple:
- Выберите библиотеку Firestore.
- По завершении Xcode автоматически начнет разрешать и загружать ваши зависимости в фоновом режиме.
https://github.com/firebase/firebase-ios-sdk
- Следуйте инструкциям, чтобы добавить Firebase в свое приложение для Android .
- Используя 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.9.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.2") }
Ищете библиотечный модуль, специфичный для Kotlin? Начиная с релиза за октябрь 2023 года , от основного модуля библиотеки могут зависеть как разработчики Kotlin, так и Java (подробнее см. FAQ по этой инициативе ).
- Если вы еще этого не сделали, настройте и инициализируйте Firebase в своем приложении Flutter.
- Из корня вашего проекта Flutter выполните следующую команду, чтобы установить плагин:
flutter pub add cloud_firestore
- После завершения перестройте приложение Flutter:
flutter run
- Необязательно: улучшите время сборки 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 .
- Добавьте 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>
- Использование Градла:
- Следуйте инструкциям ниже, чтобы инициализировать Cloud Firestore с соответствующими учетными данными в вашей среде.
- Добавьте Firebase Admin SDK в свое приложение Python:
pip install --upgrade firebase-admin
- Следуйте инструкциям ниже, чтобы инициализировать Cloud Firestore с соответствующими учетными данными в вашей среде.
- Следуйте инструкциям, чтобы добавить Firebase в свой проект C++ .
- Интерфейс 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}")
- Чтобы настроить интеграцию с рабочим столом , см. раздел Добавление Firebase в проект C++ .
- Следуйте инструкциям, чтобы добавить Firebase в свой проект Unity .
- Используйте интерфейс Unity, чтобы настроить проект для минимизации сборок Android.
- Эту опцию можно найти в «Настройки проигрывателя» > «Android» > «Настройки публикации» > «Свернуть» .
- Параметры могут различаться в разных версиях Unity, поэтому обратитесь к официальной документации Unity и Firebase Unity Build Debug Guide .
- Если после включения минификации количество ссылочных методов все еще превышает лимит, другой вариант — включить
multidex
в:-
mainTemplate.gradle
, если в настройках проигрывателя включен пользовательский шаблон Gradle - или файл
build.gradle
уровня модуля, если вы используете Android Studio для сборки экспортированного проекта.
-
Вы должны минимизировать сборку, чтобы избежать сообщения Error while merging dex archives
.
- Добавьте Firebase Admin SDK в свое приложение:
npm install firebase-admin --save
- Следуйте инструкциям ниже, чтобы инициализировать Cloud Firestore с соответствующими учетными данными в вашей среде.
- Добавьте Firebase Admin SDK в свое приложение Go:
go get firebase.google.com/go
- Следуйте инструкциям ниже, чтобы инициализировать Cloud Firestore с соответствующими учетными данными в вашей среде.
- Клиентские библиотеки сервера 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 . В противном случае настройте учетную запись службы .
- Чтобы пройти аутентификацию в среде разработки, установите переменную среды
- Установите и включите расширение gRPC для PHP, которое вам понадобится для использования клиентской библиотеки.
- Добавьте PHP-библиотеку Cloud Firestore в свое приложение:
composer require google/cloud-firestore
- Клиентские библиотеки сервера 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 . В противном случае настройте учетную запись службы .
- Чтобы пройти аутентификацию в среде разработки, установите переменную среды
- Добавьте библиотеку C# Cloud Firestore в свое приложение в файле
.csproj
:<ItemGroup> <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" /> </ItemGroup>
- Добавьте следующее в файл
Program.cs
:using Google.Cloud.Firestore;
- Клиентские библиотеки сервера 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 . В противном случае настройте учетную запись службы .
- Чтобы пройти аутентификацию в среде разработки, установите переменную среды
- Добавьте библиотеку Cloud Firestore Ruby в свое приложение в
Gemfile
:gem "google-cloud-firestore"
- Установите зависимости из вашего
Gemfile
, используя:bundle install
(Необязательно) Создайте прототип и протестируйте с помощью Firebase Local Emulator Suite
Для мобильных разработчиков, прежде чем говорить о том, как ваше приложение записывает и читает из Cloud Firestore , давайте представим набор инструментов, которые вы можете использовать для прототипирования и тестирования функциональности Cloud Firestore : Firebase Local Emulator Suite . Если вы тестируете различные модели данных, оптимизируете свои правила безопасности или работаете над поиском наиболее экономичного способа взаимодействия с серверной частью, возможность работать локально без развертывания действующих сервисов может быть отличной идеей.
Эмулятор Cloud Firestore является частью Local Emulator Suite , который позволяет вашему приложению взаимодействовать с содержимым и конфигурацией эмулируемой базы данных, а также, при необходимости, с ресурсами эмулируемого проекта (функциями, другими базами данных и правилами безопасности).
Использование эмулятора Cloud Firestore включает всего несколько шагов:
- Добавление строки кода в тестовую конфигурацию вашего приложения для подключения к эмулятору.
- Из корня локального каталога проекта запустите
firebase emulators:start
. - Выполнение вызовов из кода прототипа вашего приложения с использованием SDK платформы Cloud Firestore как обычно.
Доступно подробное пошаговое руководство по использованию Cloud Firestore и Cloud Functions . Вам также следует ознакомиться с введением Local Emulator Suite .
Инициализировать Cloud Firestore
Инициализируйте экземпляр Cloud Firestore :
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
вашего веб-приложения.
Чтобы сохранить данные, когда устройство теряет соединение, см. документацию «Включение автономных данных» .
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
вашего веб-приложения.
Чтобы сохранить данные, когда устройство теряет соединение, см. документацию по включению автономных данных .
import FirebaseCore import FirebaseFirestore
FirebaseApp.configure() let db = Firestore.firestore()
@import FirebaseCore; @import FirebaseFirestore; // Use Firebase library to configure APIs [FIRApp configure];
FIRFirestore *defaultFirestore = [FIRFirestore firestore];
// Access a Cloud Firestore instance from your Activity
val db = Firebase.firestore
// Access a Cloud Firestore instance from your Activity
FirebaseFirestore db = FirebaseFirestore.getInstance();
db = FirebaseFirestore.instance;
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();
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()
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();
- Инициализация 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();
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
Дополнительную информацию об установке и создании клиента Cloud Firestore см. в разделе Клиентские библиотеки Cloud Firestore .
using Firebase.Firestore; using Firebase.Extensions;
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
С#
Дополнительную информацию об установке и создании клиента Cloud Firestore см. в разделе Клиентские библиотеки Cloud Firestore .
Добавить данные
Cloud Firestore хранит данные в документах, которые хранятся в коллекциях. Cloud Firestore неявно создает коллекции и документы при первом добавлении данных в документ. Вам не нужно явно создавать коллекции или документы.
Создайте новую коллекцию и документ, используя следующий пример кода.
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); }
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); });
// 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)") }
// 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); } }];
// 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) }
// 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); } });
// 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}'));
// 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; } });
PHP
Дополнительную информацию об установке и создании клиента Cloud Firestore см. в разделе Клиентские библиотеки Cloud Firestore .
DocumentReference docRef = db.Collection("users").Document("alovelace"); Dictionary<string, object> user = new Dictionary<string, object> { { "First", "Ada" }, { "Last", "Lovelace" }, { "Born", 1815 }, }; docRef.SetAsync(user).ContinueWithOnMainThread(task => { Debug.Log("Added data to the alovelace document in the users collection."); });
Теперь добавьте еще один документ в коллекцию users
. Обратите внимание, что этот документ содержит пару «ключ-значение» (отчество), которой нет в первом документе. Документы в коллекции могут содержать разные наборы информации.
// 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); }
// 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); });
// 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)") }
// 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); } }];
// 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) }
// 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); } });
// 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}'));
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; } });
PHP
Дополнительную информацию об установке и создании клиента Cloud Firestore см. в разделе Клиентские библиотеки Cloud Firestore .
DocumentReference docRef = db.Collection("users").Document("aturing"); Dictionary<string, object> user = new Dictionary<string, object> { { "First", "Alan" }, { "Middle", "Mathison" }, { "Last", "Turing" }, { "Born", 1912 } }; docRef.SetAsync(user).ContinueWithOnMainThread(task => { Debug.Log("Added data to the aturing document in the users collection."); });
Чтение данных
Используйте средство просмотра данных в консоли Firebase , чтобы быстро убедиться, что вы добавили данные в Cloud Firestore .
Вы также можете использовать метод get для получения всей коллекции.
import { collection, getDocs } from "firebase/firestore"; const querySnapshot = await getDocs(collection(db, "users")); querySnapshot.forEach((doc) => { console.log(`${doc.id} => ${doc.data()}`); });
db.collection("users").get().then((querySnapshot) => { querySnapshot.forEach((doc) => { console.log(`${doc.id} => ${doc.data()}`); }); });
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)") }
[[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); } } }];
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) }
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()); } } });
await db.collection("users").get().then((event) { for (var doc in event.docs) { print("${doc.id} => ${doc.data()}"); } });
users_ref = db.collection("users") docs = users_ref.stream() 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; } });
PHP
Дополнительную информацию об установке и создании клиента Cloud Firestore см. в разделе Клиентские библиотеки Cloud Firestore .
CollectionReference usersRef = db.Collection("users"); usersRef.GetSnapshotAsync().ContinueWithOnMainThread(task => { QuerySnapshot snapshot = task.Result; foreach (DocumentSnapshot document in snapshot.Documents) { Debug.Log(String.Format("User: {0}", document.Id)); Dictionary<string, object> documentDictionary = document.ToDictionary(); Debug.Log(String.Format("First: {0}", documentDictionary["First"])); if (documentDictionary.ContainsKey("Middle")) { Debug.Log(String.Format("Middle: {0}", documentDictionary["Middle"])); } Debug.Log(String.Format("Last: {0}", documentDictionary["Last"])); Debug.Log(String.Format("Born: {0}", documentDictionary["Born"])); } Debug.Log("Read all data from the users collection."); });
Защитите свои данные
Если вы используете SDK для веб-платформ, Android или Apple, используйте аутентификацию Firebase и 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, используйте Identity and Access Management (IAM) для защиты ваших данных в Cloud Firestore .
Посмотрите видеоурок
Подробные инструкции по началу работы с мобильными клиентскими библиотеками Cloud Firestore можно найти в одном из следующих видеоруководств:
Больше видео вы можете найти на YouTube-канале Firebase.
Следующие шаги
Углубите свои знания, изучая следующие темы:
- Лаборатории кода — научитесь использовать Cloud Firestore в реальном приложении, следуя лаборатории кода для Android , iOS или Интернета .
- Модель данных . Узнайте больше о том, как структурируются данные в Cloud Firestore , включая иерархические данные и подколлекции.
- Добавление данных . Узнайте больше о создании и обновлении данных в Cloud Firestore .
- Получить данные . Узнайте больше о том, как получить данные.
- Выполнение простых и составных запросов . Узнайте, как выполнять простые и составные запросы.
- Упорядочение и ограничение запросов Узнайте, как упорядочить и ограничить данные, возвращаемые запросами.