使用 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,您需要為 Google Cloud 專案啟用該 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 從服務帳戶憑證取得存取權權杖:

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,且其 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"
    }
  }
}

由於 donetrueresponse 類型為 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 應用程式的資料串流,系統就會在 Google Analytics 資源中,為每個 Firebase 應用程式佈建新的資料串流。請注意,系統一律會為網頁應用程式佈建新的資料串流,即使先前已經與 Analytics 資源中的資料串流建立關聯也一樣。

請參閱 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,且 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