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

L' API REST di Firebase Management consente la configurazione e la gestione programmatiche 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 passare a sezioni specifiche di questa pagina se desideri semplicemente:

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

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

Prima di iniziare

Prima di iniziare, dovrai 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 Firebase Management da utilizzare con il tuo progetto Google Cloud.

  1. Apri la pagina 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 API di gestione 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 dei servizi Firebase.

RICHIESTA

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

Ecco un esempio in cui Node.js richiede 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"
    }
  ]
}

In questa risposta di esempio sono presenti due progetti Google Cloud a cui possono essere aggiunti i servizi Firebase. Tieni presente che il campo project fornisce il nome della risorsa univoco a livello globale per un progetto.

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

Nella sezione successiva aggiungeremo i servizi Firebase al 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 correlati 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 FirebaseProject . Se l'operazione fallisce, 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 response è 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 al termine.

Aggiungi le app Firebase al tuo progetto

Molte app diverse possono utilizzare FirebaseProject , tra cui 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 app Firebase al tuo progetto Firebase esistente nella console Firebase .

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

Puoi aggiungere un'app Android Firebase al tuo progetto Firebase esistente.

RICHIESTA

Chiama projects.androidApps.create . Ecco come costruire il corpo della richiesta:

  • Necessario:

    • packageName : il nome canonico del pacchetto dell'app Android così come verrebbe visualizzato nella console per gli sviluppatori di Google Play.
  • Facoltativo, ma consigliato:

    • displayName : il nome visualizzato dell'app assegnato dall'utente. Questo valore è utile per trovare la tua app in un secondo momento nella console Firebase .

Nel corpo della richiesta per il nostro esempio, utilizzeremo packageName e displayName :

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

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

RISULTATO

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

Per verificare se l'operazione ha avuto esito positivo, puoi chiamare operations.get sull'operazione fino a quando il valore di done è true e la sua response è di tipo AndroidApp . Se l'operazione fallisce, il relativo 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.AndroidApp",
    "name": "projects/first-cloud-project/androidApps/...",
    "appId": "...",
    "displayName": "My Firebase Android App",
    "projectId": "first-cloud-project",
    "packageName": "com.firebase.android"
  }
}

Poiché done è true e il tipo response è un AndroidApp , FirebaseProject ora ha un AndroidApp . La risposta contiene anche altre informazioni utili sulla tua app Android Firebase appena creata, come l' appId Firebase univoco. L' Operation viene automaticamente eliminata al termine.

Aggiungi certificati SHA

Puoi aggiungere certificati SHA a qualsiasi app Android Firebase esistente chiamando projects.androidApps.sha.create . Il corpo della richiesta per questa chiamata al metodo deve avere un campo name vuoto. Il risultato di questa chiamata è un'istanza appena creata di ShaCertificate .

Quando chiami projects.androidApps.sha.create , devi fornire un hash del certificato SHA-1 o SHA-256 valido. Puoi ottenere l'hash SHA del tuo certificato di firma con il comando gradle signingReport :

./gradlew signingReport

Per ulteriori informazioni, visita API di Google per Android .

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 un analytics_resource , che può essere un analyticsAccountId o un analyticsPropertyId :

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

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

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

Quando chiami projects.addGoogleAnalytics :

  1. Il primo controllo determina se eventuali flussi di dati esistenti nella proprietà 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 stream di dati corrispondenti per le tue app Firebase, viene eseguito il provisioning di nuovi stream di dati nella proprietà Google Analytics 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 era stato precedentemente 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à 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 a 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 correlati a Firebase per il tuo progetto, l'operazione deve avere esito positivo.

Per verificare se l'operazione ha esito positivo, è possibile chiamare operations.get sull'operazione fino a quando il valore di done è true e la response è di tipo analyticsDetails . Se l'operazione fallisce, 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 response è analyticsDetails , FirebaseProject è ora collegato all'account Google Analytics specificato. L' Operation viene automaticamente eliminata al termine.

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 predefinita delle risorse Google Cloud Platform (GCP) 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 posizioni per il tuo progetto per informazioni su quale sia la posizione 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, i criteri della tua organizzazione potrebbero limitare quali posizioni sono valide per il tuo progetto.

La chiamata a questo metodo defaultLocation.finalize crea un'applicazione App Engine con un bucket Cloud Storage predefinito situato nel locationId che fornisci nel corpo della richiesta.

La posizione predefinita della risorsa GCP 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 richiesta:

  • Necessario:

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

Ecco un esempio di 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 correlati a Firebase per il tuo progetto, l'operazione deve avere esito positivo.

Per verificare se l'operazione ha avuto successo 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 ha esito positivo, l' error del corpo della risposta sarà di tipo google.rpc.Status . L' Operation viene automaticamente eliminata al termine.