Catch up on highlights from Firebase at Google I/O 2023. Learn more

Настройка проекта Firebase и управление им с помощью Management REST API.

REST API управления Firebase позволяет программно настраивать и управлять проектами Firebase, включая ресурсы Firebase проекта и приложения Firebase.

В этом обзоре описывается общий рабочий процесс добавления ресурсов и приложений Firebase в существующий проект Google Cloud , который в настоящее время не использует службы Firebase.

Вы можете перейти к определенным разделам этой страницы, если хотите:

Прежде чем выполнять какие-либо действия на этой странице, убедитесь, что вы включили API .

Информацию об управлении доступом для Firebase Management API см. в документации по Cloud Identity Access Management (IAM) API .

Прежде чем вы начнете

Прежде чем начать, вам нужно включить Management API для вашего проекта Google Cloud и сгенерировать токен доступа .

Включите Management REST API для вашего проекта Google Cloud.

Если вы еще этого не сделали, вам нужно включить Firebase Management API для использования с вашим проектом Google Cloud.

  1. Откройте страницу Firebase Management API в консоли API Google.
  2. При появлении запроса выберите свой проект Google Cloud.
  3. Нажмите « Включить » на странице Firebase Management API.

Создайте свой токен доступа к API

Вот пример для Node.js, который извлекает ваш токен доступа.

Во-первых, если вы не находитесь в среде Google Cloud, задайте для переменной среды GOOGLE_APPLICATION_CREDENTIALS путь к ключу вашей служебной учетной записи.

Линукс или макОС

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

Окна

С PowerShell:

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

Затем используйте Firebase Admin SDK, чтобы получить токен доступа из учетных данных вашей учетной записи службы:

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

Найдите название ресурса вашего проекта

Вы можете найти проекты Google Cloud, которые доступны для добавления сервисов Firebase.

ЗАПРОС

Вызовите availableProjects.list . Тело запроса для этого вызова должно быть пустым.

Вот пример Node.js для запроса списка доступных проектов 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);
  }
}

РЕЗУЛЬТАТ

Тело ответа от вызова availableProjects.list содержит список объектов ProjectInfo . Если список проектов слишком длинный, текст ответа также содержит nextPageToken , который можно использовать в качестве параметра запроса для получения следующей страницы проектов.

Вот пример тела ответа на вызов availableProjects.list :

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

В этом примере ответа есть два проекта Google Cloud, к которым можно добавить службы Firebase. Обратите внимание, что поле project содержит глобально уникальное имя ресурса для проекта.

Вы можете использовать любое значение project , указанное в ответе availableProjects.list , чтобы добавить службы Firebase или добавить приложения в свой проект.

В следующем разделе мы добавим сервисы Firebase в First Cloud Project , используя имя ресурса projects/first-gcp-project .

Добавьте сервисы Firebase в свой проект

Проекты Google Cloud могут воспользоваться услугами, предлагаемыми Firebase. В этом разделе вы узнаете, как программно добавить службы Firebase в существующий проект Google Cloud. Обратите внимание, что вы также можете добавить сервисы Firebase в свой существующий проект Google Cloud в консоли Firebase .

ЗАПРОС

Вызов projects.addFirebase . Тело запроса для этого вызова должно быть пустым.

Вот пример Node.js для добавления сервисов Firebase в ваш проект 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']);
  }
}

РЕЗУЛЬТАТ

Результатом вызова projects.addFirebase является Operation . Прежде чем вы сможете вызывать другие конечные точки, связанные с Firebase, для вашего проекта, операция должна быть успешной.

Чтобы проверить, успешно ли выполнена операция, вы можете вызывать для operations.get Operations.get до тех пор, пока значение done не станет true , а его response не будет иметь тип FirebaseProject . Если операция завершается сбоем, ее error устанавливается в google.rpc.Status .

Вот тело operations.get на вызов 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"
    }
  }
}

Поскольку done имеет значение true , а тип responseFirebaseProject , в проекте Google Cloud теперь есть сервисы Firebase. Ответ также содержит другую полезную информацию о только что созданном FirebaseProject , например projectNumber и resources по умолчанию. Operation автоматически удаляется после завершения.

Добавьте приложения Firebase в свой проект

Много разных приложений могут использовать FirebaseProject , включая iOS, Android и веб-приложения. В этом разделе вы узнаете, как программно добавить приложения Firebase в существующий FirebaseProject . Обратите внимание, что вы также можете добавить приложения Firebase в существующий проект Firebase в консоли Firebase .

Выберите тип приложения Firebase для добавления в проект Firebase.

Вы можете программно связать существующую учетную запись Google Analytics с существующим FirebaseProject . Обратите внимание, что вы также можете связать свой существующий проект Firebase с Google Analytics на вкладке « Интеграция » в настройках проекта .

Для вызова projects.addGoogleAnalytics требуется analytics_resource , который может быть analyticsAccountId или analyticsPropertyId :

  • Укажите существующий analyticsAccountId , чтобы предоставить новое свойство Google Analytics в указанной учетной записи и связать новое свойство с вашим проектом Firebase.

  • Укажите существующий analyticsPropertyId , чтобы связать свойство Google Analytics с вашим проектом Firebase.

Вы можете найти как свой analyticsAccountId , так и любой существующий analyticsPropertyId на веб- сайте Google Analytics .

Когда вы вызываете projects.addGoogleAnalytics :

  1. Первая проверка определяет, соответствуют ли какие-либо существующие потоки данных в ресурсе Google Analytics каким-либо существующим приложениям Firebase в вашем FirebaseProject (на основе имени packageName или bundleId связанного с потоком данных). Затем, если применимо, потоки данных и приложения связываются. Обратите внимание, что эта автоматическая привязка применяется только к приложениям для Android и iOS.

  2. Если соответствующие потоки данных для ваших приложений Firebase не найдены, новые потоки данных предоставляются в свойстве Google Analytics для каждого из ваших приложений Firebase. Обратите внимание, что для веб-приложения всегда создается новый поток данных, даже если он ранее был связан с потоком данных в вашем ресурсе Analytics.

Узнайте больше об иерархии и структуре аккаунтов Google Analytics в документации по Analytics.

ЗАПРОС

Позвоните projects.addGoogleAnalytics .

В теле запроса для нашего примера вызова project.addGoogleAnalytics мы укажем analyticsAccountId нашей учетной записи Google Analytics. Этот вызов предоставит новое свойство Google Analytics и свяжет новое свойство с FirebaseProject .

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

Вот пример Node.js для связывания проекта Firebase с учетной записью 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']);
  }
}

РЕЗУЛЬТАТ

Результатом вызова projects.addGoogleAnalytics является Operation . Прежде чем вы сможете вызывать другие конечные точки, связанные с Firebase, для вашего проекта, операция должна быть успешной.

Чтобы проверить, успешно ли выполнена операция, вы можете вызывать для operations.get Operations.get до тех пор, пока значение done не станет true , а response не будет иметь тип analyticsDetails . Если операция завершается сбоем, ее error устанавливается в google.rpc.Status .

Вот тело operations.get на вызов Operations.get:

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

Поскольку done имеет значение true, а тип responseanalyticsDetails , FirebaseProject теперь связан с указанной учетной записью Google Analytics. Operation автоматически удаляется после завершения.

Завершите расположение вашего проекта по умолчанию (необязательно)

Если ваш проект Firebase будет использовать Cloud Firestore, Cloud Storage или приложение App Engine, вы можете программно завершить расположение ресурса Google Cloud Platform (GCP) по умолчанию для своего проекта. Обратите внимание, что вы также можете выбрать местоположение в консоли Firebase .

Перед настройкой этого местоположения ознакомьтесь с информацией о том, какое местоположение лучше всего подходит для вашего проекта, в разделе Выбор местоположений для вашего проекта. Вы также должны вызвать projects.availableLocations , чтобы вернуть список допустимых местоположений для вашего проекта, поскольку, если ваш проект является частью организации Google Cloud, политики вашей организации могут ограничивать допустимые расположения для вашего проекта.

При вызове этого метода defaultLocation.finalize создается приложение App Engine с сегментом Cloud Storage по умолчанию , расположенным по идентификатору locationId , указанному в тексте запроса.

Расположение ресурса GCP по умолчанию могло быть уже указано, если в Project уже есть приложение App Engine или этот метод defaultLocation.finalize был вызван ранее.

ЗАПРОС

Вызов projects.defaultLocation.finalize . Вот как построить тело запроса:

  • Необходимые:

    • locationId : место, где хранятся ваши данные для сервисов GCP, для которых требуется настройка местоположения, например Cloud Firestore или Cloud Storage.
{
  "locationId": "us-west2"
}

Вот пример Node.js для окончательного определения местоположения вашего проекта по умолчанию:

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

РЕЗУЛЬТАТ

Результатом вызова projects.defaultLocation.finalize является Operation . Прежде чем вы сможете вызывать другие конечные точки, связанные с Firebase, для вашего проекта, операция должна быть успешной.

Чтобы проверить, успешно ли выполнена операция, вы можете вызывать operations.get operation.get до тех пор, пока значение done не станет true , а его response не будет иметь тип google.protobuf.Empty . Если операция завершится неудачно, error тела ответа будет иметь тип google.rpc.Status . Operation автоматически удаляется после завершения.