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

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

Андроид
FirebaseStorage.getInstance().useEmulator("10.0.2.2", 9199);
Быстрый
Storage.storage().useEmulator(withHost:"localhost", port:9199)
Веб v8
var storage = firebase.storage();
storage.useEmulator("localhost", 9199);
Веб v9
import { getStorage, connectStorageEmulator } from "firebase/storage";

const storage = getStorage();
connectStorageEmulator(storage, "localhost", 9199);

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

SDK администратора

Пакеты Firebase Admin SDK автоматически подключаются к эмулятору облачного хранилища, когда установлена ​​переменная среды FIREBASE_STORAGE_EMULATOR_HOST :

export FIREBASE_STORAGE_EMULATOR_HOST="localhost:9199"

Обратите внимание, что эмулятор облачных функций автоматически распознает эмулятор облачного хранилища, поэтому вы можете пропустить этот шаг при тестировании интеграции между облачными функциями и эмуляторами облачного хранилища. Переменная среды будет автоматически установлена ​​для Admin SDK в Cloud Storage.

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

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

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

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

firebase emulators:export ./dir

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

firebase emulators:start --import=./dir

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

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

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

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

Для тестирования клиентских приложений эмулятор облачного хранилища почти идеально подходит для работы в отношении рабочей области Firebase API. Ожидается, что все команды Firebase будут работать между обычными SDK Firebase (платформы Web, Android и Apple).

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

Облачный IAM

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

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

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

Метаданные на уровне корзины

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

Что дальше?