Conecta tu app al emulador de Cloud Storage para Firebase

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

Elige un proyecto de Firebase

El 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.

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

Tipo de proyecto Características Uso con emuladores
Real

Los proyectos de Firebase reales son aquellos que creaste y configuraste (probablemente usando 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 que interactúen con el emulador de Cloud Storage for 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)

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

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

Admin SDK s

Los Firebase Admin SDK se conectan automáticamente al emulador de Cloud Storage for 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 automáticamente el emulador de Cloud Storage for Firebase para que puedas omitir este paso cuando realices pruebas integraciones entre los emuladores de Cloud Functions y Cloud Storage for Firebase. La variable de entorno se configurará automáticamente para el SDK de Admin en Cloud Storage for Firebase.

Si quieres que el código del Admin SDK se conecte a un emulador compartido que se ejecuta 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 bases de datos y de Cloud Storage for 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 for Firebase y el entorno de producción

Para probar las apps cliente, el emulador de Cloud Storage for 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 for 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. que es muy útil para desarrollar apps de Firebase. Cloud Storage for Firebase difiere de GCS de las siguientes maneras:

  • Por el momento, Cloud Storage for 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 for Firebase no se integra en el emulador de Cloud Pub/Sub y, por lo tanto, no admite la creación de canales/notificaciones para cambios de objetos de almacenamiento. Recomendamos usar directamente los activadores de Storage de Cloud Functions.

Metadatos de los buckets

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

Próximos pasos