Настройте проект 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 автоматически удаляется после завершения.