Подключите свое приложение к облачному хранилищу для эмулятора Firebase.

Перед подключением приложения к эмулятору Cloud Storage for Firebase убедитесь, что вы понимаете общий рабочий процесс Firebase Local Emulator Suite , а также что вы установили и настроили Local Emulator Suite и ознакомились с его командами CLI .

Выберите проект Firebase

Firebase Local Emulator Suite эмулирует продукты для одного проекта Firebase.

Чтобы выбрать проект, перед запуском эмуляторов выполните в командной строке firebase use в вашем рабочем каталоге. Или передайте флаг --project каждой команде эмулятора.

Local Emulator Suite поддерживает эмуляцию реальных проектов Firebase и демонстрационных проектов.

Тип проекта Функции Использование с эмуляторами
Настоящий

Настоящий проект Firebase — это проект, который вы создали и настроили (скорее всего, через консоль Firebase ).

Реальные проекты имеют активные ресурсы, такие как экземпляры базы данных, сегменты хранения, функции или любые другие ресурсы, которые вы настраиваете для этого проекта Firebase.

Работая с реальными проектами Firebase, вы можете запускать эмуляторы для любого или всех поддерживаемых продуктов.

Для любых продуктов, которые вы не эмулируете, ваши приложения и код будут взаимодействовать с реальным ресурсом (экземпляром базы данных, контейнером хранилища, функцией и т. д.).

Демо

Демонстрационный проект Firebase не имеет реальной конфигурации Firebase и активных ресурсов. Доступ к таким проектам обычно осуществляется через практическое руководство или другие обучающие материалы.

Идентификаторы демонстрационных проектов имеют префикс demo- .

При работе с демонстрационными проектами Firebase ваши приложения и код взаимодействуют только с эмуляторами. Если ваше приложение попытается взаимодействовать с ресурсом, для которого не запущен эмулятор, этот код завершится ошибкой.

Мы рекомендуем использовать демо-проекты везде, где это возможно. Преимущества включают:

  • Более простая настройка, поскольку вы можете запускать эмуляторы, не создавая проект Firebase.
  • Более высокий уровень безопасности, поскольку если ваш код случайно вызовет неэмулируемые (производственные) ресурсы, то не возникнет риска изменения данных, использования и выставления счетов.
  • Лучшая поддержка в режиме офлайн, поскольку для загрузки конфигурации SDK не требуется доступ в Интернет.

Настройте свое приложение для взаимодействия с эмуляторами

Платформы Android, Apple и веб-SDK

Настройте конфигурацию приложения или тестовые классы для взаимодействия с эмулятором Cloud Storage for Firebase следующим образом.

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val storage = Firebase.storage
storage.useEmulator("10.0.2.2", 9199)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseStorage storage = FirebaseStorage.getInstance();
storage.useEmulator("10.0.2.2", 9199);
Быстрый
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)

Web

const { getStorage, connectStorageEmulator } = require("firebase/storage");

const storage = getStorage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  connectStorageEmulator(storage, "127.0.0.1", 9199);
} 

Web

var storage = firebase.storage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  storage.useEmulator("127.0.0.1", 9199);
} 

Для тестирования облачных функций , запускаемых событиями Cloud Storage for Firebase с помощью эмулятора не требуется дополнительная настройка. Когда запущены оба эмулятора Cloud Storage for Firebase и Cloud Functions , они автоматически работают вместе.

Admin SDK s

Firebase Admin SDK автоматически подключается к эмулятору Cloud Storage for Firebase если установлена переменная среды FIREBASE_STORAGE_EMULATOR_HOST :

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

Обратите внимание, что эмулятор Cloud Functions автоматически распознаёт эмулятор Cloud Storage for Firebase поэтому вы можете пропустить этот шаг при тестировании интеграции между эмуляторами Cloud Functions и Cloud Storage for Firebase . Переменная окружения будет автоматически установлена для Admin SDK в Cloud Storage for Firebase .

Если вы хотите, чтобы ваш код Admin SDK подключался к общему эмулятору, работающему в другой среде, вам потребуется указать тот же идентификатор проекта, который вы задали в Firebase CLI . Вы можете передать идентификатор проекта непосредственно в initializeApp или задать переменную среды GCLOUD_PROJECT .

SDK администратора Node.js
admin.initializeApp({ projectId: "your-project-id" });
Переменная среды
export GCLOUD_PROJECT="your-project-id"

Импорт и экспорт данных

База данных и Cloud Storage for Firebase позволяют экспортировать данные из работающего экземпляра эмулятора. Определите базовый набор данных для использования в модульных тестах или рабочих процессах непрерывной интеграции, а затем экспортируйте его для совместного использования в команде.

firebase emulators:export ./dir

В тестах при запуске эмулятора импортируйте базовые данные.

firebase emulators:start --import=./dir

Вы можете указать эмулятору экспортировать данные при завершении работы, указав путь экспорта или просто используя путь, переданный флагу --import .

firebase emulators:start --import=./dir --export-on-exit

Эти параметры импорта и экспорта данных также работают с командой firebase emulators:exec . Подробнее см. в справочнике команд эмулятора .

Чем эмулятор Cloud Storage for Firebase отличается от продакшена

Для тестирования клиентских приложений эмулятор Cloud Storage for Firebase практически идеально подходит для рабочей среды с точки зрения взаимодействия с API Firebase. Все команды Firebase должны работать с обычными SDK Firebase (для веб-приложений, Android и Apple).

Для тестирования серверных приложений существуют ограничения. Пакеты Firebase Admin SDK используют поверхность Google Cloud API, и не все конечные точки этого API эмулируются. Как правило, всё, что можно сделать из клиентских SDK (загрузка или удаление файлов, получение и настройка метаданных), также реализовано для использования из Admin SDK, но всё остальное — нет. Ниже перечислены важные исключения.

Отличия от Google Cloud Storage

Продукт Cloud Storage for Firebase , включая эмулятор хранилища, предоставляет подмножество функций Google Cloud Storage (GCS), ориентированных на объекты хранилища, что очень полезно для разработки приложений Firebase. Cloud Storage for Firebase отличается от GCS следующими особенностями:

  • Cloud Storage for Firebase в настоящее время не поддерживает API Bucket для создания, перечисления, получения или удаления контейнеров хранения.
  • В API Google Cloud Storage Objects поддерживаются следующие методы: copy , delete , get , insert , list , patch , rewrite , update .

Облако IAM

Firebase Emulator Suite не пытается воспроизводить или учитывать какое-либо поведение, связанное с IAM, при запуске. Эмуляторы соответствуют предоставленным правилам безопасности Firebase, но в ситуациях, когда IAM обычно используется, например, для настройки учётной записи службы, вызывающей Cloud Functions, и, следовательно, прав доступа, эмулятор не настраивается и будет использовать глобально доступную учётную запись на компьютере разработчика, аналогично запуску локального скрипта напрямую.

Уведомления Pub/Sub

Эмулятор Cloud Storage for Firebase не интегрируется с эмулятором Cloud Pub/Sub и, следовательно, не поддерживает создание каналов/уведомлений об изменениях объектов хранилища. Мы рекомендуем использовать триггеры Cloud Functions Storage напрямую.

Метаданные уровня сегмента

Эмулятор Cloud Storage for Firebase не поддерживает настройку на уровне контейнера, включая класс хранилища, конфигурацию CORS на уровне контейнера, метки и политики хранения. Firebase планирует улучшить эту поддержку со временем.

Что дальше?