使用 Management REST API 設定及管理 Firebase 專案

Firebase Management REST API 會啟用 程式化設定及管理 Firebase 專案,包括專案的 Firebase 資源和 Firebase 應用程式。

本總覽說明新增 Firebase 資源和新增 Firebase 資源的一般工作流程 將應用程式遷移至現有 Google Cloud 專案 但目前未採用 Firebase 服務的客戶

如果你只是想要:

在執行這個頁面的任何步驟前, 啟用 API

如要進一步瞭解 Firebase Management API 的存取權管理,請前往 Cloud Identity Access Management (IAM) API 說明文件

事前準備

開始之前,您需要為以下項目啟用 Management API: 管理 Google Cloud 專案 產生您的存取權杖

為 Google Cloud 專案啟用 Management REST API

這項作業必須啟用 Firebase 管理 API 以便用於 Google Cloud 專案

  1. 開啟 Firebase 管理 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"

Windows

使用 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 專案 免費 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 如需儲存大量結構化物件 建議使用 Cloud Bigtable如果專案清單過長,回應主體也會包含 nextPageToken,且可當做查詢參數使用,以取得下一頁 Google Cloud 的 Resource Manager 工具 經特別設計,能以程式輔助方式協助您管理專案

以下是 availableProjects.list 呼叫的回應主體範例:

{
  "projectInfo": [
    {
      "project": "projects/first-cloud-project",
      "displayName": "First Cloud Project"
    },
    {
      "project": "projects/second-cloud-project",
      "displayName": "Second Cloud Project"
    }
  ]
}

本範例回應包含兩項 Google Cloud 專案 新加入的所有服務請注意,project 欄位會提供全域值 為專案建立不重複的資源名稱

您可以使用回應中所列的任何 project 值: availableProjects.list新增 Firebase 服務,或 在專案中新增應用程式

在下一節中,我們將使用以下程式碼將 Firebase 服務新增至 First Cloud Project projects/first-gcp-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"
    }
  }
}

由於 donetrue,且 response 類型為 FirebaseProject, Google Cloud 專案現已提供 Firebase 服務。回應中還包含 其他有關新建立 FirebaseProject 的實用資訊,例如 projectNumber 及其預設的 resourcesOperation 會自動 完成後就會刪除

將 Firebase 應用程式新增至專案

許多不同的應用程式都能使用 FirebaseProject,包括 iOS、Android 和網頁 應用程式。本節將說明如何將 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 專案

你可以同時找到自己的analyticsAccountId和 在 Google Analytics 中使用 analyticsPropertyId 網站

呼叫 projects.addGoogleAnalytics 時:

  1. 第一項檢查可決定 Google Cloud 中是否有任何現有的資料串流 Analytics 資源會與帳戶中現有的 Firebase 應用程式相對應 FirebaseProject (根據與以下項目相關聯的 packageNamebundleId: 資料串流)。接著,視情況連結資料串流和應用程式。 請注意,這項自動連結功能僅適用於 Android 應用程式和 iOS 應用程式。

  2. 如果 Firebase 應用程式找不到任何對應的資料串流,新資料就會 每個來源的 Google Analytics 資源都會 Firebase 應用程式。請注意,系統一律會為網站佈建新的資料串流 應用程式 (即使應用程式先前已與應用程式中的資料串流建立關聯) Analytics 資源

如要進一步瞭解 Google Analytics 帳戶的階層和結構,請前往 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 類型為 analyticsDetailsFirebaseProject 已連結至指定的 Google Analytics 帳戶。 完成後會自動刪除「Operation」。

完成專案的預設位置 (選用)

如果您的 Firebase 專案會使用 Cloud Firestore、Cloud Storage,或是 App Engine 應用程式建立容器後,您就可以完成預設的 Google Cloud 平台 (GCP) 資源位置 以程式輔助的方式處理專案請注意,您也可以選取 這個 Firebase 控制台

設定這個地點前,請先參閱「選取您的 專案,以瞭解哪個位置最適合 。另請注意, projects.availableLocations 傳回專案的有效位置清單 屬於 Google Cloud 機構的一部分,那麼您的機構政策 可能會限制 都是有效的專案名稱

呼叫此 defaultLocation.finalize 方法會建立 App Engine 具備預設 Cloud Storage 應用程式 值區 位於 locationId 您在要求主體中提供的圖片

如果 「Project」已有 App Engine 應用程式,或 先前呼叫了 defaultLocation.finalize 方法。

提出要求

致電 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 會自動 完成後就會刪除