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

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

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

Firebase Local Emulator Suite эмулирует продукты для одного проекта 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

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 , запускаемых событиями Cloud Storage for Firebase с помощью эмулятора не требуется никакой дополнительной настройки. Когда оба эмулятора Cloud Storage for Firebase и Cloud Functions запущены, они автоматически работают вместе.

Admin SDK

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 почти идеально подходит для рабочей среды с точки зрения области действия 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. Cloud Storage for Firebase отличается от GCS следующим образом:

  • Cloud Storage for Firebase в настоящее время не поддерживает API-интерфейсы Bucket для создания, просмотра, получения или удаления сегментов хранилища.
  • Из API объектов Google Cloud Storage поддерживаются следующие методы: 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 намерена со временем улучшить эту поддержку.

Что дальше?