使用 Management 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 專案啟用 Management REST API

如果您尚未啟用 Firebase Management API,請先啟用這項 API,再與 Google Cloud 專案搭配使用。

  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 從服務帳戶憑證取得存取權權杖:

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 呼叫的回應主體:

{
  "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 和預設 resources。完成後,Operation 會自動刪除。

將 Firebase 應用程式新增至專案

許多不同的應用程式都可以使用 FirebaseProject,包括 iOS、Android 和網頁應用程式。在本節中,您將瞭解如何透過程式輔助方式,將 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 呼叫的回應主體:

{
  "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 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」。

您可以透過程式設計將現有的 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 應用程式相符的資料串流,就會為每個 Firebase 應用程式在 Google Analytics 資源中佈建新的資料串流。請注意,即使網頁應用程式先前已與 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,且 responseanalyticsDetails 類型為止。如果作業失敗,其 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 會在完成後自動刪除。