Прежде чем подключать приложение к эмулятору Cloud Storage for Firebase, убедитесь, что вы понимаете общий рабочий процесс Firebase Local Emulator Suite , а также что вы устанавливаете и настраиваете Local Emulator Suite и проверяете его команды интерфейса командной строки .
Выберите проект 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
Настройте конфигурацию в приложении или тестовые классы для взаимодействия с облачным хранилищем для эмулятора 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 modular API
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 namespaced API
var storage = firebase.storage(); if (location.hostname === "localhost") { // Point to the Storage emulator running on localhost. storage.useEmulator("127.0.0.1", 9199); }
Для тестирования облачных функций , запускаемых облачным хранилищем для событий Firebase, с помощью эмулятора не требуется дополнительная настройка. Когда эмуляторы Cloud Storage for Firebase и Cloud Functions запущены, они автоматически работают вместе.
SDK администратора
Пакеты Firebase Admin SDK автоматически подключаются к облачному хранилищу для эмулятора Firebase, когда установлена переменная среды FIREBASE_STORAGE_EMULATOR_HOST
:
export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"
Обратите внимание, что эмулятор облачных функций автоматически распознает эмулятор облачного хранилища для Firebase, поэтому вы можете пропустить этот шаг при тестировании интеграции между облачными функциями и облачным хранилищем для эмуляторов Firebase. Переменная среды будет автоматически установлена для Admin SDK в облачном хранилище для Firebase.
Если вы хотите, чтобы ваш код Admin SDK подключался к общему эмулятору, работающему в другой среде, вам нужно будет указать тот же идентификатор проекта, который вы установили с помощью интерфейса командной строки Firebase . Вы можете передать идентификатор проекта напрямую в initializeApp
или установить переменную среды GCLOUD_PROJECT
.
Пакет SDK для администрирования Node.js
admin.initializeApp({ projectId: "your-project-id" });
Переменная среды
export GCLOUD_PROJECT="your-project-id"
Импорт и экспорт данных
База данных и облачное хранилище для эмуляторов 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 будут работать между обычными SDK Firebase (платформы Web, Android и Apple).
Для тестирования серверных приложений существуют ограничения. Пакеты Firebase Admin SDK используют поверхность Google Cloud API, и не все конечные точки этого API эмулируются. Как правило, все, что можно сделать из клиентских SDK (загрузка или удаление файлов, получение и настройка метаданных), также реализуется для использования из Admin SDK, но все, что выходит за рамки этого, не поддерживается. Заметные исключения перечислены ниже.
Отличия от облачного хранилища Google
Продукт Cloud Storage для Firebase, включая эмулятор Storage, предоставляет подмножество функций Google Cloud Storage (GCS), ориентированных на объекты хранилища, которые очень полезны для разработки приложений Firebase. Облачное хранилище для Firebase отличается от GCS следующими особенностями:
- Облачное хранилище для Firebase в настоящее время не поддерживает
Bucket
API для создания, перечисления, получения или удаления сегментов хранилища. - Из Google Cloud Storage Objects API поддерживаются следующие методы:
copy
,delete
,get
,insert
,list
,patch
,rewrite
,update
.
Облачный IAM
Firebase Emulator Suite не пытается воспроизвести или учесть какое-либо поведение, связанное с IAM, при запуске. Эмуляторы придерживаются предоставленных правил безопасности Firebase, но в ситуациях, когда обычно используется IAM, например, для установки облачных функций, вызывающих учетную запись службы и, следовательно, разрешения, эмулятор не настраивается и будет использовать глобально доступную учетную запись на вашем компьютере разработчика, аналогично запуску локального скрипта напрямую.
Опубликованные/подписные уведомления
Эмулятор Cloud Storage for Firebase не интегрируется с эмулятором Cloud Pub/Sub и, следовательно, не поддерживает создание каналов/уведомлений об изменении объекта хранилища. Мы рекомендуем использовать триггеры Cloud Functions Storage напрямую.
Метаданные на уровне корзины
Эмулятор Cloud Storage для Firebase не поддерживает какую-либо конфигурацию на уровне корзины, включая класс хранилища, конфигурацию CORS на уровне корзины, метки или политики хранения. Firebase намерена со временем улучшить эту поддержку.
Что дальше?
- Подборку видеороликов и подробных практических примеров смотрите в учебном плейлисте Firebase Emulators .
- Поскольку триггерные функции представляют собой типичную интеграцию с Cloud Storage для Firebase, узнайте больше об эмуляторе Cloud Functions для Firebase в разделе Запуск функций локально .