Прежде чем подключать приложение к эмулятору 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 и активных ресурсов. Доступ к этим проектам обычно осуществляется через лаборатории кода или другие учебные пособия. Идентификаторы демонстрационных проектов имеют префикс | При работе с демо-проектами 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 поддерживаются следующие методы:
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 намерена со временем улучшить эту поддержку.
Что дальше?
- Подборку видеороликов и подробных примеров с практическими рекомендациями можно найти в плейлисте для обучения эмуляторам Firebase .
- Поскольку триггерные функции представляют собой типичную интеграцию с Cloud Storage for Firebase , узнайте больше об эмуляторе Cloud Functions for Firebase в разделе «Выполнить функции локально» .