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

Firebase Management REST API 可讓您以程式輔助方式設定及管理 Firebase 專案,包括專案的 Firebase 資源和 Firebase 應用程式。

本總覽說明將 Firebase 資源和應用程式新增至現有Google Cloud專案的一般工作流程,該專案目前尚未使用 Firebase 服務。

如要瞭解特定主題,請直接前往以下章節:

按照本頁的任何步驟操作前,請務必啟用 API。

如要瞭解如何管理 Firebase Management API 的存取權,請參閱 Cloud Identity Access Management (IAM) API 說明文件。

事前準備

開始前,請先為 Google Cloud 專案啟用 Management API,並產生存取權杖。

為 Google Cloud 專案啟用 Management REST API

如果尚未啟用,請先啟用 Google Cloud 專案的 Firebase Management API。

  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"

Windows

使用 PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\your\service-account-file.json"

接著,使用 Firebase Admin SDK 從服務帳戶憑證取得存取權杖:

import { initializeApp, applicationDefault } from "firebase-admin/app";

initializeApp();

async function getAccessToken() {
  try {
    const accessToken = await applicationDefault().getAccessToken();
    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 欄位提供專案的全域不重複資源名稱。

您可以從回應中列出的任何 project值,availableProjects.list將 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"
    }
  }
}

由於 done 是 true,且 response 類型為 FirebaseProject,因此 Google Cloud 專案現在有 Firebase 服務。回覆也包含新建立 FirebaseProject 的其他實用資訊,例如 projectNumber 和預設 resources。Operation會在完成後自動刪除。

將 Firebase 應用程式新增至專案

許多不同應用程式都可以使用 FirebaseProject,包括 iOS、Android 和網頁應用程式。本節將說明如何以程式輔助方式,將 Firebase 應用程式新增至現有專案。FirebaseProject請注意,您也可以在 Firebase 控制台中,將 Firebase 應用程式新增至現有的 Firebase 專案。

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

iOS+

您可以將 Firebase iOS 應用程式新增至現有的 Firebase 專案。

提出要求

呼叫 projects.iosApps.create。 以下說明如何建構要求主體:

  • 必要:

    • bundleId:iOS 應用程式的標準軟體包 ID,會顯示在 iOS App Store 中。
  • 選用,但建議使用:

    • displayName:使用者指派的應用程式顯示名稱。這個值有助於日後在 Firebase 控制台中尋找應用程式。

    • appStoreId:Apple 自動產生並指派給應用程式的 Apple ID。如果 Apple 已指派 appStoreId,請指定該值。

在範例的要求主體中,我們只會使用 displayName 和 bundleId:

{
  "displayName": "My Firebase iOS App",
  "bundleId": "com.firebase.ios"
}

以下是 Node.js 的範例,說明如何將 Firebase iOS 應用程式新增至 Firebase 專案:

const fetch = require('node-fetch');

async function addIosApp(projectId, displayName, bundleId) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/iosApps';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'displayName': displayName,
      'bundleId': bundleId
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

結果

呼叫 projects.iosApps.create 的結果為 Operation。您必須先成功執行這項作業,才能為專案呼叫其他 Firebase 相關端點。

如要檢查作業是否成功,您可以對作業呼叫 operations.get,直到 done 的值為 true,且 response 的類型為 IosApp 為止。如果作業失敗,其 error 會設為 google.rpc.Status。

以下是 operations.get 呼叫的回應主體:

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.IosApp",
    "name": "projects/first-cloud-project/iosApps/...",
    "appId": "...",
    "displayName": "My Firebase iOS App",
    "projectId": "first-cloud-project",
    "bundleId": "com.firebase.ios"
  }
}

由於 done 是 true,而 response 類型是 IosApp,因此 FirebaseProject 現在具有 IosApp。回應中也會包含新建立的 Firebase iOS 應用程式的其他實用資訊,例如專屬的 Firebase appId。Operation會在完成後自動刪除。

Android

您可以將 Firebase Android 應用程式新增至現有的 Firebase 專案。

提出要求

呼叫 projects.androidApps.create。 以下說明如何建構要求主體:

  • 必要:

    • packageName:Android 應用程式的標準套件名稱,會顯示在 Google Play 管理中心。
  • 選用,但建議使用:

    • displayName:使用者指派的應用程式顯示名稱。這個值有助於日後在 Firebase 控制台中尋找應用程式。

在範例的要求主體中,我們會使用 packageName 和 displayName:

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

由於 done 是 true,而 response 類型是 AndroidApp,因此 FirebaseProject 現在具有 AndroidApp。回應中也會包含新建立的 Firebase Android 應用程式的其他實用資訊,例如專屬的 Firebase appId。Operation會在完成後自動刪除。

新增 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。

網頁版

您可以將 Firebase 網頁應用程式新增至現有的 Firebase 專案。

提出要求

呼叫 projects.webApps.create。 以下說明如何建構要求主體:

  • 選用:

  • 不建議使用:

    • appUrls:應用程式的完整網址。如果 Firebase 網頁應用程式與 Firebase Hosting 網站建立關聯,Firebase 會自動填入這些欄位,因此請在要求主體中將這些欄位留空。

在我們的範例中,我們只會在要求主體中指定 displayName:

{
  "displayName": "My Firebase Web App"
}

以下是 Node.js 的範例,說明如何將 Firebase 網頁應用程式新增至 Firebase 專案:

const fetch = require('node-fetch');

async function addWebApp(projectId, displayName) {
  const accessToken = getAccessToken();
  const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/webApps';
  const options = {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
    },
    body: JSON.stringify({
      'displayName': displayName
    }),
  };

  try {
    const rawResponse = await fetch(uri, options);
    const resp = await rawResponse.json();
    console.log(resp);
  } catch(err) {
    console.error(err['message']);
  }
}

結果

呼叫 projects.webApps.create 的結果為 Operation。您必須先成功執行這項作業,才能為專案呼叫其他 Firebase 相關端點。

如要檢查作業是否成功,您可以對作業呼叫 operations.get,直到 done 的值為 true,且 response 的類型為 WebApp 為止。如果作業失敗,其 error 會設為 google.rpc.Status。

以下是 operations.get 呼叫的回應主體:

{
  "name": "operations/...",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.firebase.service.v1beta1.WebApp",
    "name": "projects/first-cloud-project/webApps/...",
    "appId": "...",
    "displayName": "My Firebase Web App",
    "projectId": "first-cloud-project"
  }
}

由於 done 為 true,且 response 類型為 WebApp,因此 FirebaseProject 現在具有 WebApp。回應中也會包含新建立的 Firebase 網頁應用程式的其他實用資訊,例如專屬的 Firebase appId。Operation會在完成後自動刪除。

您可以透過程式輔助方式,將現有的 Google Analytics 帳戶連結至現有的FirebaseProject。請注意,您也可以在「專案設定」的「整合」分頁中,將現有 Firebase 專案連結至 Google Analytics。

呼叫 projects.addGoogleAnalytics 時需要 analytics_resource,可以是 analyticsAccountId 或 analyticsPropertyId:

  • 指定現有 analyticsAccountId,在指定帳戶中佈建新的 Google Analytics 資源,並將新資源與 Firebase 專案建立關聯。

  • 指定現有 analyticsPropertyId,將 Google Analytics 資源與 Firebase 專案建立關聯。

您可以在 Google Analytics 網站上找到這兩項程式碼片段,以及任何現有的程式碼片段。analyticsAccountIdanalyticsPropertyId

通話時間projects.addGoogleAnalytics:

  1. 第一次檢查會判斷 Google Analytics 資源中是否有任何現有資料串流,對應至 FirebaseProject中的任何現有 Firebase 應用程式 (根據與資料串流相關聯的 packageName 或 bundleId)。然後視情況連結資料串流和應用程式。請注意,這項自動連結功能僅適用於 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 類型為 analyticsDetails,因此 FirebaseProject 現在已連結至指定的 Google Analytics 帳戶。Operation會在完成後自動刪除。