Configura y administra un proyecto de Firebase con la API de REST de Management

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

En esta descripción, se describe el flujo de trabajo general para agregar aplicaciones y recursos de Firebase a un proyecto de Google Cloud existente que no está usando servicios de Firebase.

Puedes ir directamente a secciones específicas de esta página si solo quieres hacer alguna de estas acciones:

Antes de seguir los pasos que se indican en esta página, asegúrate de habilitar la API.

Si quieres obtener información sobre la administración de acceso de la API de Firebase Management, consulta la documentación de la API de Cloud Identity & Access Management (IAM).

Antes de comenzar

Antes de comenzar, debes habilitar la API de Management en tu proyecto de Google Cloud y generar el token de acceso.

Habilita la API de REST de Management en tu proyecto de Google Cloud

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

  1. Abre la página de la API de Firebase Management en la Consola de API de Google.
  2. Cuando se te solicite, selecciona tu proyecto de Google Cloud.
  3. Haz clic en Habilitar en la página de la API de Firebase Management.

Genera tu token de acceso a la API

A continuación, se muestra un ejemplo de Node.js en el que se recupera tu token de acceso.

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

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"

Luego, usa el SDK de Firebase Admin para obtener un token de acceso de las credenciales de tu 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);
      });
}

Busca el nombre de recurso de tu proyecto

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

SOLICITUD

Llama a availableProjects.list. El cuerpo de la solicitud de esta llamada debe estar vacío.

A continuación, se muestra un ejemplo de Node.js en el que se solicita una lista de los proyectos disponibles de Google Cloud:

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 la 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 puedes usar como parámetro de búsqueda para obtener la siguiente página de proyectos.

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

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

En esta respuesta de ejemplo, hay dos proyectos de Google Cloud a los que se les pueden agregar servicios de Firebase. Ten en cuenta que el campo project proporciona el nombre de recurso único a nivel global en un proyecto.

Puedes usar cualquier valor de project que aparezca en la respuesta de availableProjects.list para agregar servicios de Firebase o agregar apps a tu proyecto.

En la siguiente sección, agregaremos los servicios de Firebase a First Cloud Project con el nombre de 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ás a agregar servicios de Firebase a tu proyecto de Google Cloud existente de manera programática. Ten en cuenta que también puedes agregar servicios de Firebase a tu proyecto de Google Cloud en Firebase console.

SOLICITUD

Llama a projects.addFirebase. El cuerpo de la solicitud de esta llamada debe estar vacío.

A continuación, se muestra un ejemplo de Node.js en el que se agregan servicios de Firebase a tu 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 extremos relacionados con Firebase para tu proyecto, la operación debe realizarse correctamente.

Para verificar que esto haya sucedido, puedes llamar a operations.get en la operación hasta que el valor de done sea true y su response sea del tipo FirebaseProject. Si la operación falla, su error se establece en google.rpc.Status.

Este es el cuerpo de la respuesta de una llamada a 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"
    }
  }
}

Dado que 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 tu FirebaseProject recién creado, como su projectNumber y sus resources predeterminados. Operation se borrará de forma automática después de que se complete la llamada.

Agrega apps de Firebase a tu proyecto

Muchas apps diferentes pueden usar un FirebaseProject, incluidas las apps para iOS, Android y la Web. En esta sección, aprenderás a agregar apps de Firebase a tu FirebaseProject de manera programática. Ten en cuenta que también puedes agregar apps de Firebase a tu proyecto de Firebase en Firebase console.

Selecciona un tipo de app de Firebase para agregar a tu proyecto de Firebase.

Puedes vincular una cuenta de Google Analytics a tu FirebaseProject de manera programática. Ten en cuenta que también puedes vincular tu proyecto de Firebase con Google Analytics en la pestaña Integraciones de la página Configuración del proyecto.

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

  • Especifica un analyticsAccountId existente para aprovisionar una propiedad de Google Analytics nueva en la cuenta especificada y asocia esta propiedad con tu proyecto de Firebase.

  • Especifica un analyticsPropertyId existente para asociar la propiedad de Google Analytics con tu proyecto de Firebase.

Puedes encontrar tu analyticsAccountId y cualquier analyticsPropertyId existente en el sitio web de Google Analytics.

Ten en cuenta lo siguiente cuando llames a projects.addGoogleAnalytics:

  1. La primera verificación determina si cualquier flujo de datos existente en la propiedad de Google Analytics corresponde a alguna app de Firebase en tu FirebaseProject (en función de si packageName o bundleId están asociados con el flujo de datos). Luego, según corresponda, se vincularán los flujos de datos y las apps. Ten en cuenta que esta vinculación automática solo se aplica a las apps para iOS y Android.

  2. Si no se encuentran flujos de datos correspondientes en tus apps de Firebase, se aprovisionarán nuevos flujos de datos en la propiedad de Google Analytics para cada una de tus apps de Firebase. Ten en cuenta que siempre se aprovisionará una transmisión de datos nueva para una aplicación web, incluso si se asoció previamente con un flujo de datos en tu propiedad de Analytics.

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

SOLICITUD

Llama a 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 el FirebaseProject.

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

A continuación, se muestra un ejemplo de Node.js en el que se vincula 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 extremos relacionados con Firebase en tu proyecto, la operación debe realizarse con éxito.

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

Este es el cuerpo de la respuesta de una llamada a 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 que el tipo response es analyticsDetails, FirebaseProject ahora estará vinculado a la cuenta de Google Analytics especificada. Operation se borrará de forma automática después de que se complete la llamada.

Finaliza la ubicación predeterminada de tu proyecto (opcional)

Si tu proyecto de Firebase usará Cloud Firestore, Cloud Storage o una aplicación de App Engine, puedes finalizar la ubicación predeterminada para los recursos de Google Cloud Platform (GCP) en tu proyecto de manera programática. Ten en cuenta que también puedes seleccionar una ubicación en Firebase console.

Antes de configurar esta ubicación, revisa Selecciona ubicaciones para tu proyecto a fin de obtener información acerca de qué ubicación es la mejor para tu proyecto. También debes llamar a projects.availableLocations a fin de mostrar una lista de las ubicaciones válidas para tu proyecto porque, si tu proyecto forma parte de una organización de Google Cloud, las políticas de tu organización podrían restringir las ubicaciones válidas para tu proyecto.

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

Es posible que la ubicación predeterminada para los recursos de GCP ya esté especificada si el Project ya tiene una aplicación de App Engine o si se llamó a este método defaultLocation.finalize anteriormente.

SOLICITUD

Llama a projects.defaultLocation.finalize. Aquí te mostramos cómo crear el cuerpo de la solicitud:

  • Obligatorio:

    • locationId: La ubicación en la que 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í te mostramos un ejemplo de Node.js en el que se finaliza la ubicación predeterminada de tu 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 extremos relacionados con Firebase para tu proyecto, la operación debe realizarse correctamente.

Para verificar que esto haya sucedido, puedes llamar a 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 se realiza correctamente, el cuerpo de la respuesta error será de tipo google.rpc.Status. Operation se borrará de forma automática después de que se complete la llamada.