Google 致力于为黑人社区推动种族平等。查看具体举措

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

Firebase Management REST API支持以编程方式设置和管理 Firebase 项目,包括项目的 Firebase 资源和 Firebase 应用。

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

如果您只想执行以下操作,可以跳转到此页面的特定部分:

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

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

在你开始之前

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

为您的 GCP 项目启用 Management REST API

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

  1. 在 Google API 控制台中打开Firebase Management 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"

视窗

使用 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 服务的 GCP 项目。请注意, project字段为project提供了全球唯一的资源名称。

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

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

将 Firebase 服务添加到您的项目

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

要求

调用projects.addFirebase 。此调用的请求正文必须为空。

以下是 Node.js 将 Firebase 服务添加到您的 GCP 项目的示例:

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"
    }
  }
}

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

将 Firebase 应用添加到您的项目

许多不同的应用程序都可以使用FirebaseProject ,包括 iOS、Android 和网络应用程序。在本节中,您将学习如何以编程方式将 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并且其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"
  }
}

由于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 。请注意,您还可以在项目设置集成选项卡中将现有的 Firebase 项目链接到 Google Analytics。

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

  • 指定现有的analyticsAccountId以在指定帐户中配置新的 Google Analytics 属性并将新属性与您的 Firebase 项目相关联。

  • 指定现有的analyticsPropertyId以将 Google Analytics 属性与您的 Firebase 项目相关联。

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

当您调用projects.addGoogleAnalytics

  1. 第一次检查确定是否有任何现有的数据在谷歌分析属性对应流到任何现有的火力地堡应用程序在你的FirebaseProject (基于packageNamebundleId与数据流相关)。然后,如果适用,链接数据流和应用程序。请注意,此自动链接仅适用于 Android 应用程序和 iOS 应用程序。

  2. 如果没有为您的 Firebase 应用找到相应的数据流,则会在 Google Analytics 属性中为您的每个 Firebase 应用配置新的数据流。请注意,新数据流始终是为网络应用程序配置的,即使它之前与您的 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调用的响应主体:

{
  "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来返回projects.availableLocations的有效位置列表,因为如果您的项目是 GCP 组织的一部分,那么您的组织政策可能会限制哪些位置对您的项目有效。

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