Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

火力地堡管理REST API使火力地堡项目的程序来配置和管理,包括项目的火力地堡资源和火力地堡应用。

本概述介绍一般的工作流程,以火力地堡资源和应用程序添加到现有的谷歌云项目目前不使用火力地堡服务。

如果您只想:

下面这个页面上的任何步骤之前,请确保您启用API

有关的火力地堡管理API访问管理信息,请访问云的身份访问管理(IAM)API文档

在你开始之前

在开始之前,你需要启用Management API为您的谷歌云项目,并生成您的令牌访问

为您的 GCP 项目启用 Management REST API

如果你还没有,你需要使火力地堡管理API与您的谷歌云项目中使用。

  1. 打开火力地堡管理API在谷歌API控制台页面。
  2. 出现提示时,选择您的 Google Cloud 项目。
  3. 单击火力地堡管理API网页上启用

生成您的 API 访问令牌

下面是一个用于检索访问令牌的 Node.js 示例。

首先,如果你是不是在谷歌云计算环境中,设置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 请求可用 GCP 项目列表的示例:

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增加火力地堡服务添加应用程序到您的项目。

在下一节中,我们将添加火力地堡服务First Cloud Project使用projects/first-gcp-project资源名称。

将 Firebase 服务添加到您的项目

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

要求

呼叫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上的操作,直到值donetrue和它的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"
    }
  }
}

由于donetrueresponse类型是FirebaseProject ,谷歌的云计算项目已经火力地堡服务。响应还包含有关新创建的其他有用的信息FirebaseProject ,喜欢它的projectNumber及其默认resources 。该Operation在完成后会自动删除。

将 Firebase 应用添加到您的项目

许多不同的应用程序可以使用FirebaseProject ,包括iOS,Android和Web应用程序。在本节中,您将学习如何火力地堡应用程序添加到现有FirebaseProject编程。请注意,您还可以在添加火力地堡应用到现有项目火力地堡火力地堡控制台

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

您可以添加火力地堡的Android应用程序到您现有的火力地堡的项目。

要求

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

  • 必需的:

    • packageName :因为它会出现在谷歌Play开发者控制台的Android应用程序的规范包名。
  • 可选,但推荐:

    • displayName :该应用的用户分配的显示名称。该值是在后来发现你的应用程序非常有用火力地堡控制台

在请求主体为我们的例子中,我们将使用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上的操作,直到值donetrue和它的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"
  }
}

由于donetrueresponse类型是AndroidApp ,该FirebaseProject现在有AndroidApp 。响应还包含有关新创建的火力地堡Android应用其他有用的信息,如独特的火力地堡appId 。该Operation在完成后会自动删除。

添加 SHA 证书

你可以通过调用添加SHA证书到任何现有的火力地堡Android应用projects.androidApps.sha.create 。此方法调用的请求主体必须有一个空的name字段。此调用的结果是一个新创建的实例ShaCertificate

当调用projects.androidApps.sha.create ,您需要提供一个有效的SHA-1或SHA-256认证散列。您可以使用gradle这个让你签名证书的SHA哈希signingReport命令:

./gradlew signingReport

欲了解更多信息,请访问谷歌的API为Android

您可以将现有的链接谷歌Analytics帐户到您现有的FirebaseProject编程。请注意,您还可以将现有的火力地堡的项目链接到谷歌Analytics(分析)的集成项目设置的选项卡。

到呼叫projects.addGoogleAnalytics需要analytics_resource ,它可以是一个analyticsAccountIdanalyticsPropertyId

  • 指定现有analyticsAccountId到规定的指定帐户内的新的谷歌Analytics(分析)属性和新的属性与火力地堡项目相关联。

  • 指定现有analyticsPropertyId到谷歌Analytics媒体与火力地堡项目相关联。

你可以找到你都analyticsAccountId和任何现有analyticsPropertyId的上谷歌分析网站

当你调用projects.addGoogleAnalytics

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

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

了解更多关于谷歌分析的层次和结构的账户中分析文档

要求

呼叫projects.addGoogleAnalytics

在请求主体为我们的例子中调用project.addGoogleAnalytics ,我们将指定我们的谷歌Analytics帐户analyticsAccountId 。这个调用将提供一个新的谷歌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上的操作,直到值donetrueresponse的类型为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是真实的response类型是analyticsDetails ,该FirebaseProject现在已链接到指定的谷歌Analytics帐户。该Operation在完成后会自动删除。

确定项目的默认位置(可选)

如果你的火力地堡项目将使用云计算公司的FireStore,云存储,或App Engine应用程序,你可以完成的默认谷歌云平台(GCP)资源位置为您的项目编程。请注意,您还可以选择在一个位置火力地堡控制台

在设置该位置,请为您的项目选择地点的信息,哪个位置是最适合你的项目。你也应该叫projects.availableLocations返回有效位置的列表,为您的项目,因为如果你的项目是谷歌云组织的一部分,那么你的组织的政策可能会限制哪些位置是有效的为您的项目。

调用此defaultLocation.finalize方法创建一个App Engine应用程序默认的云端存储地处locationId您在请求主体提供。

可能已经被指定的默认GCP资源的位置,如果该Project已经有一个App Engine应用程序或该defaultLocation.finalize方法以前调用。

要求

呼叫projects.defaultLocation.finalize 。以下是构建请求正文的方法:

  • 必需的:

    • locationId :在您的数据存储于需要的位置设置,像云公司的FireStore或云存储服务GCP的位置。
{
  "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上的操作,直到值donetrue和它的response是类型google.protobuf.Empty 。如果操作不成功,响应主体error将是类型google.rpc.Status 。该Operation在完成后会自动删除。