Configurar y administrar un proyecto de Firebase usando la API REST de administración

La API REST de Firebase Management permite la configuración y administración programática de proyectos de Firebase, incluidos los recursos de Firebase de un proyecto y las aplicaciones de Firebase.

Esta descripción general describe el flujo de trabajo general para agregar recursos y aplicaciones de Firebase a un proyecto de Google Cloud existente que actualmente no utiliza servicios de Firebase.

Puede saltar a secciones específicas de esta página si solo desea:

Antes de seguir cualquier paso en esta página, asegúrese de habilitar la API .

Para obtener información sobre la administración de acceso a la API de Firebase Management, visita la documentación de la API de Cloud Identity Access Management (IAM) .

Antes de que empieces

Antes de comenzar, deberá habilitar la API de administración para su proyecto de Google Cloud y generar su token de acceso .

Habilite la API REST de administración para su proyecto de Google Cloud

Si aún no lo has hecho, deberás habilitar la API de administración de Firebase para usarla con tu proyecto de Google Cloud.

  1. Abra la página de la API de administración de Firebase en la consola de API de Google.
  2. Cuando se le solicite, seleccione su proyecto de Google Cloud.
  3. Haga clic en Habilitar en la página API de administración de Firebase.

Genera tu token de acceso API

A continuación se muestra un ejemplo de Node.js que recupera su token de acceso.

Primero, si no estás en un entorno de Google Cloud, configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta a la clave de tu cuenta de servicio.

Linux o macOS

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

ventanas

Con PowerShell:

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

Luego, use el SDK de administrador de Firebase para obtener un token de acceso de las credenciales de su cuenta de servicio:

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

Encuentre el nombre del recurso de su proyecto

Puede encontrar los proyectos de Google Cloud que están disponibles para agregar servicios de Firebase.

PEDIDO

Llame availableProjects.list . El cuerpo de la solicitud para esta convocatoria debe estar vacío.

A continuación se muestra un ejemplo para que Node.js solicite una lista de proyectos de 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);
  }
}

RESULTADO

El cuerpo de respuesta de una llamada a availableProjects.list contiene una lista de objetos ProjectInfo . Si la lista de proyectos es demasiado larga, el cuerpo de la respuesta también contiene un nextPageToken que puede utilizar como parámetro de consulta para obtener la siguiente página de proyectos.

A continuación se muestra un cuerpo de respuesta de ejemplo de una llamada a availableProjects.list :

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

Esta respuesta de ejemplo tiene dos proyectos de Google Cloud a los que se les pueden agregar servicios de Firebase. Tenga en cuenta que el campo project proporciona el nombre de recurso globalmente único para un proyecto.

Puede usar cualquier valor project enumerado en la respuesta de availableProjects.list para agregar servicios de Firebase o agregar aplicaciones a su proyecto.

En la siguiente sección, agregaremos servicios de Firebase a First Cloud Project usando el nombre del recurso projects/first-gcp-project .

Agrega servicios de Firebase a tu proyecto

Los proyectos de Google Cloud pueden aprovechar los servicios que ofrece Firebase. En esta sección, aprenderá cómo agregar servicios de Firebase a su proyecto existente de Google Cloud mediante programación. Tenga en cuenta que también puede agregar servicios de Firebase a su proyecto de Google Cloud existente en Firebase console .

PEDIDO

Llame projects.addFirebase . El cuerpo de la solicitud para esta convocatoria debe estar vacío.

A continuación se muestra un ejemplo de Node.js para agregar servicios de Firebase a su proyecto de 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']);
  }
}

RESULTADO

El resultado de una llamada a projects.addFirebase es una Operation . Antes de que puedas llamar a otros puntos finales relacionados con Firebase para tu proyecto, la operación debe ser exitosa.

Para verificar si la operación fue exitosa, puede llamar a operations.get en la operación hasta que el valor de done sea true y su response sea de tipo FirebaseProject . Si la operación falla, su error se establece en google.rpc.Status .

Aquí está el cuerpo de respuesta de una llamada 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"
    }
  }
}

Como done es true y el tipo response es FirebaseProject , el proyecto de Google Cloud ahora tiene servicios de Firebase. La respuesta también contiene otra información útil sobre su FirebaseProject recién creado, como su projectNumber y sus resources predeterminados. La Operation se elimina automáticamente una vez finalizada.

Agrega aplicaciones de Firebase a tu proyecto

Muchas aplicaciones diferentes pueden usar FirebaseProject , incluidas iOS, Android y aplicaciones web. En esta sección, aprenderá cómo agregar Firebase Apps a su FirebaseProject existente mediante programación. Tenga en cuenta que también puede agregar Firebase Apps a su proyecto de Firebase existente en Firebase console .

Selecciona un tipo de aplicación de Firebase para agregarla a tu proyecto de Firebase.

Puede vincular una cuenta de Google Analytics existente a su FirebaseProject existente mediante programación. Tenga en cuenta que también puede vincular su proyecto Firebase existente a Google Analytics en la pestaña Integraciones de la Configuración del proyecto .

La llamada a projects.addGoogleAnalytics requiere un analytics_resource , que puede ser un analyticsAccountId o un analyticsPropertyId :

  • Especifique un analyticsAccountId existente para aprovisionar una nueva propiedad de Google Analytics dentro de la cuenta especificada y asociar la nueva propiedad con su proyecto de Firebase.

  • Especifique un analyticsPropertyId existente para asociar la propiedad de Google Analytics con su proyecto de Firebase.

Puede encontrar tanto su analyticsAccountId como cualquier analyticsPropertyId existente en el sitio web de Google Analytics .

Cuando llamas projects.addGoogleAnalytics :

  1. La primera verificación determina si algún flujo de datos existente en la propiedad de Google Analytics corresponde a alguna aplicación Firebase existente en su FirebaseProject (según el packageName o bundleId asociado con el flujo de datos). Luego, según corresponda, se vinculan los flujos de datos y las aplicaciones. Tenga en cuenta que este enlace automático solo se aplica a aplicaciones de Android y de iOS.

  2. Si no se encuentran flujos de datos correspondientes para sus Firebase Apps, se aprovisionan nuevos flujos de datos en la propiedad de Google Analytics para cada una de sus Firebase Apps. Tenga en cuenta que siempre se aprovisiona un nuevo flujo de datos para una aplicación web, incluso si estaba previamente asociado con un flujo de datos en su propiedad de Analytics.

Obtenga más información sobre la jerarquía y estructura de las cuentas de Google Analytics en la documentación de Analytics .

PEDIDO

Llame projects.addGoogleAnalytics .

En el cuerpo de la solicitud de nuestra llamada de ejemplo a project.addGoogleAnalytics , especificaremos nuestra cuenta de Google Analytics analyticsAccountId . Esta llamada aprovisionará una nueva propiedad de Google Analytics y asociará la nueva propiedad con FirebaseProject .

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

A continuación se muestra un ejemplo de Node.js para vincular un proyecto de Firebase con una cuenta de 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']);
  }
}

RESULTADO

El resultado de una llamada a projects.addGoogleAnalytics es una Operation . Antes de que puedas llamar a otros puntos finales relacionados con Firebase para tu proyecto, la operación debe ser exitosa.

Para verificar si la operación fue exitosa, puede llamar a operations.get en la operación hasta que el valor de done sea true y la response sea de tipo analyticsDetails . Si la operación falla, su error se establece en google.rpc.Status .

Aquí está el cuerpo de respuesta de una llamada operations.get :

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

Dado que done es verdadero y el tipo response es analyticsDetails , FirebaseProject ahora está vinculado a la cuenta de Google Analytics especificada. La Operation se elimina automáticamente una vez finalizada.

Finalice la ubicación predeterminada de su proyecto (opcional)

Si tu proyecto de Firebase utilizará Cloud Firestore, Cloud Storage o una aplicación de App Engine, puedes finalizar la ubicación de recursos predeterminada de Google Cloud Platform (GCP) para tu proyecto mediante programación. Tenga en cuenta que también puede seleccionar una ubicación en Firebase console .

Antes de configurar esta ubicación, consulte Seleccionar ubicaciones para su proyecto para obtener información sobre cuál es la mejor ubicación para su proyecto. También debes llamar a projects.availableLocations para obtener una lista de las ubicaciones válidas para tu proyecto porque si tu proyecto es parte de una organización de Google Cloud, las políticas de tu organización podrían restringir qué ubicaciones son válidas para tu proyecto.

Llamar a este método defaultLocation.finalize crea una aplicación de App Engine con un depósito de Cloud Storage predeterminado ubicado en el locationId que proporcionas en el cuerpo de la solicitud.

Es posible que la ubicación predeterminada del recurso GCP ya se haya especificado si el Project ya tiene una aplicación App Engine o si se llamó previamente a este método defaultLocation.finalize .

PEDIDO

Llame projects.defaultLocation.finalize . A continuación se explica cómo construir el cuerpo de su solicitud:

  • Requerido:

    • locationId : la ubicación donde se almacenan tus datos para los servicios de GCP que requieren una configuración de ubicación, como Cloud Firestore o Cloud Storage.
{
  "locationId": "us-west2"
}

Aquí hay un ejemplo para que Node.js finalice la ubicación predeterminada de su proyecto:

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

RESULTADO

El resultado de una llamada a projects.defaultLocation.finalize es una Operation . Antes de que puedas llamar a otros puntos finales relacionados con Firebase para tu proyecto, la operación debe ser exitosa.

Para verificar si la operación fue exitosa, puede llamar operations.get en la operación hasta que el valor de done sea true y su response sea del tipo google.protobuf.Empty . Si la operación no tiene éxito, el error del cuerpo de la respuesta será del tipo google.rpc.Status . La Operation se elimina automáticamente una vez finalizada.