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

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

Esta descripción general describe el flujo de trabajo general para agregar recursos y aplicaciones de Firebase a un proyecto existente de Google Cloud que actualmente no usa los 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 para Firebase Management API, visite 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 ha hecho, deberá habilitar la API de administración de Firebase para usarla con su 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 de la API de administración de Firebase.

Genera tu token de acceso a la API

Este es un ejemplo de Node.js que recupera su token de acceso.

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

Linux o mac OS

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.

SOLICITUD

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

Este es un ejemplo de Node.js para solicitar 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 usar como parámetro de consulta para obtener la siguiente página de proyectos.

Aquí hay un cuerpo de respuesta de ejemplo de una llamada 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 de project proporciona el nombre de recurso globalmente único para un proyecto.

Puede usar cualquier valor de project que aparezca en la respuesta de availableProjects.list para agregar servicios de Firebase o agregar aplicaciones a su 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á a 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 la consola de Firebase .

SOLICITUD

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

Este es 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 pueda llamar a otros puntos finales relacionados con Firebase para su proyecto, la operación debe realizarse correctamente.

Para comprobar si la operación se ha realizado correctamente, puede 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 .

Aquí está el cuerpo de la respuesta de una llamada de 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 de 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 número de projectNumber y sus resources predeterminados. La Operation se elimina automáticamente después de completarse.

Agregue aplicaciones de Firebase a su proyecto

Muchas aplicaciones diferentes pueden usar un FirebaseProject , incluidos 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 aplicaciones de Firebase a su proyecto de Firebase existente en la consola de Firebase .

Seleccione un tipo de aplicación de Firebase para agregar a su proyecto de Firebase.

Puede agregar una aplicación de Android de Firebase a su proyecto de Firebase existente.

SOLICITUD

Llame projects.androidApps.create . Aquí le mostramos cómo construir el cuerpo de su solicitud:

  • Requerido:

    • packageName : el nombre del paquete canónico de la aplicación de Android tal como aparecería en la consola de Google Play Developer.
  • Opcional, pero recomendado:

    • displayName : el nombre para mostrar de la aplicación asignado por el usuario. Este valor es útil para encontrar su aplicación más tarde en la consola de Firebase .

En el cuerpo de la solicitud de nuestro ejemplo, usaremos packageName y displayName :

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

Este es un ejemplo de Node.js para agregar una aplicación de Android de Firebase a su proyecto de 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']);
  }
}

RESULTADO

El resultado de una llamada a projects.androidApps.create es una Operation . Antes de que pueda llamar a otros puntos finales relacionados con Firebase para su proyecto, la operación debe realizarse correctamente.

Para comprobar si la operación se ha realizado correctamente, puede llamar a operations.get en la operación hasta que el valor de done sea true y su response sea ​​del tipo AndroidApp . Si la operación falla, su error se establece en google.rpc.Status .

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

Dado que done es true y el tipo de response es una AndroidApp , FirebaseProject ahora tiene una AndroidApp . La respuesta también contiene otra información útil sobre su aplicación de Android de Firebase recién creada, como el ID de aplicación único appId . La Operation se elimina automáticamente después de completarse.

Agregar certificados SHA

Puede agregar certificados SHA a cualquier aplicación Firebase Android existente llamando a projects.androidApps.sha.create . El cuerpo de la solicitud para esta llamada de método debe tener un campo de name vacío. El resultado de esta llamada es una instancia recién creada de ShaCertificate .

Al llamar a projects.androidApps.sha.create , debe proporcionar un hash de certificado SHA-1 o SHA-256 válido. Puede obtener el hash SHA de su certificado de firma con el comando Gradle signingReport :

./gradlew signingReport

Para obtener más información, visite las API de Google para Android .

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 recurso de analytics_resource , que puede ser un id de cuenta de analyticsAccountId o un id de propiedad de analyticsPropertyId :

  • Especifique un analyticsAccountId existente para aprovisionar una nueva propiedad de Google Analytics dentro de la cuenta especificada y asocie 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 a 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 de Firebase existente en su FirebaseProject (según el nombre del packageName o el ID del bundleId asociado con el flujo de datos). Luego, según corresponda, se vinculan los flujos de datos y las aplicaciones. Tenga en cuenta que esta vinculación automática solo se aplica a las aplicaciones de Android y las aplicaciones de iOS.

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

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

SOLICITUD

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>"
}

Este es 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 pueda llamar a otros puntos finales relacionados con Firebase para su proyecto, la operación debe realizarse correctamente.

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

Aquí está el cuerpo de la respuesta de una llamada de 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 de response es analyticsDetails , FirebaseProject ahora está vinculado a la cuenta de Google Analytics especificada. La Operation se elimina automáticamente después de completarse.

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

Si su proyecto de Firebase utilizará Cloud Firestore, Cloud Storage o una aplicación de App Engine, puede finalizar la ubicación de recursos predeterminada de Google Cloud Platform (GCP) para su 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 qué ubicación es la mejor para su proyecto. También debe llamar a projects.availableLocations para devolver una lista de las ubicaciones válidas para su proyecto porque si su proyecto es parte de una organización de Google Cloud, las políticas de su organización pueden restringir qué ubicaciones son válidas para su 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 ID de locationId que proporcionaste en el cuerpo de la solicitud.

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

SOLICITUD

Llame projects.defaultLocation.finalize . Aquí le mostramos cómo construir el cuerpo de su solicitud:

  • Requerido:

    • locationId : la ubicación donde se almacenan sus 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 de Node.js para finalizar 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 pueda llamar a otros puntos finales relacionados con Firebase para su proyecto, la operación debe realizarse correctamente.

Para verificar si la operación es exitosa, puede 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 tiene éxito, el error del cuerpo de la respuesta será del tipo google.rpc.Status . La Operation se elimina automáticamente después de completarse.