Configura e gestisci un progetto Firebase utilizzando l'API REST di gestione

L' API REST di gestione di Firebase consente la configurazione e la gestione a livello di codice dei progetti Firebase, incluse le risorse Firebase e le app Firebase di un progetto.

Questa panoramica descrive il flusso di lavoro generale per aggiungere risorse e app Firebase a un progetto Google Cloud esistente che attualmente non utilizza i servizi Firebase.

Puoi saltare a sezioni specifiche di questa pagina se vuoi solo:

Prima di eseguire qualsiasi passaggio in questa pagina, assicurati di abilitare l'API .

Per informazioni sulla gestione dell'accesso per l'API Firebase Management, visita la documentazione dell'API Cloud Identity Access Management (IAM) .

Prima di iniziare

Prima di iniziare, devi abilitare l'API di gestione per il tuo progetto Google Cloud e generare il token di accesso .

Abilita l'API REST di gestione per il tuo progetto Google Cloud

Se non l'hai già fatto, dovrai abilitare l' API di gestione di Firebase per l'utilizzo con il tuo progetto Google Cloud.

  1. Apri la pagina dell'API di gestione di Firebase nella console delle API di Google.
  2. Quando richiesto, seleziona il tuo progetto Google Cloud.
  3. Fai clic su Abilita nella pagina dell'API di gestione di Firebase.

Genera il tuo token di accesso API

Ecco un esempio per Node.js che recupera il tuo token di accesso.

Innanzitutto, se non ti trovi in ​​un ambiente Google Cloud, imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS sul percorso della chiave del tuo account di servizio.

Linux o macOS

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

finestre

Con PowerShell:

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

Quindi, utilizza Firebase Admin SDK per ottenere un token di accesso dalle credenziali del tuo account di servizio:

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

Trova il nome della risorsa del tuo progetto

Puoi trovare i progetti Google Cloud disponibili per l'aggiunta di servizi Firebase.

RICHIESTA

Chiama availableProjects.list . Il corpo della richiesta per questa chiamata deve essere vuoto.

Ecco un esempio di Node.js per richiedere un elenco di progetti Google Cloud disponibili:

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

RISULTATO

Il corpo della risposta da una chiamata a availableProjects.list contiene un elenco di oggetti ProjectInfo . Se l'elenco dei progetti è troppo lungo, il corpo della risposta contiene anche un nextPageToken che puoi utilizzare come parametro di query per ottenere la pagina successiva dei progetti.

Ecco un esempio del corpo della risposta di una chiamata availableProjects.list :

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

Questa risposta di esempio ha due progetti Google Cloud a cui possono essere aggiunti i servizi Firebase. Si noti che il campo del project fornisce il nome di risorsa univoco globale per un progetto.

Puoi utilizzare qualsiasi valore del project elencato nella risposta da availableProjects.list per aggiungere servizi Firebase o aggiungere app al tuo progetto.

Nella sezione successiva, aggiungeremo i servizi Firebase a First Cloud Project utilizzando il nome della risorsa projects/first-gcp-project .

Aggiungi i servizi Firebase al tuo progetto

I progetti Google Cloud possono usufruire dei servizi offerti da Firebase. In questa sezione imparerai come aggiungere i servizi Firebase al tuo progetto Google Cloud esistente in modo programmatico. Tieni presente che puoi anche aggiungere servizi Firebase al tuo progetto Google Cloud esistente nella console Firebase .

RICHIESTA

Chiama projects.addFirebase . Il corpo della richiesta per questa chiamata deve essere vuoto.

Ecco un esempio di Node.js per aggiungere servizi Firebase al tuo progetto 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']);
  }
}

RISULTATO

Il risultato di una chiamata a projects.addFirebase è Operation . Prima di poter chiamare altri endpoint relativi a Firebase per il tuo progetto, l'operazione deve avere esito positivo.

Per verificare se l'operazione ha esito positivo, puoi chiamare operations.get sull'operazione finché il valore di done non è true e la sua response è di tipo FirebaseProject . Se l'operazione non riesce, il suo error viene impostato su google.rpc.Status .

Ecco il corpo della risposta di una chiamata 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"
    }
  }
}

Poiché done è true e il tipo di response è un FirebaseProject , il progetto Google Cloud ora dispone dei servizi Firebase. La risposta contiene anche altre informazioni utili sul FirebaseProject appena creato, come il suo projectNumber e le sue resources predefinite. L' Operation viene automaticamente eliminata dopo il completamento.

Aggiungi le app Firebase al tuo progetto

Molte app diverse possono utilizzare un FirebaseProject , inclusi iOS, Android e app Web. In questa sezione imparerai come aggiungere le app Firebase al tuo FirebaseProject esistente in modo programmatico. Tieni presente che puoi anche aggiungere le app Firebase al tuo progetto Firebase esistente nella console Firebase .

Seleziona un tipo di app Firebase da aggiungere al tuo progetto Firebase.

Puoi collegare un account Google Analytics esistente al tuo FirebaseProject esistente in modo programmatico. Tieni presente che puoi anche collegare il tuo progetto Firebase esistente a Google Analytics nella scheda Integrazioni delle Impostazioni progetto .

La chiamata a projects.addGoogleAnalytics richiede analytics_resource , che può essere analyticsAccountId o analyticsPropertyId :

  • Specifica un analyticsAccountId esistente per eseguire il provisioning di una nuova proprietà di Google Analytics all'interno dell'account specificato e associare la nuova proprietà al tuo progetto Firebase.

  • Specifica un analyticsPropertyId esistente per associare la proprietà di Google Analytics al tuo progetto Firebase.

Puoi trovare sia il tuo analyticsAccountId che qualsiasi analyticsPropertyId esistentePropertyId sul sito web di Google Analytics .

Quando chiami projects.addGoogleAnalytics :

  1. Il primo controllo determina se eventuali flussi di dati esistenti nella proprietà di Google Analytics corrispondono a eventuali app Firebase esistenti nel tuo FirebaseProject (in base al packageName o bundleId associato al flusso di dati). Quindi, se applicabile, i flussi di dati e le app vengono collegati. Tieni presente che questo collegamento automatico si applica solo alle app Android e alle app iOS.

  2. Se non vengono trovati flussi di dati corrispondenti per le tue app Firebase, nella proprietà Google Analytics vengono forniti nuovi flussi di dati per ciascuna delle tue app Firebase. Tieni presente che viene sempre eseguito il provisioning di un nuovo flusso di dati per un'app Web anche se in precedenza era associato a un flusso di dati nella tua proprietà Analytics.

Ulteriori informazioni sulla gerarchia e sulla struttura degli account Google Analytics nella documentazione di Analytics.

RICHIESTA

Chiama projects.addGoogleAnalytics .

Nel corpo della richiesta per la nostra chiamata di esempio a project.addGoogleAnalytics , specificheremo il nostro account Google Analytics analyticsAccountId . Questa chiamata fornirà una nuova proprietà di Google Analytics e assocerà la nuova proprietà a FirebaseProject .

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

Ecco un esempio di Node.js per collegare un progetto Firebase con un account 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']);
  }
}

RISULTATO

Il risultato di una chiamata a projects.addGoogleAnalytics è Operation . Prima di poter chiamare altri endpoint relativi a Firebase per il tuo progetto, l'operazione deve avere esito positivo.

Per verificare se l'operazione ha esito positivo, puoi chiamare operations.get sull'operazione finché il valore di done non è true e la response è di tipo analyticsDetails . Se l'operazione non riesce, il suo error viene impostato su google.rpc.Status .

Ecco il corpo della risposta di una chiamata operations.get :

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

Poiché done è true e il tipo di response è analyticsDetails , FirebaseProject è ora collegato all'account Google Analytics specificato. L' Operation viene automaticamente eliminata dopo il completamento.

Finalizza la posizione predefinita del tuo progetto (facoltativo)

Se il tuo progetto Firebase utilizzerà Cloud Firestore, Cloud Storage o un'app App Engine, puoi finalizzare la posizione delle risorse Google Cloud Platform (GCP) predefinita per il tuo progetto in modo programmatico. Tieni presente che puoi anche selezionare una posizione nella console Firebase .

Prima di impostare questa posizione, controlla Seleziona le posizioni per il tuo progetto per informazioni su quale posizione è la migliore per il tuo progetto. Dovresti anche chiamare projects.availableLocations per restituire un elenco delle posizioni valide per il tuo progetto perché se il tuo progetto fa parte di un'organizzazione Google Cloud, le norme della tua organizzazione potrebbero limitare le posizioni valide per il tuo progetto.

La chiamata a questo metodo defaultLocation.finalize crea un'applicazione App Engine con un bucket di archiviazione cloud predefinito situato nel locationId fornito nel corpo della richiesta.

La posizione della risorsa GCP predefinita potrebbe essere già stata specificata se il Project dispone già di un'applicazione App Engine o se questo metodo defaultLocation.finalize è stato precedentemente chiamato.

RICHIESTA

Chiama projects.defaultLocation.finalize . Ecco come costruire il corpo della tua richiesta:

  • Necessario:

    • locationId : la posizione in cui sono archiviati i tuoi dati per i servizi GCP che richiedono un'impostazione della posizione, come Cloud Firestore o Cloud Storage.
{
  "locationId": "us-west2"
}

Ecco un esempio per Node.js per finalizzare la posizione predefinita del tuo progetto:

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

RISULTATO

Il risultato di una chiamata a projects.defaultLocation.finalize è Operation . Prima di poter chiamare altri endpoint relativi a Firebase per il tuo progetto, l'operazione deve avere esito positivo.

Per verificare se l'operazione ha esito positivo puoi chiamare operations.get sull'operazione fino a quando il valore di done è true e la sua response è di tipo google.protobuf.Empty . Se l'operazione non va a buon fine, l' error del corpo della risposta sarà di tipo google.rpc.Status . L' Operation viene automaticamente cancellata al termine.