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

Avant de connecter votre application à l'émulateur Cloud Storage pour Firebase, assurez-vous de bien comprendre le flux de travail global de Firebase Local Emulator Suite , d' installer et de configurer Local Emulator Suite et de consulter ses commandes CLI .

Choisissez un projet Firebase

La suite Firebase Local Emulator émule les produits pour un seul projet Firebase.

Pour sélectionner le projet à utiliser, avant de démarrer les émulateurs, dans la CLI, firebase use dans votre répertoire de travail. Vous pouvez également transmettre l'indicateur --project à chaque commande d'é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 disposent de 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 actives. 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 portent le préfixe demo- .

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

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

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

Instrumentez votre application pour communiquer avec les émulateurs

Plateformes Android, Apple et SDK Web

Configurez votre configuration dans l'application ou vos classes de test 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)

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

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

SDK d'administration

Les SDK Firebase Admin 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 reconnaît automatiquement l'émulateur Cloud Storage pour Firebase. Vous pouvez donc ignorer cette étape lorsque vous testez les intégrations entre Cloud Functions et les émulateurs Cloud Storage pour 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é exécuté dans un autre environnement, vous devrez spécifier le même ID de projet que vous avez défini à l'aide de la CLI Firebase . Vous pouvez transmettre directement un ID de projet à initializeApp 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 flux de travail d'intégration continue, puis exportez-le pour le partager au sein de 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 transmis à 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 en savoir plus, reportez-vous à la référence des commandes d'émulateur .

En quoi l'émulateur Cloud Storage pour Firebase diffère de 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 sont censées fonctionner entre les SDK Firebase classiques (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 d'administration, mais tout ce qui va au-delà ne l'est pas. Les exclusions notables sont énumérées ci-dessous.

Différences par rapport à 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 :

  • Cloud Storage pour Firebase ne prend actuellement pas en charge les API Bucket pour créer, répertorier, obtenir ou supprimer des buckets de stockage.
  • Depuis l' API Google Cloud Storage Objects , les méthodes suivantes sont prises en charge : copy , delete , get , insert , list , patch , rewrite , update .

IAM dans le cloud

La suite d'émulateurs Firebase ne tente pas de répliquer ou de respecter tout comportement lié à IAM lors de son exécution. Les émulateurs adhèrent aux règles de sécurité Firebase fournies, mais dans les situations où IAM serait normalement utilisé, par exemple pour définir le compte de service appelant Cloud Functions et donc les autorisations, l'émulateur n'est pas configurable et utilisera le compte disponible mondialement sur votre ordinateur 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 des objets 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 ne prend en charge aucune configuration au niveau du bucket, notamment la classe de stockage, la configuration CORS au niveau du bucket, les étiquettes ou les stratégies de conservation. Firebase a l'intention d'améliorer cette prise en charge au fil du temps.

Et ensuite ?