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

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

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

Пакет локальных эмуляторов Firebase эмулирует продукты для одного проекта Firebase.

Чтобы выбрать проект для использования, прежде чем запускать эмуляторы, в CLI запустите 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+KTX
// 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 modular API

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 namespaced API

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

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

Административные SDK

SDK администратора Firebase автоматически подключаются к эмулятору 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"

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

База данных и облачное хранилище для эмуляторов 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 почти идеально подходит для рабочей среды с точки зрения области действия Firebase API. Ожидается, что все команды Firebase будут работать между обычными SDK Firebase (веб-платформы, Android и Apple).

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

Отличия от облачного хранилища Google

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

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

Облачный IAM

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

Уведомления о публикации/подписке

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

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

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

Что дальше?