Catch up on highlights from Firebase at Google I/O 2023. Learn more

Connectez votre application à l'émulateur Cloud Storage pour Firebase

Avant de connecter votre application à l'émulateur Cloud Storage pour Firebase, assurez-vous que vous comprenez le flux de travail global de Firebase Local Emulator Suite , et que vous installez et configurez Local Emulator Suite et passez en revue ses commandes CLI .

Choisissez un projet Firebase

La suite d'émulateurs locaux Firebase émule des produits pour un seul projet Firebase.

Pour sélectionner le projet à utiliser, avant de démarrer les émulateurs, dans la CLI, exécutez firebase use dans votre répertoire de travail. Ou, vous pouvez passer l'indicateur --project à chaque commande de l'émulateur.

Local Emulator Suite prend en charge l'émulation de projets Firebase réels et de projets de démonstration .

Type de projet Caractéristiques Utiliser avec des émulateurs
Réel

Un vrai projet Firebase est celui que vous avez créé et configuré (très probablement via la console Firebase).

Les projets réels ont des ressources actives, telles que des instances de base de données, des compartiments de stockage, des fonctions ou toute autre ressource que vous avez configurée pour ce projet Firebase.

Lorsque vous travaillez avec de vrais projets Firebase, vous pouvez exécuter des émulateurs pour tout ou partie des produits pris en charge.

Pour tous les produits que vous n'émulez pas, vos applications et votre code interagiront avec la ressource active (instance de base de données, compartiment de stockage, fonction, etc.).

Démo

Un projet de démonstration Firebase n'a pas de véritable configuration Firebase ni de ressources en direct. Ces projets sont généralement accessibles via des ateliers de programmation ou d'autres didacticiels.

Les ID de projet pour les projets de démonstration ont le préfixe demo- .

Lorsque vous travaillez avec des projets Firebase de démonstration, vos applications et votre code interagissent uniquement avec les émulateurs . Si votre application tente d'interagir avec une ressource pour laquelle un émulateur n'est pas en cours d'exécution, ce code échouera.

Nous vous recommandons d'utiliser des projets de démonstration dans la mesure du possible. Les avantages incluent :

  • Configuration plus facile, car vous pouvez exécuter les émulateurs sans jamais créer de projet Firebase
  • Sécurité renforcée, car si votre code invoque accidentellement des ressources non émulées (de production), il n'y a aucune chance de modification, d'utilisation et de facturation des données
  • Meilleure prise en charge hors ligne, car il n'est pas nécessaire d'accéder à Internet pour télécharger votre configuration SDK.

Instrumentez votre application pour parler aux émulateurs

Plateformes Android, Apple et SDK Web

Configurez votre configuration intégrée à l'application ou testez les classes pour interagir avec l'émulateur Cloud Storage pour Firebase comme suit.

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);
Rapide
Storage.storage().useEmulator(withHost:"127.0.0.1", port:9199)
Internet v8
var storage = firebase.storage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  storage.useEmulator("127.0.0.1", 9199);
} 
Internet v9
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);
} 

Aucune configuration supplémentaire n'est nécessaire pour tester les fonctions Cloud déclenchées par les événements Cloud Storage pour Firebase à l'aide de l'émulateur. Lorsque les émulateurs Cloud Storage pour Firebase et Cloud Functions sont en cours d'exécution, ils fonctionnent automatiquement ensemble.

SDK d'administration

Les SDK d'administration Firebase se connectent automatiquement à l'émulateur Cloud Storage pour Firebase lorsque la variable d'environnement FIREBASE_STORAGE_EMULATOR_HOST est définie :

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

Notez que l'émulateur Cloud Functions est automatiquement conscient de l'émulateur Cloud Storage pour Firebase. Vous pouvez donc ignorer cette étape lorsque vous testez des intégrations entre Cloud Functions et Cloud Storage pour émulateurs Firebase. La variable d'environnement sera automatiquement définie pour le SDK Admin dans Cloud Storage pour Firebase.

Si vous souhaitez que votre code SDK Admin se connecte à un émulateur partagé s'exécutant dans un autre environnement, vous devrez spécifier le même ID de projet que celui que vous avez défini à l'aide de la CLI Firebase . Vous pouvez transmettre un ID de projet à initializeApp directement ou définir la variable d'environnement GCLOUD_PROJECT .

SDK d'administration Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variable d'environnement
export GCLOUD_PROJECT="your-project-id"

Importer et exporter des données

La base de données et les émulateurs Cloud Storage pour Firebase vous permettent d'exporter des données à partir d'une instance d'émulateur en cours d'exécution. Définissez un ensemble de données de base à utiliser dans vos tests unitaires ou vos workflows d'intégration continue, puis exportez-le pour le partager avec l'équipe.

firebase emulators:export ./dir

Dans les tests, au démarrage de l'émulateur, importez les données de base.

firebase emulators:start --import=./dir

Vous pouvez demander à l'émulateur d'exporter les données à l'arrêt, soit en spécifiant un chemin d'exportation, soit en utilisant simplement le chemin passé à l'indicateur --import .

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

Ces options d'importation et d'exportation de données fonctionnent également avec la commande firebase emulators:exec . Pour plus d'informations, reportez-vous à la référence des commandes de l'émulateur .

Différences entre l'émulateur Cloud Storage pour Firebase et la production

Pour tester les applications clientes, l'émulateur Cloud Storage pour Firebase s'aligne presque parfaitement sur la production en ce qui concerne la surface de l'API Firebase. Toutes les commandes Firebase doivent fonctionner entre les SDK Firebase standard (plateformes Web, Android et Apple).

Pour tester les applications côté serveur, des limitations existent. Les SDK Firebase Admin utilisent la surface de l'API Google Cloud, et tous les points de terminaison de cette API ne sont pas émulés. En règle générale, tout ce qui peut être fait à partir des SDK clients (télécharger ou supprimer des fichiers, obtenir et définir des métadonnées) est également implémenté pour être utilisé à partir des SDK Admin, mais rien au-delà ne l'est. Les exclusions notables sont énumérées ci-dessous.

Différences avec Google Cloud Storage

Le produit Cloud Storage pour Firebase, y compris l'émulateur de stockage, fournit un sous-ensemble de fonctionnalités Google Cloud Storage (GCS) axé sur les objets de stockage, très utile pour développer des applications Firebase. Cloud Storage pour Firebase diffère de GCS sur les points suivants :

  • Actuellement, Cloud Storage pour Firebase n'est pas compatible avec les API Bucket pour créer, répertorier, obtenir ou supprimer des buckets de stockage.
  • À partir de l' API Google Cloud Storage Objects , les méthodes suivantes sont prises en charge : copy , delete , get , insert , list , patch , rewrite , update .

Cloud IAM

Firebase Emulator Suite ne tente pas de répliquer ou de respecter un comportement lié à IAM pour l'exécution. Les émulateurs respectent les règles de sécurité Firebase fournies, mais dans les situations où IAM serait normalement utilisé, par exemple pour définir les fonctions Cloud invoquant le compte de service et donc les autorisations, l'émulateur n'est pas configurable et utilisera le compte disponible dans le monde entier sur votre machine de développeur, similaire à l'exécution directe d'un script local.

Notifications Pub/Sub

L'émulateur Cloud Storage pour Firebase ne s'intègre pas à l'émulateur Cloud Pub/Sub et ne prend donc pas en charge la création de canaux/notifications pour les modifications d'objet de stockage. Nous vous recommandons d'utiliser directement les déclencheurs Cloud Functions Storage.

Métadonnées au niveau du bucket

L'émulateur Cloud Storage pour Firebase n'est compatible avec aucune configuration au niveau du bucket, y compris la classe de stockage, la configuration CORS au niveau du bucket, les libellés ou les règles de conservation. Firebase a l'intention d'améliorer ce support au fil du temps.

Et ensuite ?