Configurar e gerenciar um projeto do Firebase usando a API REST de gerenciamento

A API REST de gerenciamento do Firebase permite a configuração programática e o gerenciamento de projetos do Firebase, incluindo os recursos do Firebase e os aplicativos do Firebase de um projeto.

Esta visão geral descreve o fluxo de trabalho geral para adicionar recursos e aplicativos do Firebase a um projeto existente do Google Cloud que atualmente não usa serviços do Firebase.

Você pode pular para seções específicas desta página se quiser apenas:

Antes de seguir qualquer etapa desta página, certifique-se de ativar a API .

Para obter informações sobre o gerenciamento de acesso da API Firebase Management, acesse a documentação da API Cloud Identity Access Management (IAM) .

Antes de você começar

Antes de começar, você precisará ativar a API Management para seu projeto do Google Cloud e gerar seu token de acesso .

Ative a API REST de gerenciamento para seu projeto do Google Cloud

Se ainda não o fez, será necessário ativar a API Firebase Management para uso com seu projeto do Google Cloud.

  1. Abra a página da API Firebase Management no console de APIs do Google.
  2. Quando solicitado, selecione seu projeto do Google Cloud.
  3. Clique em Ativar na página da API de gerenciamento do Firebase.

Gere seu token de acesso à API

Aqui está um exemplo de Node.js que recupera seu token de acesso.

Primeiro, se você não estiver em um ambiente do Google Cloud, defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS como o caminho da chave da sua conta de serviço.

Linux ou macOS

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

janelas

Com PowerShell:

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

Em seguida, use o Firebase Admin SDK para obter um token de acesso das credenciais da sua conta de serviço:

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

Encontre o nome do recurso do seu projeto

Você pode encontrar os projetos do Google Cloud disponíveis para adicionar serviços Firebase.

SOLICITAR

Chame availableProjects.list . O corpo da solicitação desta chamada deve estar vazio.

Aqui está um exemplo para Node.js solicitar uma lista de projetos disponíveis do 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

O corpo da resposta de uma chamada para availableProjects.list contém uma lista de objetos ProjectInfo . Se a lista de projetos for muito longa, o corpo da resposta também conterá um nextPageToken que você pode usar como parâmetro de consulta para obter a próxima página de projetos.

Aqui está um exemplo de corpo de resposta de uma chamada availableProjects.list :

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

Este exemplo de resposta tem dois projetos do Google Cloud que podem ter serviços do Firebase adicionados a eles. Observe que o campo project fornece o nome do recurso globalmente exclusivo para um projeto.

Você pode usar qualquer valor project listado na resposta de availableProjects.list para adicionar serviços do Firebase ou adicionar aplicativos ao seu projeto.

Na próxima seção, adicionaremos serviços do Firebase ao First Cloud Project usando o nome do recurso projects/first-gcp-project .

Adicione serviços do Firebase ao seu projeto

Os projetos do Google Cloud podem aproveitar os serviços oferecidos pelo Firebase. Nesta seção, você aprenderá como adicionar serviços do Firebase ao seu projeto existente do Google Cloud de forma programática. Observe que você também pode adicionar serviços do Firebase ao seu projeto existente do Google Cloud no console do Firebase .

SOLICITAR

Chame projects.addFirebase . O corpo da solicitação desta chamada deve estar vazio.

Aqui está um exemplo de Node.js para adicionar serviços do Firebase ao seu projeto do 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

O resultado de uma chamada para projects.addFirebase é uma Operation . Antes de poder chamar outros endpoints relacionados ao Firebase para seu projeto, a operação deve ser bem-sucedida.

Para verificar se a operação foi bem-sucedida, você pode chamar operations.get na operação até que o valor de done seja true e sua response seja do tipo FirebaseProject . Se a operação falhar, o error será definido como google.rpc.Status .

Aqui está o corpo da resposta de uma chamada 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 é true e o tipo response é FirebaseProject , o projeto Google Cloud agora tem serviços Firebase. A resposta também contém outras informações úteis sobre FirebaseProject recém-criado, como projectNumber e resources padrão. A Operation é excluída automaticamente após a conclusão.

Adicione aplicativos do Firebase ao seu projeto

Muitos aplicativos diferentes podem usar um FirebaseProject , incluindo iOS, Android e aplicativos da web. Nesta seção, você aprenderá como adicionar aplicativos do Firebase ao seu FirebaseProject existente de forma programática. Observe que você também pode adicionar aplicativos do Firebase ao seu projeto existente do Firebase no console do Firebase .

Selecione um tipo de aplicativo do Firebase para adicionar ao seu projeto do Firebase.

Você pode adicionar um aplicativo Android do Firebase ao seu projeto existente do Firebase.

SOLICITAR

Chame projects.androidApps.create . Veja como construir o corpo da sua solicitação:

  • Obrigatório:

    • packageName : o nome canônico do pacote do aplicativo Android conforme apareceria no console do desenvolvedor do Google Play.
  • Opcional, mas recomendado:

    • displayName : o nome de exibição atribuído pelo usuário do aplicativo. Esse valor é útil para encontrar seu aplicativo posteriormente no console do Firebase .

No corpo da solicitação do nosso exemplo, usaremos packageName e displayName :

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

Aqui está um exemplo de Node.js para adicionar um aplicativo Firebase Android ao seu projeto 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

O resultado de uma chamada para projects.androidApps.create é uma Operation . Antes de poder chamar outros endpoints relacionados ao Firebase para seu projeto, a operação deve ser bem-sucedida.

Para verificar se a operação foi bem-sucedida, você pode chamar operations.get na operação até que o valor de done seja true e sua response seja do tipo AndroidApp . Se a operação falhar, o error será definido como google.rpc.Status .

Aqui está o corpo da resposta de uma chamada 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"
  }
}

Como done é true e o tipo response é AndroidApp , o FirebaseProject agora tem um AndroidApp . A resposta também contém outras informações úteis sobre seu aplicativo Firebase para Android recém-criado, como o exclusivo Firebase appId . A Operation é excluída automaticamente após a conclusão.

Adicionar certificados SHA

Você pode adicionar certificados SHA a qualquer aplicativo Android do Firebase existente chamando projects.androidApps.sha.create . O corpo da solicitação para esta chamada de método deve ter um campo name vazio. O resultado desta chamada é uma instância recém-criada de ShaCertificate .

Ao chamar projects.androidApps.sha.create , você precisa fornecer um hash de certificado SHA-1 ou SHA-256 válido. Você pode obter o hash SHA do seu certificado de assinatura com o comando gradle signingReport :

./gradlew signingReport

Para obter mais informações, visite APIs do Google para Android .

Você pode vincular uma conta existente do Google Analytics ao seu FirebaseProject existente de forma programática. Observe que você também pode vincular seu projeto existente do Firebase ao Google Analytics na guia Integrações das configurações do projeto .

A chamada para projects.addGoogleAnalytics requer um analytics_resource , que pode ser um analyticsAccountId ou um analyticsPropertyId :

  • Especifique um analyticsAccountId existente para provisionar uma nova propriedade do Google Analytics na conta especificada e associar a nova propriedade ao seu projeto do Firebase.

  • Especifique um analyticsPropertyId existente para associar a propriedade do Google Analytics ao seu projeto do Firebase.

Você pode encontrar seu analyticsAccountId e qualquer analyticsPropertyId existente no site do Google Analytics .

Quando você chama projects.addGoogleAnalytics :

  1. A primeira verificação determina se algum fluxo de dados existente na propriedade do Google Analytics corresponde a algum aplicativo Firebase existente em seu FirebaseProject (com base no packageName ou bundleId associado ao fluxo de dados). Então, conforme aplicável, os fluxos de dados e os aplicativos são vinculados. Observe que essa vinculação automática se aplica apenas a aplicativos Android e aplicativos iOS.

  2. Se nenhum fluxo de dados correspondente for encontrado para seus aplicativos do Firebase, novos fluxos de dados serão provisionados na propriedade do Google Analytics para cada um dos seus aplicativos do Firebase. Observe que um novo fluxo de dados é sempre provisionado para um aplicativo Web, mesmo que tenha sido associado anteriormente a um fluxo de dados na sua propriedade do Analytics.

Saiba mais sobre a hierarquia e a estrutura das contas do Google Analytics na documentação do Analytics .

SOLICITAR

Chame projects.addGoogleAnalytics .

No corpo da solicitação de nosso exemplo de chamada para project.addGoogleAnalytics , especificaremos nossa conta do Google Analytics analyticsAccountId . Esta chamada provisionará uma nova propriedade do Google Analytics e associará a nova propriedade ao FirebaseProject .

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

Aqui está um exemplo de Node.js para vincular um projeto do Firebase a uma conta do 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

O resultado de uma chamada para projects.addGoogleAnalytics é uma Operation . Antes de poder chamar outros endpoints relacionados ao Firebase para seu projeto, a operação deve ser bem-sucedida.

Para verificar se a operação foi bem-sucedida, você pode chamar operations.get na operação até que o valor de done seja true e a response seja do tipo analyticsDetails . Se a operação falhar, o error será definido como google.rpc.Status .

Aqui está o corpo da resposta de uma chamada operations.get :

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

Como done é verdadeiro e o tipo response é analyticsDetails , o FirebaseProject agora está vinculado à conta especificada do Google Analytics. A Operation é excluída automaticamente após a conclusão.

Finalize o local padrão do seu projeto (opcional)

Se seu projeto do Firebase usar o Cloud Firestore, o Cloud Storage ou um aplicativo do App Engine, você poderá finalizar o local de recurso padrão do Google Cloud Platform (GCP) para seu projeto de maneira programática. Observe que você também pode selecionar um local no console do Firebase .

Antes de definir esse local, consulte Selecionar locais para o seu projeto para obter informações sobre qual local é melhor para o seu projeto. Você também deve chamar projects.availableLocations para retornar uma lista dos locais válidos para seu projeto, porque se seu projeto fizer parte de uma organização do Google Cloud, as políticas da sua organização poderão restringir quais locais são válidos para seu projeto.

Chamar esse método defaultLocation.finalize cria um aplicativo do App Engine com um intervalo padrão do Cloud Storage localizado no locationId fornecido no corpo da solicitação.

O local padrão do recurso do GCP pode já ter sido especificado se o Project já tiver um aplicativo do App Engine ou se este método defaultLocation.finalize tiver sido chamado anteriormente.

SOLICITAR

Chame projects.defaultLocation.finalize . Veja como construir o corpo da sua solicitação:

  • Obrigatório:

    • locationId : o local onde seus dados são armazenados para serviços do GCP que exigem uma configuração de local, como Cloud Firestore ou Cloud Storage.
{
  "locationId": "us-west2"
}

Aqui está um exemplo para o Node.js finalizar o local padrão do seu projeto:

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

O resultado de uma chamada para projects.defaultLocation.finalize é uma Operation . Antes de poder chamar outros endpoints relacionados ao Firebase para seu projeto, a operação deve ser bem-sucedida.

Para verificar se a operação foi bem-sucedida, você pode chamar operations.get na operação até que o valor de done seja true e sua response seja do tipo google.protobuf.Empty . Se a operação não for bem-sucedida, o error no corpo da resposta será do tipo google.rpc.Status . A Operation é excluída automaticamente após a conclusão.