使用管理 REST API 設定和管理 Firebase 項目

Firebase Management 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 專案搭配使用。

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

此範例回應有兩個 Google Cloud 項目,可以向其中新增 Firebase 服務。請注意, 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且其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 ,因此 Google Cloud 專案現在擁有 Firebase 服務。此回應還包含有關新建立的FirebaseProject其他有用信息,例如其projectNumber及其預設resourcesOperation完成後會自動刪除。

將 Firebase 應用程式新增至您的項目

許多不同的應用程式都可以使用FirebaseProject ,包括 iOS、Android 和 Web 應用程式。在本部分中,您將了解如何以程式設計方式將 Firebase 應用程式新增至現有FirebaseProject 。請注意,您也可以在Firebase 控制台中將 Firebase 應用程式新增至現有 Firebase 專案。

選擇要新增至您的 Firebase 專案的 Firebase 應用程式類型。

您可以透過程式設計方式將現有的Google Analytics 帳戶連結到現有的FirebaseProject 。請注意,您也可以在專案設定整合標籤中將現有 Firebase 專案連結到 Google Analytics。

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

  • 指定現有的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的值為trueresponse的類型為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傳回專案的有效位置列表,因為如果您的專案屬於 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且其response類型為google.protobuf.Empty 。如果操作不成功,回應正文error將是google.rpc.Status類型。 Operation完成後會自動刪除。