Подключите свое приложение к облачному хранилищу для эмулятора 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 и живых ресурсов. К таким проектам обычно обращаются через codelabs или другие руководства.

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

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

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

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

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

Платформы Android, Apple и Web 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 , запускаемых событиями 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 .

Node.js 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 (платформы Web, Android и Apple).

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

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

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

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

Облачный 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 намерена улучшить эту поддержку со временем.

Что дальше?