Configurer et gérer un projet Firebase à l'aide de l'API REST de gestion

L' API REST de Firebase Management permet la configuration et la gestion par programmation des projets Firebase, y compris les ressources Firebase et les applications Firebase d'un projet.

Cette présentation décrit le flux de travail général pour ajouter des ressources et des applications Firebase à un projet Google Cloud existant qui n'utilise pas actuellement les services Firebase.

Vous pouvez accéder à des sections spécifiques de cette page si vous souhaitez simplement :

Avant de suivre les étapes de cette page, assurez-vous d'activer l'API .

Pour plus d'informations sur la gestion des accès pour l'API Firebase Management, consultez la documentation de l'API Cloud Identity Access Management (IAM) .

Avant que tu commences

Avant de commencer, vous devez activer l'API de gestion pour votre projet Google Cloud et générer votre jeton d'accès .

Activez l'API REST de gestion pour votre projet Google Cloud

Si vous ne l'avez pas déjà fait, vous devrez activer l' API Firebase Management pour l'utiliser avec votre projet Google Cloud.

  1. Ouvrez la page API Firebase Management dans la console des API Google.
  2. Lorsque vous y êtes invité, sélectionnez votre projet Google Cloud.
  3. Cliquez sur Activer sur la page API de gestion Firebase.

Générez votre jeton d'accès API

Voici un exemple pour Node.js qui récupère votre jeton d'accès.

Tout d'abord, si vous n'êtes pas dans un environnement Google Cloud, définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS sur le chemin d'accès à la clé de votre compte de service.

Linux ou macOS

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-file.json"

les fenêtres

Avec PowerShell :

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\your\service-account-file.json"

Ensuite, utilisez le SDK d'administration Firebase pour obtenir un jeton d'accès à partir des informations d'identification de votre compte de service :

const admin = require('firebase-admin');

function getAccessToken() {
  return admin.credential.applicationDefault().getAccessToken()
      .then(accessToken => {
        return accessToken.access_token;
      })
      .catch(err => {
        console.error('Unable to get access token');
        console.error(err);
      });
}

Trouvez le nom de la ressource de votre projet

Vous pouvez trouver les projets Google Cloud disponibles pour l'ajout de services Firebase.

DEMANDE

Appelez availableProjects.list . Le corps de la requête pour cet appel doit être vide.

Voici un exemple permettant à Node.js de demander une liste des projets Google Cloud disponibles :

const fetch = require('node-fetch');

async function listProjects() {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/availableProjects';
  const options = {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    const projects = resp['projectInfo'];
    console.log('Project total: ' + projects.length);
    console.log('');
    for (let i in projects) {
      const project = projects[i];
      console.log('Project ' + i);
      console.log('ID: ' + project['project']);
      console.log('Display Name: ' + project['displayName']);
      console.log('');
    }
  } catch(err) {
    console.error(err);
  }
}

RÉSULTAT

Le corps de la réponse d'un appel à availableProjects.list contient une liste d'objets ProjectInfo . Si la liste des projets est trop longue, le corps de la réponse contient également un nextPageToken que vous pouvez utiliser comme paramètre de requête pour obtenir la page de projets suivante.

Voici un exemple de corps de réponse d’un appel availableProjects.list :

{
  "projectInfo": [
    {
      "project": "projects/first-cloud-project",
      "displayName": "First Cloud Project"
    },
    {
      "project": "projects/second-cloud-project",
      "displayName": "Second Cloud Project"
    }
  ]
}

Cet exemple de réponse comporte deux projets Google Cloud auxquels des services Firebase peuvent être ajoutés. Notez que le champ project fournit le nom de ressource unique au monde pour un projet.

Vous pouvez utiliser n'importe quelle valeur project répertoriée dans la réponse de availableProjects.list pour ajouter des services Firebase ou ajouter des applications à votre projet.

Dans la section suivante, nous ajouterons les services Firebase au First Cloud Project en utilisant le nom de la ressource projects/first-gcp-project .

Ajoutez des services Firebase à votre projet

Les projets Google Cloud peuvent profiter des services proposés par Firebase. Dans cette section, vous apprendrez comment ajouter des services Firebase à votre projet Google Cloud existant par programmation. Notez que vous pouvez également ajouter des services Firebase à votre projet Google Cloud existant dans la console Firebase .

DEMANDE

Appelez projects.addFirebase . Le corps de la requête pour cet appel doit être vide.

Voici un exemple permettant à Node.js d'ajouter des services Firebase à votre projet Google Cloud :

const fetch = require('node-fetch');

async function addFirebase(projectId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + ':addFirebase';
  const options = {
    method: 'POST',
    // Use a manual access token here since explicit user access token is required.
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

RÉSULTAT

Le résultat d'un appel projects.addFirebase est une Operation . Avant de pouvoir appeler d'autres points de terminaison liés à Firebase pour votre projet, l'opération doit réussir.

Pour vérifier si l'opération réussit, vous pouvez appeler operations.get sur l'opération jusqu'à ce que la valeur de done soit true et que sa response soit de type FirebaseProject . Si l'opération échoue, son error est définie sur google.rpc.Status .

Voici le corps de la réponse d’un appel operations.get :

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.FirebaseProject",
    "projectId": "first-cloud-project",
    "projectNumber": "...",
    "displayName": "First Cloud Project",
    "name": "projects/first-cloud-project",
    "resources": {
      "hostingSite": "first-cloud-project",
      "realtimeDatabaseInstance": "first-cloud-project"
    }
  }
}

Puisque done est true et que le type response est un FirebaseProject , le projet Google Cloud dispose désormais des services Firebase. La réponse contient également d'autres informations utiles sur votre FirebaseProject nouvellement créé, comme son projectNumber et ses resources par défaut. L' Operation est automatiquement supprimée une fois terminée.

Ajoutez des applications Firebase à votre projet

De nombreuses applications différentes peuvent utiliser un FirebaseProject , notamment les applications iOS, Android et Web. Dans cette section, vous apprendrez comment ajouter des applications Firebase à votre FirebaseProject existant par programmation. Notez que vous pouvez également ajouter des applications Firebase à votre projet Firebase existant dans la console Firebase .

Sélectionnez un type d'application Firebase à ajouter à votre projet Firebase.

Vous pouvez ajouter une application Android Firebase à votre projet Firebase existant.

DEMANDE

Appelez projects.androidApps.create . Voici comment construire le corps de votre requête :

  • Requis:

    • packageName : Le nom canonique du package de l’application Android tel qu’il apparaîtrait dans la console Google Play Developer.
  • Facultatif, mais recommandé :

    • displayName : Le nom d’affichage attribué par l’utilisateur à l’application. Cette valeur est utile pour retrouver votre application ultérieurement dans la console Firebase .

Dans le corps de la requête de notre exemple, nous utiliserons packageName et displayName :

{
  "displayName": "My Firebase Android App"
  "packageName": "com.firebase.android"
}

Voici un exemple permettant à Node.js d'ajouter une application Android Firebase à votre projet Firebase :

const fetch = require('node-fetch');

async function addAndroidApp(projectId, displayName, packageName) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/androidApps';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'displayName': displayName,
      'packageName': packageName
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

RÉSULTAT

Le résultat d'un appel projects.androidApps.create est une Operation . Avant de pouvoir appeler d'autres points de terminaison liés à Firebase pour votre projet, l'opération doit réussir.

Pour vérifier si l'opération réussit, vous pouvez appeler operations.get sur l'opération jusqu'à ce que la valeur de done soit true et que sa response soit de type AndroidApp . Si l'opération échoue, son error est définie sur google.rpc.Status .

Voici le corps de la réponse d’un appel operations.get :

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.AndroidApp",
    "name": "projects/first-cloud-project/androidApps/...",
    "appId": "...",
    "displayName": "My Firebase Android App",
    "projectId": "first-cloud-project",
    "packageName": "com.firebase.android"
  }
}

Puisque done est true et que le type response est un AndroidApp , le FirebaseProject a désormais un AndroidApp . La réponse contient également d'autres informations utiles sur votre application Android Firebase nouvellement créée, comme le Firebase appId unique. L' Operation est automatiquement supprimée une fois terminée.

Ajouter des certificats SHA

Vous pouvez ajouter des certificats SHA à n'importe quelle application Android Firebase existante en projects.androidApps.sha.create . Le corps de la requête pour cet appel de méthode doit avoir un champ name vide. Le résultat de cet appel est une instance nouvellement créée de ShaCertificate .

Lorsque vous projects.androidApps.sha.create , vous devez fournir un hachage de certificat SHA-1 ou SHA-256 valide. Vous pouvez obtenir le hachage SHA de votre certificat de signature avec la commande gradle signingReport :

./gradlew signingReport

Pour plus d'informations, visitez les API Google pour Android .

Vous pouvez lier un compte Google Analytics existant à votre FirebaseProject existant par programmation. Notez que vous pouvez également lier votre projet Firebase existant à Google Analytics dans l'onglet Intégrations de vos paramètres de projet .

L'appel à projects.addGoogleAnalytics nécessite un analytics_resource , qui peut être un analyticsAccountId ou un analyticsPropertyId :

  • Spécifiez un analyticsAccountId existant pour provisionner une nouvelle propriété Google Analytics dans le compte spécifié et associer la nouvelle propriété à votre projet Firebase.

  • Spécifiez un analyticsPropertyId existant pour associer la propriété Google Analytics à votre projet Firebase.

Vous pouvez trouver à la fois votre analyticsAccountId et tout analyticsPropertyId existant sur le site Web de Google Analytics .

Lorsque vous appelez projects.addGoogleAnalytics :

  1. La première vérification détermine si des flux de données existants dans la propriété Google Analytics correspondent à des applications Firebase existantes dans votre FirebaseProject (en fonction du packageName ou bundleId associé au flux de données). Ensuite, le cas échéant, les flux de données et les applications sont liés. Notez que cette liaison automatique s'applique uniquement aux applications Android et iOS.

  2. Si aucun flux de données correspondant n'est trouvé pour vos applications Firebase, de nouveaux flux de données sont fournis dans la propriété Google Analytics pour chacune de vos applications Firebase. Notez qu'un nouveau flux de données est toujours provisionné pour une application Web même s'il était précédemment associé à un flux de données dans votre propriété Analytics.

Apprenez-en davantage sur la hiérarchie et la structure des comptes Google Analytics dans la documentation Analytics .

DEMANDE

Appelez projects.addGoogleAnalytics .

Dans le corps de la requête de notre exemple d'appel à project.addGoogleAnalytics , nous spécifierons notre compte Google Analytics analyticsAccountId . Cet appel fournira une nouvelle propriété Google Analytics et associera la nouvelle propriété au FirebaseProject .

{
  "analyticsAccountId": "<your-google-analytics-account-id>"
}

Voici un exemple permettant à Node.js de lier un projet Firebase à un compte Google Analytics :

const fetch = require('node-fetch');

async function addGoogleAnalytics(projectId, analyticsAccountId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + ':addGoogleAnalytics';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'analyticsAccountId': analyticsAccountId
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

RÉSULTAT

Le résultat d’un appel projects.addGoogleAnalytics est une Operation . Avant de pouvoir appeler d'autres points de terminaison liés à Firebase pour votre projet, l'opération doit réussir.

Pour vérifier si l'opération réussit, vous pouvez appeler operations.get sur l'opération jusqu'à ce que la valeur de done soit true et que la response soit de type analyticsDetails . Si l'opération échoue, son error est définie sur google.rpc.Status .

Voici le corps de la réponse d’un appel operations.get :

{
  "name": "operations/...",
  "none": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.AnalyticsDetails",
    "analyticsProperty": [
      {
        "id": "...",
        "displayName": "..."
      }
    ],
    "streamMappings": [
      {
        "app": "...",
        "streamId": "...",
        "measurementId": "..."
      }
    ]
  }
}

Puisque done est true et que le type response est analyticsDetails , le FirebaseProject est désormais lié au compte Google Analytics spécifié. L' Operation est automatiquement supprimée une fois terminée.

Finalisez l'emplacement par défaut de votre projet (facultatif)

Si votre projet Firebase utilise Cloud Firestore, Cloud Storage ou une application App Engine, vous pouvez finaliser l' emplacement des ressources Google Cloud Platform (GCP) par défaut pour votre projet par programmation. Notez que vous pouvez également sélectionner un emplacement dans la console Firebase .

Avant de définir cet emplacement, consultez Sélectionner des emplacements pour votre projet pour obtenir des informations sur l'emplacement le mieux adapté à votre projet. Vous devez également appeler projects.availableLocations pour renvoyer une liste des emplacements valides pour votre projet, car si votre projet fait partie d'une organisation Google Cloud, les règles de votre organisation peuvent restreindre les emplacements valides pour votre projet.

L'appel de cette méthode defaultLocation.finalize crée une application App Engine avec un bucket Cloud Storage par défaut situé dans l' locationId que vous fournissez dans le corps de la requête.

L'emplacement de la ressource GCP par défaut a peut-être déjà été spécifié si le Project dispose déjà d'une application App Engine ou si cette méthode defaultLocation.finalize a déjà été appelée.

DEMANDE

Appelez projects.defaultLocation.finalize . Voici comment construire le corps de votre requête :

  • Requis:

    • locationId : emplacement où vos données sont stockées pour les services GCP qui nécessitent un paramètre d'emplacement, comme Cloud Firestore ou Cloud Storage.
{
  "locationId": "us-west2"
}

Voici un exemple permettant à Node.js de finaliser l'emplacement par défaut de votre projet :

const fetch = require('node-fetch');

async function finalizeProjectLocation(projectId, locationId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/defaultLocation:finalize';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'locationId': locationId
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

RÉSULTAT

Le résultat d'un appel projects.defaultLocation.finalize est une Operation . Avant de pouvoir appeler d'autres points de terminaison liés à Firebase pour votre projet, l'opération doit réussir.

Pour vérifier si l'opération réussit, vous pouvez appeler operations.get sur l'opération jusqu'à ce que la valeur de done soit true et que sa response soit de type google.protobuf.Empty . Si l'opération échoue, l' error du corps de la réponse sera du type google.rpc.Status . L' Operation est automatiquement supprimée une fois terminée.