Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

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

Firebase Management REST API支持以編程方式設置和管理Firebase項目,包括項目的Firebase資源和Firebase Apps。

本概述介紹了將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項目一起使用。

  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"

視窗

使用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字段提供了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"
    }
  }
}

由於donetrue並且response類型為FirebaseProject ,因此Google Cloud項目現在具有Firebase服務。該響應還包含有關您新創建的FirebaseProject其他有用信息,例如其projectNumber和其默認resourcesOperation完成後將自動刪除。

將Firebase應用添加到您的項目

許多不同的應用程序都可以使用FirebaseProject ,包括iOS,Android和Web應用程序。在本部分中,您將學習如何以編程方式將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且其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"
  }
}

由於donetrueresponse類型為AndroidApp ,因此FirebaseProject現在具有AndroidApp 。該響應還包含有關您新創建的Firebase Android應用程序的其他有用信息,例如唯一的Firebase appIdOperation完成後將自動刪除。

添加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. 第一次檢查確定是否有任何現有的數據在谷歌分析屬性對應流到任何現有的火力地堡應用程序在你的FirebaseProject (基於packageNamebundleId與數據流相關)。然後,在適用時,將數據流和應用程序鏈接在一起。請注意,此自動鏈接僅適用於Android應用程序和iOS應用程序。

  2. 如果找不到您的Firebase應用程序的相應數據流,則會在Google Analytics(分析)屬性中為每個Firebase應用程序設置新的數據流。請注意,即使先前已將新數據流與Analytics(分析)屬性中的數據流相關聯,也始終為該Web App設置新數據流。

在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返回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上調用operations.get ,直到done值為true且其response的類型為google.protobuf.Empty 。如果操作失敗,則響應正文error將為google.rpc.Status類型。 Operation完成後將自動刪除。