В этом кратком руководстве рассказывается, как настроить Cloud Firestore, добавить данные и посмотреть их в консоли Firebase.
Cloud Firestore поддерживает SDK для мобильных устройств и веб-сайтов, а также серверные клиентские библиотеки:
Cloud Firestore поддерживает SDK для Android, iOS, веб-сайтов и других платформ. В сочетании с Cloud Firestore Security Rules и Firebase Authentication SDK для мобильных устройств и веб-приложений поддерживают бессерверные архитектуры приложений, в которых клиенты подключаются непосредственно к вашей базе данных Cloud Firestore.
Cloud Firestore поддерживает серверные клиентские библиотеки для C#, Go, Java, Node.js, PHP, Python и Ruby. Используйте эти клиентские библиотеки, чтобы настроить привилегированные серверные среды с полным доступом к базе данных. Подробнее об этих библиотеках рассказывается в кратком руководстве по клиентским библиотекам для серверов.
Запрос к ИИ для помощи от ИИ в
Чтобы получить помощь от ИИ, скопируйте запрос ниже и вставьте его в Antigravity, Gemini в Android Studio, Claude Code, Codex, Cursor или другой ИИ-агент для программирования. Вы можете изменить запрос и продолжить работу с агентом. Подробные инструкции по установке вы найдете в статье Навыки агента Firebase.
Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me set up and use Firebase for the backend of my app. Set up Firestore database in **Standard edition**. Help me to choose the best location for my database instance.
Создайте базу данных Cloud Firestore
Если вы ещё не создали проект Firebase, откройте консоль Firebase, нажмите Добавить проект и следуйте инструкциям на экране, чтобы создать проект Firebase или добавить сервисы Firebase в существующий проект Google Cloud.
На панели слева выберите Databases & Storage (Базы данных и хранилище) > Firestore.
Нажмите Создать базу данных.
Выберите местоположение для базы данных.
Если вы не можете выбрать местоположение, значит местоположение для ресурсов Google Cloud по умолчанию уже задано. Некоторые ресурсы проекта (например, экземпляр Cloud Firestore по умолчанию) имеют общую зависимость от местоположения, и их местоположение можно задать либо во время создания проекта, либо при настройке другого сервиса, который имеет эту зависимость от местоположения.
Выберите начальный режим для устройства "Cloud Firestore Security Rules":
- Режим тестирования
Подходит для начала работы с клиентскими библиотеками для мобильных устройств и веб-страниц, но позволяет любому пользователю читать и перезаписывать ваши данные. После тестирования обязательно ознакомьтесь с разделом Защита данных.
Чтобы начать работу с SDK для веб-сайтов, платформ Apple или Android, выберите тестовый режим.
- Производственный режим
Запрещает все операции чтения и записи для мобильных и веб-клиентов. Ваши аутентифицированные серверы приложений (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.
Как настроить среду разработки
Добавьте в приложение необходимые зависимости и клиентские библиотеки.
Web
- Следуйте инструкциям, чтобы добавить Firebase в веб-приложение.
-
SDK Cloud Firestore доступен в виде пакета npm.
Вам нужно импортировать Firebase и Cloud Firestore.npm install firebase@13.1.0 --save
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore";
Web
- Следуйте инструкциям, чтобы добавить Firebase в веб-приложение.
- Добавьте в приложение библиотеки Firebase и Cloud Firestore:
Cloud Firestore SDK также доступен в виде пакета npm.<script src="https://www.gstatic.com/firebasejs/13.1.0/firebase-app-compat.js"></script> <script src="https://www.gstatic.com/firebasejs/13.1.0/firebase-firestore-compat.js"></script>
Вам потребуется вручную запросить Firebase и Cloud Firestore.npm install firebase@13.1.0 --save
import firebase from "firebase/compat/app"; // Required for side-effects import "firebase/firestore";
iOS+
Следуйте инструкциям, чтобы добавить Firebase в приложение Apple.
Для установки зависимостей Firebase и управления ими используйте Swift Package Manager.
- Откройте проект приложения в Xcode и перейдите в меню File (Файл) > Swift Packages (Пакеты Swift) > Add Package Dependency (Добавить зависимость пакетов).
- Когда появится запрос, добавьте хранилище Firebase SDK для платформ Apple:
- Выберите библиотеку Firestore.
- После этого Xcode автоматически начнет распознавать и скачивать зависимости в фоновом режиме.
https://github.com/firebase/firebase-ios-sdk
Android
- Следуйте инструкциям, чтобы добавить 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:35.1.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:27.1.0") }
Ищете модуль библиотеки для Kotlin? Начиная с октября 2023 года, разработчики, использующие Kotlin и Java, могут зависеть от основного модуля библиотеки. Подробную информацию вы найдете в разделе часто задаваемых вопросов.
Dart
- Если вы ещё этого не сделали, настройте и инициализируйте Firebase в приложении Flutter.
- Чтобы установить плагин, выполните следующую команду в корневом каталоге проекта Flutter:
flutter pub add cloud_firestore
- После этого пересоберите приложение Flutter:
flutter run
- Необязательно. Чтобы ускорить сборку для iOS и macOS, включите предварительно скомпилированный фреймворк.
В настоящее время Firestore SDK для iOS зависит от кода, сборка которого в Xcode может занимать более пяти минут. Чтобы значительно сократить время сборки, можно использовать предварительно скомпилированную версию, добавив следующую строку в блок
target 'Runner' doв файле Podfile:target 'Runner' do use_frameworks! use_modular_headers! pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => 'IOS_SDK_VERSION' flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do inherit! :search_paths end endЗамените IOS_SDK_VERSION версией Firebase iOS SDK, указанной в файле
firebase_sdk_version.rbдляfirebase_core. Если вы используете не последнюю версиюfirebase_core, найдите этот файл в локальном кеше пакета Pub (обычно~/.pub-cache).Кроме того, убедитесь, что вы обновили CocoaPods до версии 1.9.1 или более поздней:
gem install cocoapods
Дополнительную информацию можно найти на странице проблемы на GitHub.
C++
- Следуйте инструкциям, чтобы добавить 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++.
Unity
- Следуйте инструкциям по добавлению Firebase в проект Unity.
- Используйте интерфейс Unity, чтобы настроить минификацию сборок Android в проекте.
- Для этого выберите Player Settings (Настройки проигрывателя) > Android > Publishing Settings (Настройки публикации) > Minify (Минифицировать).
- Варианты могут различаться в зависимости от версии Unity, поэтому ознакомьтесь с официальной документацией Unity и руководством по отладке Firebase Unity Build.
-
Если после включения минификации количество методов по-прежнему превышает лимит, можно включить
multidexв файле-
mainTemplate.gradle, если включен параметр Custom Gradle Template (Собственный шаблон Gradle) в разделе Player Settings (Настройки проигрывателя). -
или в файл
build.gradleна уровне модуля, если вы используете Android Studio для сборки экспортированного проекта.
-
Чтобы избежать сообщения Error while merging dex archives, необходимо минифицировать сборку.
(Необязательно) Создание прототипов и тестирование с помощью 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:
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 вашего веб-приложения.
Чтобы сохранить данные, когда устройство теряет подключение, ознакомьтесь с документацией Включение офлайн-данных.
Swift
import FirebaseCore import FirebaseFirestore
FirebaseApp.configure() let db = Firestore.firestore()
Objective-C
@import FirebaseCore; @import FirebaseFirestore; // Use Firebase library to configure APIs [FIRApp configure];
FIRFirestore *defaultFirestore = [FIRFirestore firestore];
Kotlin
// Access a Cloud Firestore instance from your Activityval db = Firebase.firestore
Java
// Access a Cloud Firestore instance from your ActivityFirebaseFirestore db = FirebaseFirestore.getInstance();
Dart
db = FirebaseFirestore.instance;
C++
// Make sure the call to `Create()` happens some time before you call Firestore::GetInstance(). App::Create(); Firestore* db = Firestore::GetInstance();
Unity
using Firebase.Firestore; using Firebase.Extensions;
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
Добавить данные
Cloud Firestore хранит данные в документах, которые хранятся в коллекциях. Cloud Firestore создает коллекции и документы неявно при первом добавлении данных в документ. Вам не нужно явно создавать коллекции или документы.
Создайте новую коллекцию и документ, используя следующий пример кода.
Web
import { collection, addDoc } from "firebase/firestore"; try { const docRef = await addDoc(collection(db, "users"), { first: "Ada", last: "Lovelace", born: 1815 }); console.log("Document written with ID: ", docRef.id); } catch (e) { console.error("Error adding document: ", e); }
Web
db.collection("users").add({ first: "Ada", last: "Lovelace", born: 1815 }) .then((docRef) => { console.log("Document written with ID: ", docRef.id); }) .catch((error) => { console.error("Error adding document: ", error); });
Swift
// 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
// Add a new document with a generated ID __block FIRDocumentReference *ref = [[self.db collectionWithPath:@"users"] addDocumentWithData:@{ @"first": @"Ada", @"last": @"Lovelace", @"born": @1815 } completion:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"Error adding document: %@", error); } else { NSLog(@"Document added with ID: %@", ref.documentID); } }];
Kotlin
// Create a new user with a first and last name val user = hashMapOf( "first" to "Ada", "last" to "Lovelace", "born" to 1815, ) // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener { documentReference -> Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}") } .addOnFailureListener { e -> Log.w(TAG, "Error adding document", e) }
Java
// Create a new user with a first and last name Map<String, Object> user = new HashMap<>(); user.put("first", "Ada"); user.put("last", "Lovelace"); user.put("born", 1815); // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener(new OnSuccessListener<DocumentReference>() { @Override public void onSuccess(DocumentReference documentReference) { Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId()); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "Error adding document", e); } });
Dart
// Create a new user with a first and last name final user = <String, dynamic>{ "first": "Ada", "last": "Lovelace", "born": 1815 }; // Add a new document with a generated ID db.collection("users").add(user).then((DocumentReference doc) => print('DocumentSnapshot added with ID: ${doc.id}'));
C++
// Add a new document with a generated ID Future<DocumentReference> user_ref = db->Collection("users").Add({{"first", FieldValue::String("Ada")}, {"last", FieldValue::String("Lovelace")}, {"born", FieldValue::Integer(1815)}}); user_ref.OnCompletion([](const Future<DocumentReference>& future) { if (future.error() == Error::kErrorOk) { std::cout << "DocumentSnapshot added with ID: " << future.result()->id() << std::endl; } else { std::cout << "Error adding document: " << future.error_message() << std::endl; } });
Unity
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". Обратите внимание, что в этом документе есть пара "ключ-значение" (middle name), которой нет в первом документе. Документы в коллекции могут содержать разные наборы информации.
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); });
Swift
// 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
// Add a second document with a generated ID. __block FIRDocumentReference *ref = [[self.db collectionWithPath:@"users"] addDocumentWithData:@{ @"first": @"Alan", @"middle": @"Mathison", @"last": @"Turing", @"born": @1912 } completion:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"Error adding document: %@", error); } else { NSLog(@"Document added with ID: %@", ref.documentID); } }];
Kotlin
// Create a new user with a first, middle, and last name val user = hashMapOf( "first" to "Alan", "middle" to "Mathison", "last" to "Turing", "born" to 1912, ) // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener { documentReference -> Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}") } .addOnFailureListener { e -> Log.w(TAG, "Error adding document", e) }
Java
// Create a new user with a first, middle, and last name Map<String, Object> user = new HashMap<>(); user.put("first", "Alan"); user.put("middle", "Mathison"); user.put("last", "Turing"); user.put("born", 1912); // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener(new OnSuccessListener<DocumentReference>() { @Override public void onSuccess(DocumentReference documentReference) { Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId()); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "Error adding document", e); } });
Dart
// Create a new user with a first and last name final user = <String, dynamic>{ "first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912 }; // Add a new document with a generated ID db.collection("users").add(user).then((DocumentReference doc) => print('DocumentSnapshot added with ID: ${doc.id}'));
C++
db->Collection("users") .Add({{"first", FieldValue::String("Alan")}, {"middle", FieldValue::String("Mathison")}, {"last", FieldValue::String("Turing")}, {"born", FieldValue::Integer(1912)}}) .OnCompletion([](const Future<DocumentReference>& future) { if (future.error() == Error::kErrorOk) { std::cout << "DocumentSnapshot added with ID: " << future.result()->id() << std::endl; } else { std::cout << "Error adding document: " << future.error_message() << std::endl; } });
Unity
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."); });
Чтение данных
Чтобы быстро проверить, добавили ли вы данные в Cloud Firestore, используйте средство просмотра данных в консоли Firebase.
Вы также можете использовать метод 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()); }); });
Swift
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
[[self.db collectionWithPath:@"users"] getDocumentsWithCompletion:^(FIRQuerySnapshot * _Nullable snapshot, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error getting documents: %@", error); } else { for (FIRDocumentSnapshot *document in snapshot.documents) { NSLog(@"%@ => %@", document.documentID, document.data); } } }];
Kotlin
db.collection("users") .get() .addOnSuccessListener { result -> for (document in result) { Log.d(TAG, "${document.id} => ${document.data}") } } .addOnFailureListener { exception -> Log.w(TAG, "Error getting documents.", exception) }
Java
db.collection("users") .get() .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if (task.isSuccessful()) { for (QueryDocumentSnapshot document : task.getResult()) { Log.d(TAG, document.getId() + " => " + document.getData()); } } else { Log.w(TAG, "Error getting documents.", task.getException()); } } });
Dart
await db.collection("users").get().then((event) { for (var doc in event.docs) { print("${doc.id} => ${doc.data()}"); } });
C++
Future<QuerySnapshot> users = db->Collection("users").Get(); users.OnCompletion([](const Future<QuerySnapshot>& future) { if (future.error() == Error::kErrorOk) { for (const DocumentSnapshot& document : future.result()->documents()) { std::cout << document << std::endl; } } else { std::cout << "Error getting documents: " << future.error_message() << std::endl; } });
Unity
CollectionReference usersRef = db.Collection("users"); usersRef.GetSnapshotAsync().ContinueWithOnMainThread(task => { QuerySnapshot snapshot = task.Result; foreach (DocumentSnapshot document in snapshot.Documents) { Debug.Log(String.Format("User: {0}", document.Id)); Dictionary<string, object> documentDictionary = document.ToDictionary(); Debug.Log(String.Format("First: {0}", documentDictionary["First"])); if (documentDictionary.ContainsKey("Middle")) { Debug.Log(String.Format("Middle: {0}", documentDictionary["Middle"])); } Debug.Log(String.Format("Last: {0}", documentDictionary["Last"])); Debug.Log(String.Format("Born: {0}", documentDictionary["Born"])); } Debug.Log("Read all data from the users collection."); });
Защитите свои данные
Если вы используете SDK для веб-платформ, Android или Apple, используйте Firebase Authentication и Cloud Firestore Security Rules, чтобы защитить данные в Cloud Firestore.
Ниже приведены некоторые базовые наборы правил, которые можно использовать для начала. Изменить правила безопасности можно в консоли Firebase на вкладке Databases & Storage (Базы данных и хранилище) > Firestore > Rules (Правила).
Требуется аутентификация
// 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, защитите свои данные в Cloud Firestore с помощью Identity and Access Management (IAM).
Посмотрите видеоруководство
Чтобы узнать, как начать работу с клиентскими библиотеками Cloud Firestore для мобильных устройств, посмотрите одно из следующих видеоруководств:
Веб-приложение
iOS+
Android
Другие видео можно найти на YouTube-канале Firebase.
Дальнейшие действия
Углубите свои знания по следующим темам:
- Практические работы. Узнайте, как использовать Cloud Firestore в реальном приложении, выполнив практическую работу для Android, iOS или веб-приложений.
- Модель данных. Узнайте, как структурируются данные в Cloud Firestore, в том числе об иерархических данных и подколлекциях.
- Добавление данных. Узнайте, как создавать и обновлять данные в Cloud Firestore.
- Получение данных. Узнайте, как извлекать данные.
- Выполнение простых и составных запросов – узнайте, как выполнять простые и составные запросы.
- Сортировка и ограничение запросов. Узнайте, как сортировать и ограничивать данные, возвращаемые запросами.
- Навыки агента Firebase. Узнайте, как улучшить инструменты разработки ИИ, чтобы эффективнее выполнять задачи и использовать рекомендации Cloud Firestore (например, по написанию Cloud Firestore Security Rules).