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

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

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

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

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

Для получения информации об управлении доступом к API управления Firebase посетите документацию по API управления доступом к облачным идентификаторам (IAM) .

Прежде чем начать

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

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

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

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

Сгенерируйте токен доступа к API.

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

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

Linux или macOS

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

Windows

С помощью PowerShell:

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

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

import { initializeApp, applicationDefault } from "firebase-admin/app";

initializeApp();

async function getAccessToken() {
  try {
    const accessToken = await applicationDefault().getAccessToken();
    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 содержит уникальное глобальное имя ресурса для проекта.

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

В следующем разделе мы добавим сервисы 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 для этой операции до тех пор, пока значение 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.

iOS+

Вы можете добавить iOS-приложение Firebase в свой существующий проект Firebase.

ЗАПРОС

Вызовите метод projects.iosApps.create . Вот как сформировать тело запроса:

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

    • bundleId : Канонический идентификатор пакета iOS-приложения, как он будет отображаться в App Store.
  • Необязательно, но рекомендуется:

    • displayName : Назначенное пользователем отображаемое имя приложения. Это значение полезно для последующего поиска приложения в консоли Firebase .

    • appStoreId : Автоматически сгенерированный Apple ID, присвоенный вашему приложению компанией Apple. Укажите appStoreId если он уже был присвоен Apple.

В теле запроса в нашем примере мы будем использовать только displayName и bundleId :

{
  "displayName": "My Firebase iOS App",
  "bundleId": "com.firebase.ios"
}

Вот пример того, как добавить iOS-приложение Firebase в ваш проект Firebase с помощью Node.js:

const fetch = require('node-fetch');

async function addIosApp(projectId, displayName, bundleId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/iosApps';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'displayName': displayName,
      'bundleId': bundleId
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

РЕЗУЛЬТАТ

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

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

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

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.IosApp",
    "name": "projects/first-cloud-project/iosApps/...",
    "appId": "...",
    "displayName": "My Firebase iOS App",
    "projectId": "first-cloud-project",
    "bundleId": "com.firebase.ios"
  }
}

Поскольку значение параметра done равно true , а тип responseIosApp , в FirebaseProject теперь есть объект IosApp . Ответ также содержит другую полезную информацию о вашем недавно созданном приложении Firebase для iOS, например, уникальный appId ). Operation автоматически удаляется после завершения.

Android

Вы можете добавить Android-приложение Firebase в свой существующий проект Firebase.

ЗАПРОС

Вызовите метод projects.androidApps.create . Вот как сформировать тело запроса:

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

    • packageName : Каноническое имя пакета приложения Android, как оно будет отображаться в консоли разработчика Google Play.
  • Необязательно, но рекомендуется:

    • displayName : Назначенное пользователем отображаемое имя приложения. Это значение полезно для последующего поиска вашего приложения в консоли Firebase .

В теле запроса в нашем примере мы будем использовать packageName и displayName :

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

Вот пример того, как добавить Android-приложение Firebase в ваш проект Firebase с помощью Node.js:

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

РЕЗУЛЬТАТ

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

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

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

Поскольку значение параметра done равно true , а тип responseAndroidApp , в FirebaseProject теперь есть AndroidApp . Ответ также содержит другую полезную информацию о вашем недавно созданном приложении Firebase для Android, например, уникальный идентификатор приложения Firebase ( appId ). Operation автоматически удаляется после завершения.

Добавить сертификаты SHA

Добавить SHA-сертификаты в любое существующее Android-приложение Firebase можно, вызвав метод projects.androidApps.sha.create . Тело запроса для этого метода должно содержать пустое поле name . Результатом вызова является новый созданный экземпляр класса ShaCertificate .

При вызове projects.androidApps.sha.create необходимо указать действительный хеш сертификата SHA-1 или SHA-256. Хеш SHA вашего сертификата подписи можно получить с помощью команды gradle signingReport :

./gradlew signingReport

Для получения более подробной информации посетите страницу Google APIs для Android .

Веб

Вы можете добавить веб-приложение Firebase в свой существующий проект Firebase.

ЗАПРОС

Вызовите метод projects.webApps.create . Вот как сформировать тело запроса:

  • Необязательный:

    • displayName : Назначенное пользователем отображаемое имя приложения. Это значение полезно для последующего поиска вашего приложения в консоли Firebase .
  • Не рекомендуется:

    • appUrls : Полные URL-адреса, по которым размещено приложение. Когда веб-приложение Firebase связано с сайтом Firebase Hosting , Firebase автоматически заполняет эти поля, поэтому оставьте их пустыми в теле запроса.

В нашем примере мы укажем displayName только в теле запроса:

{
  "displayName": "My Firebase Web App"
}

Вот пример того, как добавить веб-приложение Firebase в ваш проект Firebase с помощью Node.js:

const fetch = require('node-fetch');

async function addWebApp(projectId, displayName) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/webApps';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'displayName': displayName
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

РЕЗУЛЬТАТ

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

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

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

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.WebApp",
    "name": "projects/first-cloud-project/webApps/...",
    "appId": "...",
    "displayName": "My Firebase Web App",
    "projectId": "first-cloud-project"
  }
}

Поскольку значение параметра done равно true , а тип responseWebApp , объект FirebaseProject теперь имеет WebApp . Ответ также содержит другую полезную информацию о вашем недавно созданном веб-приложении Firebase, например, уникальный идентификатор приложения Firebase ( appId . Operation автоматически удаляется после завершения.

Вы можете программно связать существующую учетную запись 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 мы укажем наш аккаунт Google Analytics analyticsAccountId . Этот вызов создаст новое свойство 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 автоматически удаляется после завершения.