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

Рекомендуем по возможности использовать демопроекты. Преимущества подписки на Google One включают:

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

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

SDK для Android, платформ Apple и веб-приложений

Настройте конфигурацию в приложении или тестовые классы для взаимодействия с эмулятором 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);
Swift
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)
Unity
FirebaseStorage storage = FirebaseStorage.DefaultInstance;
// Connects to the Storage Emulator running on port 9199
storage.UseEmulator("127.0.0.1", 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 Functions, активируемых событиями 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. Вы можете передать идентификатор проекта напрямую в initializeApp или задать переменную среды GCLOUD_PROJECT.

Node.js Admin SDK
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 должны работать в обычных пакетах Firebase SDK (для веб-платформ, Android и Apple).

При тестировании серверных приложений существуют ограничения. Firebase Admin SDK используют API Google Cloud, и не все конечные точки этого 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 для создания, получения и удаления сегментов хранилища, а также для просмотра их списка.
  • Из Google Cloud Storage Objects API поддерживаются следующие методы: copy, delete, get, insert, list, patch, rewrite, update.

Cloud IAM

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

Уведомления издатель-подписчик

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

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

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

Что дальше?