Conecta tu app al emulador de Cloud Storage para Firebase

Antes de conectar tu app al emulador de Cloud Storage para Firebase, asegúrate de comprender el flujo de trabajo general de Firebase Local Emulator Suite, de instalar y configurar la herramienta, y de revisar los comandos de su CLI.

Elige un proyecto de Firebase

Firebase Local Emulator Suite emula los productos para un solo proyecto de Firebase.

Para seleccionar el proyecto que quieres usar, ejecuta firebase use en la CLI en tu directorio de trabajo antes de iniciar los emuladores. También puedes pasar la marca --project a cada comando del emulador.

Local Emulator Suite admite la emulación de proyectos reales y de demostración en Firebase.

Tipo de proyecto Características Uso con emuladores
Real

Los proyectos de Firebase reales son aquellos que creaste y configuraste (probablemente mediante Firebase console).

Los proyectos reales tienen recursos activos, como instancias de bases de datos, buckets de almacenamiento, funciones o cualquier otro recurso que hayas configurado para ese proyecto de Firebase.

Cuando trabajas con proyectos reales de Firebase, puedes ejecutar emuladores para cualquiera de los productos compatibles o todos ellos.

Si se trata de un producto que no estás emulando, tus apps y código interactuarán con los recursos activos (instancias de bases de datos, bucket de almacenamiento, función, etcétera).

Demostración

Los proyectos de demostración de Firebase no tienen una configuración real de Firebase ni recursos activos. Por lo general, se accede a estos proyectos mediante codelabs o algún otro instructivo.

Los IDs de los proyectos de demostración tienen el prefijo demo-.

Cuando trabajas con proyectos de demostración de Firebase, tus apps y código interactúan solo con emuladores. Si tu app intenta interactuar con un recurso para el cual no se está ejecutando un emulador, ese código fallará.

Te recomendamos que uses proyectos de demostración siempre que sea posible. Estos son algunos de los beneficios:

  • Configuración más sencilla, ya que puedes ejecutar los emuladores sin crear un proyecto de Firebase
  • Mayor seguridad, ya que, si tu código invoca de forma accidental recursos no emulados (de producción), no hay posibilidad de que se modifiquen los datos, el uso ni la facturación
  • Mejor soporte sin conexión, ya que no es necesario acceder a Internet para descargar la configuración del SDK

Instrumenta la app para que se comunique con los emuladores

SDK para plataformas de Android y Apple y para la Web

Configura la app o las clases de prueba para interactuar con el emulador de Cloud Storage para Firebase de la siguiente manera.

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);
Swift
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)

API modular 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);
} 

API con espacio de nombres web

var storage = firebase.storage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  storage.useEmulator("127.0.0.1", 9199);
} 

No se necesita ninguna configuración adicional para probar las Cloud Functions que se activan con eventos de Cloud Storage para Firebase mediante el emulador. Cuando se ejecutan los emuladores de Cloud Storage para Firebase y Cloud Functions, funcionan automáticamente en conjunto.

SDK de Admin

Los SDK de Firebase Admin se conectan automáticamente al emulador de Cloud Storage para Firebase cuando se establece la variable de entorno FIREBASE_STORAGE_EMULATOR_HOST.

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

Ten en cuenta que el emulador de Cloud Functions reconoce de forma automática el emulador de Cloud Storage para Firebase, por lo que puedes omitir este paso cuando pruebes las integraciones entre ambos emuladores. La variable de entorno se configurará automáticamente para el SDK de Admin en Cloud Storage para Firebase.

Si quieres que el código del SDK de Admin se conecte a un emulador compartido que se ejecute en otro entorno, deberás especificar el mismo ID del proyecto que configuraste con Firebase CLI. Podrás pasar el ID del proyecto directamente a initializeApp o configurar la variable de entorno GCLOUD_PROJECT.

SDK de Admin para Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variable de entorno
export GCLOUD_PROJECT="your-project-id"

Importa y exporta datos

Los emuladores de base de datos y Cloud Storage para Firebase te permiten exportar datos desde una instancia de emulador en ejecución. Define un conjunto de datos de referencia para usarlo en tus pruebas de unidades o flujos de trabajo de integración continua y, luego, expórtalo para compartirlo con el equipo.

firebase emulators:export ./dir

Durante el inicio del emulador en las pruebas, importa los datos de referencia.

firebase emulators:start --import=./dir

Puedes indicarle al emulador que exporte datos durante el cierre, ya sea especificando una ruta de exportación o simplemente usando la ruta de acceso que se pasó a la marca --import.

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

Estas opciones de importación y exportación de datos también funcionan con el comando firebase emulators:exec. Para obtener más información, consulta la referencia de comandos de los emuladores.

Diferencias entre el emulador de Cloud Storage para Firebase y el entorno de producción

Para probar las apps cliente, el emulador de Cloud Storage para Firebase se alinea con la producción de forma casi perfecta en cuanto al área de superficie de la API de Firebase. Se espera que todos los comandos de Firebase funcionen entre los SDK tradicionales de Firebase (Web y plataformas de Apple y Android).

Las pruebas de apps del servidor tienen limitaciones. Los SDK de Firebase Admin usan la plataforma de la API de Google Cloud, y no todos los extremos de esta API se emulan. Como regla general, todo lo que se puede hacer desde los SDK cliente (subir o borrar archivos, obtener y configurar metadatos) también se implementa para su uso desde los SDK de Admin, pero no las demás operaciones. Las exclusiones destacadas se indican a continuación.

Diferencias con Google Cloud Storage

El producto de Cloud Storage para Firebase, incluido el emulador de Storage, proporciona un subconjunto de la funcionalidad de Google Cloud Storage (GCS) que se enfoca en los objetos de almacenamiento y es muy útil para desarrollar apps de Firebase. Cloud Storage para Firebase se diferencia de GCS de las siguientes maneras:

  • En la actualidad, Cloud Storage para Firebase no admite las APIs de Bucket para crear, enumerar, obtener o borrar buckets de almacenamiento.
  • Desde la API de objetos de Google Cloud Storage, se admiten los siguientes métodos: copy, delete, get, insert, list, patch, rewrite y update.

Cloud IAM

Firebase Emulator Suite no intenta replicar ni respetar ningún comportamiento relacionado con la IAM para la ejecución. Los emuladores cumplen con las reglas de seguridad de Firebase proporcionadas, pero, en situaciones en las que normalmente se usaría la IAM (por ejemplo, para configurar Cloud Functions que invoquen la cuenta de servicio y los permisos), el emulador no se puede configurar y utiliza la cuenta con disponibilidad global en tu máquina de desarrollador, de manera similar a ejecutar una secuencia de comandos local directamente.

Notificaciones de Pub/Sub

El emulador de Cloud Storage para Firebase no se integra en el emulador de Cloud Pub/Sub y, por lo tanto, no admite la creación de canales ni notificaciones para los cambios de objetos de almacenamiento. Recomendamos usar directamente los activadores de Storage que ofrece Cloud Functions.

Metadatos de los buckets

El emulador de Cloud Storage para Firebase no admite ninguna configuración a nivel de los buckets, incluida la clase de almacenamiento, la configuración de CORS a nivel de bucket, las etiquetas o las políticas de retención. Firebase pretende mejorar esta compatibilidad con el tiempo.

Próximos pasos