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

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

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

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

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

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

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

Прежде чем начать, вам необходимо включить 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 . Тело запроса для этого вызова должно быть пустым.

Вот пример добавления сервисов Firebase в ваш проект Google Cloud с помощью Node.js:

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 для операции до тех пор, пока значение done не станет true , а response не будет иметь тип FirebaseProject . Если операция завершается неудачно, ее error присваивается значение google.rpc.Status .

Вот тело ответа на вызов 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 для операции до тех пор, пока значение done не станет true , а response не будет иметь тип analyticsDetails . Если операция завершается неудачно, ее error присваивается значение google.rpc.Status .

Вот тело ответа на вызов 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 для операции до тех пор, пока значение done не станет true , а response не будет иметь тип google.protobuf.Empty . Если операция завершилась неудачно, error тела ответа будет иметь тип google.rpc.Status . Operation автоматически удаляется после завершения.