Configurare e gestire un progetto Firebase utilizzando l'API REST Management

L'API REST di gestione di Firebase consente la configurazione e la gestione programmatica 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 Google Cloud progetto esistente che non utilizza ancora i servizi Firebase.

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

Prima di seguire i passaggi descritti in questa pagina, assicurati di abilitare l'API.

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

Prima di iniziare

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

Abilitare l'API REST Management per il progetto Google Cloud

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

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

Generare il token di accesso API

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

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

Linux o macOS

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

Windows

Con PowerShell:

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

Quindi, utilizza l'SDK Firebase Admin per ottenere un token di accesso dalle credenziali del service account:

import { initializeApp, applicationDefault } from "firebase-admin/app";

initializeApp();

async function getAccessToken() {
  try {
    const accessToken = await applicationDefault().getAccessToken();
    return accessToken.access_token;
  } catch (err) {
    console.error('Unable to get access token');
    console.error(err);
  }
}

Trovare il nome della risorsa del progetto

Puoi trovare i progetti Google Cloud a cui puoi aggiungere i servizi Firebase.

RICHIEDI

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

Ecco un esempio per Node.js per richiedere un elenco di Google Cloud progetti 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 di una chiamata a availableProjects.list contiene un elenco di ProjectInfo oggetti. 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 di 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 include due progetti a cui è possibile aggiungere i servizi Firebase.Google Cloud Tieni presente che il campo project fornisce il nome della risorsa univoca a livello globale per un progetto.

Puoi utilizzare qualsiasi valore project elencato nella risposta di 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.

Aggiungere servizi Firebase al tuo progetto

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

RICHIEDI

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

Ecco un esempio per Node.js per aggiungere i servizi Firebase al tuo Google Cloud progetto:

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 è un 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 finché il valore di done non è true e il relativo response non è di tipo FirebaseProject. Se l'operazione non riesce, 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.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 è un FirebaseProject, il progetto Google Cloud ora dispone dei servizi Firebase. La risposta contiene anche altre informazioni utili sul FirebaseProject appena creato, come il projectNumber e le resources predefinite. L'Operation viene eliminata automaticamente al termine.

Aggiungere app Firebase al progetto

Molte app diverse possono utilizzare un FirebaseProject, tra cui app per iOS, Android e web. In questa sezione, scoprirai come aggiungere app Firebase al tuo FirebaseProject esistente in modo programmatico. Tieni presente che puoi anche aggiungere app Firebase al tuo progetto Firebase esistente in Firebase console.

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

iOS+

Puoi aggiungere un'app Firebase per iOS al tuo progetto Firebase esistente.

RICHIEDI

Chiama projects.iosApps.create. Ecco come creare il corpo della richiesta:

  • Obbligatorio:

    • bundleId: l'ID pacchetto canonico dell'app per iOS così come appare nell'App Store per iOS.
  • Facoltativo, ma consigliato:

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

    • appStoreId: l'ID Apple generato automaticamente assegnato alla tua app da Apple. Specifica un appStoreId se è già stato assegnato da Apple.

Nel corpo della richiesta per il nostro esempio, utilizzeremo solo un displayName e un bundleId:

{
  "displayName": "My Firebase iOS App",
  "bundleId": "com.firebase.ios"
}

Ecco un esempio per Node.js per aggiungere un'app Firebase per iOS al tuo progetto Firebase:

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

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

  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.iosApps.create è un 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 finché il valore di done non è true e il relativo response non è di tipo IosApp. Se l'operazione non riesce, 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.IosApp",
    "name": "projects/first-cloud-project/iosApps/...",
    "appId": "...",
    "displayName": "My Firebase iOS App",
    "projectId": "first-cloud-project",
    "bundleId": "com.firebase.ios"
  }
}

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

Android

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

RICHIEDI

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

  • Obbligatorio:

    • packageName: il nome del pacchetto canonico dell'app per Android così come appare nella console Google Play Console.
  • Facoltativo, ma consigliato:

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

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

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

Ecco un esempio per Node.js per aggiungere un'app Firebase per Android 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 è un 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 finché il valore di done non è true e il relativo response non è di tipo AndroidApp. Se l'operazione non riesce, 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, il FirebaseProject ora ha un AndroidApp. La risposta contiene anche altre informazioni utili sull'app Firebase per Android appena creata, come l'appId Firebase univoco. L'Operation viene eliminata automaticamente al termine.

Aggiungere certificati SHA

Puoi aggiungere certificati SHA a qualsiasi app Firebase per Android 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 certificato di firma con il comando signingReport di Gradle:

./gradlew signingReport

Per ulteriori informazioni, visita la pagina API di Google per Android.

Web

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

RICHIEDI

Chiama projects.webApps.create. Ecco come creare il corpo della richiesta:

  • Facoltativamente,

    • displayName: il nome visualizzato assegnato dall'utente all'app. Questo valore è utile per trovare l'app in un secondo momento nella Firebase console.
  • Non consigliato:

    • appUrls: gli URL completi in cui è ospitata l'app. Quando un' app web Firebase è associata a un sito Firebase Hosting, Firebase compila automaticamente questi campi, quindi lascia questi campi vuoti nel corpo della richiesta.

Nel corpo della richiesta per il nostro esempio, specificheremo solo un displayName:

{
  "displayName": "My Firebase Web App"
}

Ecco un esempio per Node.js per aggiungere un'app web Firebase al tuo progetto Firebase:

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

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

  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.webApps.create è un 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 finché il valore di done non è true e il relativo response non è di tipo WebApp. Se l'operazione non riesce, 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.WebApp",
    "name": "projects/first-cloud-project/webApps/...",
    "appId": "...",
    "displayName": "My Firebase Web App",
    "projectId": "first-cloud-project"
  }
}

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

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 sia qualsiasi esistente analyticsPropertyId sul sito web di Google Analytics.

Quando chiami projects.addGoogleAnalytics:

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

  2. Se non vengono trovati stream di dati corrispondenti per le tue app Firebase, vengono forniti 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 stream di dati per un'app web, anche se era già associata a uno stream di dati nella tua proprietà Analytics.

Scopri di più sulla gerarchia e sulla struttura degli account Google Analytics nella documentazione di Analytics.

RICHIEDI

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 eseguirà il provisioning di una nuova proprietà Google Analytics e la assocerà al FirebaseProject.

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

Ecco un esempio per 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 è un 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 finché il valore di done non è true e il relativo response non è di tipo analyticsDetails. Se l'operazione non riesce, il relativo 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, il FirebaseProject è ora collegato all'account Google Analytics specificato. L'Operation viene eliminata automaticamente al termine.