Check out what’s new from Firebase at Google I/O 2022. Learn more

使用 Management REST API 设置和管理 Firebase 项目

Firebase 管理 REST API支持对 Firebase 项目进行编程设置和管理,包括项目的 Firebase 资源和 Firebase 应用。

本概述介绍了将 Firebase 资源和应用添加到当前未使用 Firebase 服务的现有Google Cloud 项目的一般工作流程。

如果您只想:

在执行此页面上的任何步骤之前,请确保启用 API

有关 Firebase Management API 访问管理的信息,请访问Cloud Identity Access Management (IAM) API 文档

在你开始之前

在开始之前,您需要为您的 Google Cloud 项目启用 Management API生成您的访问令牌

为您的 Google Cloud 项目启用管理 REST API

如果您还没有启用Firebase Management API以用于您的 Google Cloud 项目,则需要启用该 API。

  1. 在 Google API 控制台中打开Firebase Management API页面。
  2. 出现提示时,选择您的 Google Cloud 项目。
  3. 点击 Firebase 管理 API 页面上的启用

生成您的 API 访问令牌

这是检索您的访问令牌的 Node.js 示例。

首先,如果您不在 Google Cloud 环境中,请将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为您的服务帐号密钥的路径。

Linux 或 macOS

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

查找项目的资源名称

您可以找到可用于添加 Firebase 服务的 Google Cloud 项目。

要求

调用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"
    }
  ]
}

此示例响应有两个可以添加 Firebase 服务的 Google Cloud 项目。请注意, project字段提供项目的全局唯一资源名称。

您可以使用availableProjects.list响应中列出的任何project值来添加 Firebase 服务将应用添加到您的项目。

在下一部分中,我们将使用projects/first-gcp-project资源名称将 Firebase 服务添加到First Cloud Project

将 Firebase 服务添加到您的项目

Google Cloud 项目可以利用 Firebase 提供的服务。在本部分中,您将了解如何以编程方式将 Firebase 服务添加到您现有的 Google Cloud 项目中。请注意,您还可以在Firebase 控制台中将 Firebase 服务添加到您现有的 Google Cloud 项目中。

要求

调用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并且其responseFirebaseProject类型。如果操作失败,则将其error设置为google.rpc.Status

这是operations.get的响应正文。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"
    }
  }
}

由于donetrue并且response类型是FirebaseProject ,因此 Google Cloud 项目现在具有 Firebase 服务。响应还包含有关您新创建的FirebaseProject的其他有用信息,例如它的projectNumber和它的默认resourcesOperation完成后会自动删除。

将 Firebase 应用添加到您的项目

许多不同的应用程序都可以使用FirebaseProject ,包括 iOS、Android 和 Web 应用程序。在本节中,您将了解如何以编程方式将 Firebase 应用程序添加到您现有的FirebaseProject 。请注意,您还可以在Firebase 控制台中将 Firebase 应用程序添加到您现有的 Firebase 项目中。

选择要添加到 Firebase 项目的 Firebase 应用类型。

您可以将Firebase Android 应用添加到现有 Firebase 项目中。

要求

调用projects.androidApps.create 。以下是构建请求正文的方法:

  • 必需的:

    • packageName :Android 应用的规范包名称,它会出现在 Google Play 开发者控制台中。
  • 可选,但推荐:

    • displayName :用户分配的应用显示名称。此值对于稍后在Firebase 控制台中查找您的应用很有用。

在我们示例的请求正文中,我们将使用packageNamedisplayName

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

这是 Node.js 将 Firebase Android 应用程序添加到您的 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']);
  }
}

结果

调用projects.androidApps.create的结果是Operation 。在您可以为您的项目调用其他与 Firebase 相关的端点之前,该操作必须成功。

要检查操作是否成功,您可以在操作上调用operations.get直到done的值为true并且其responseAndroidApp类型。如果操作失败,则将其error设置为google.rpc.Status

这是operations.get的响应正文。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"
  }
}

因为donetrue并且response类型是AndroidApp ,所以FirebaseProject现在有一个AndroidApp 。该响应还包含有关您新创建的 Firebase Android 应用的其他有用信息,例如唯一的 Firebase appIdOperation完成后会自动删除。

添加 SHA 证书

您可以通过调用projects.androidApps.sha.create将 SHA 证书添加到任何现有的 Firebase Android 应用。此方法调用的请求正文必须有一个空的name字段。此调用的结果是新创建的ShaCertificate实例。

调用projects.androidApps.sha.create时,您需要提供有效的 SHA-1 或 SHA-256 证书哈希。您可以使用 gradle signingReport命令获取签名证书的 SHA 哈希:

./gradlew signingReport

有关更多信息,请访问适用于 Android 的 Google API

您可以以编程方式将现有的Google Analytics(分析)帐户链接到现有的FirebaseProject 。请注意,您还可以在Project SettingsIntegrations选项卡中将现有 Firebase 项目链接到 Google Analytics。

projects.addGoogleAnalytics的调用需要一个analytics_resource ,它可以是一个analyticsAccountId或一个analyticsPropertyId

  • 指定现有的analyticsAccountId以在指定帐户中配置新的 Google Analytics(分析)媒体资源,并将新媒体资源与您的 Firebase 项目相关联。

  • 指定现有的analyticsPropertyId以将 Google Analytics(分析)媒体资源与您的 Firebase 项目相关联。

您可以在Google Analytics 网站上找到您的analyticsAccountId和任何现有的analyticsPropertyId

当您调用projects.addGoogleAnalytics时:

  1. 第一项检查确定 Google Analytics 属性中的任何现有数据流是否与您的FirebaseProject中的任何现有 Firebase 应用相对应(基于与数据流关联的packageNamebundleId )。然后,在适用的情况下,数据流和应用程序被链接。请注意,此自动链接仅适用于 Android 应用程序和 iOS 应用程序。

  2. 如果没有为您的 Firebase 应用找到相应的数据流,则会在 Google Analytics(分析)属性中为您的每个 Firebase 应用配置新的数据流。请注意,始终会为 Web 应用程序配置新的数据流,即使它之前与您的 Analytics 媒体资源中的数据流相关联。

在 Google Analytics(分析)文档中详细了解 Google 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的响应正文。get 调用:

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

由于done为 true 且response类型为analyticsDetails ,因此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中。

如果Project已经有 App Engine 应用程序或之前调用了此defaultLocation.finalize方法,则可能已经指定了默认 GCP 资源位置。

要求

调用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并且其responsegoogle.protobuf.Empty类型。如果操作不成功,响应正文error将是google.rpc.Status类型。 Operation完成后会自动删除。