使用管理 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完成後會自動刪除。