API 金鑰是一組不重複的字串,用於在與 Firebase 和 Google 服務互動時,將要求轉送至 Firebase 專案。本頁面說明 API 金鑰的基本資訊,以及在 Firebase 應用程式中使用及管理 API 金鑰的最佳做法。
如果您收到 Google Cloud 寄來的電子郵件,主旨為「Google Cloud 專案的 Google API 金鑰可公開存取」,且郵件中列出的 API 金鑰是您的 Firebase API 金鑰 ,請確認該 API 金鑰符合下列規定,才能安全地加入程式碼或設定檔。您可以在 Google Cloud 控制台的「APIs & Services」(API 和服務) >
「Credentials 」(憑證) 頁面
中驗證下列項目。
這是您用於 Firebase 應用程式的 API 金鑰,且「僅」 用於 Firebase 服務。這些按鍵通常稱為 Browser key (auto created by Firebase)、Android key (auto created by Firebase) 或 iOS key (auto created by Firebase)。
金鑰的「API 限制」許可清單中,包含所有必要的 Firebase 相關 API 。
「API 限制」許可清單中沒有 其他 API。具體來說,清單不應 包含 Generative Language API。
此外,請務必按照建議,為使用的 Firebase 產品採用 Firebase Security Rules 和 App Check 。
如要進一步瞭解 Firebase 的 API 金鑰,並查看常見問題清單,請參閱「瞭解如何使用及管理 Firebase 的 API 金鑰 」
重要事項 :在應用程式中呼叫 Gemini Developer API 時,絕對 不要在程式碼或設定檔中加入 API 金鑰。請務必避免公開。在 Google Cloud 控制台中,這個值會稱為 Gemini API Key 或 Gemini Developer API key (auto created by Firebase),且僅限於 Generative Language API。
本頁其餘部分將詳細說明 Firebase 的 API 金鑰,並列出這些金鑰的常見問題。
API 金鑰和 Firebase 的一般資訊
Firebase 的 API 金鑰與一般 API 金鑰不同
與 API 金鑰的一般用途不同,Firebase 服務的 API 金鑰並非 用於控管後端資源的存取權 ;這只能透過 Firebase Security Rules (控管哪些使用者 可以存取資源) 和 Firebase App Check (控管哪些應用程式 可以存取資源) 來完成。
通常,您需要嚴格保護 API 金鑰 (例如使用保管箱服務或將金鑰設為環境變數);不過,Firebase 服務的 API 金鑰可以包含在程式碼或簽入的設定檔中。
雖然 Firebase 服務的 API 金鑰可以安全地包含在程式碼中,但您仍應檢查並套用適當的限制 。
建立 API 金鑰
一個 Firebase 專案可以有多個 API 金鑰,但每個 API 金鑰只能與一個 Firebase 專案建立關聯。
當您執行下列任一操作時,Firebase 會自動為專案建立 API 金鑰:
建立 Firebase 專案 > 自動建立 Browser key
建立 Firebase Apple 應用程式 > 自動建立 iOS key
建立 Firebase Android 應用程式 > 自動建立 Android key
您也可以在 Google Cloud 控制台 中建立自己的 API 金鑰,例如用於開發或偵錯 。如要進一步瞭解何時建議採用這種做法,請參閱本頁後續內容。
尋找 API 金鑰
如要查看及管理專案的「所有」 API 金鑰,請前往
Google Cloud 控制台的「
APIs & Services 」(API 和服務) >「
Credentials 」(憑證) 頁面 。
您也可以在下列位置,查看哪組 API 金鑰會自動與 Firebase 應用程式配對 。根據預設,專案中相同平台 (Apple、Android 或網頁) 的所有 Firebase 應用程式,都會使用相同的 API 金鑰。
Firebase Apple 應用程式 :在 Firebase 設定檔 GoogleService-Info.plist 的 API_KEY 欄位中,找出自動比對的 API 金鑰。
Firebase Android 應用程式 :在 Firebase 設定檔 google-services.json 的 current_key 欄位中,找出自動比對的 API 金鑰。
Firebase 網頁應用程式 :在 Firebase 設定物件的 apiKey 欄位中,找出自動比對的 API 金鑰。
使用 API 金鑰
與 Firebase 或 Google 服務互動時,Firebase 的 API 金鑰可用來識別 Firebase 專案。具體來說,API 金鑰會將 API 要求與專案建立關聯,以便計算配額和帳單。也適合用來存取公開資料。
對絕大多數開發人員和用途而言,您不需要直接與這些 API 金鑰互動。 相反地,當應用程式呼叫 Firebase API,而該 API 需要行動或網頁用戶端提供的 API 金鑰時,應用程式會自動 在Firebase 設定 中尋找 API 金鑰。當您將應用程式連結至 Firebase 時,這項設定會新增至應用程式的程式碼集。
請注意,您可以使用其他機制 (例如 Firebase 選項或環境變數),在應用程式中提供應用程式的 API 金鑰。
此外,對於 Firebase 服務的部分 REST API,您可能需要將 API 金鑰的值明確傳遞至呼叫中,做為查詢參數。以下範例說明如何使用 Firebase Authentication API 提出要求:
https://identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken?key=API_KEY
檢查並對 API 金鑰套用適當限制
請務必確保專案中的「所有」 API 金鑰都設有適當的 API 限制和用量限制,詳情請參閱本節說明。
如果 API 金鑰用於正式版應用程式,請謹慎變更限制。變更正式版 API 金鑰的限制或用量上限前,請先在測試應用程式中,使用測試 API 金鑰 測試新設定。
查看自動加入 Firebase API 金鑰許可清單的 API
Firebase 在專案中建立 API 金鑰時,會自動為該金鑰新增「API 限制」 。 加入這份許可清單的 API 是與 Firebase 相關的 API,用戶端必須在呼叫時提供 API 金鑰。請注意,使用 Firebase 服務所需的大多數 API,實際上不需要加入 API 金鑰許可清單。
注意: 如果您用於 Firebase 服務的 API 金鑰設有「API 限制」,且收到 API_KEY_SERVICE_BLOCKED 或「Forbidden 403」錯誤,請確認該 API 金鑰已將所有必要 API 加入金鑰的「API 限制」許可清單 。
由於 Firebase 會為「所有」 Firebase 服務新增必要的 API,因此 API 金鑰的許可清單可能會包含您未使用的產品 API。您可以從許可清單中移除 API,但請務必小心,不要移除 Firebase 和您使用的 Firebase 服務所需的 API (請參閱 Firebase 相關 API 清單 ,瞭解各項服務/產品必須加入許可清單的 API)。否則,呼叫 Firebase 服務時會發生錯誤。
如果使用密碼型 Authentication ,請縮減配額
如果您使用密碼型 Firebase Authentication ,且有人取得您的 API 金鑰,只要Firebase Security Rules 保護 Firebase 專案的資料庫或 Cloud Storage 資料,對方就無法 存取這些資料。不過,他們可以使用您的 API 金鑰存取 Firebase 的驗證端點,並對您的專案提出驗證要求。
為降低有人濫用 API 金鑰嘗試蠻力攻擊的可能性,您可以縮減 identitytoolkit.googleapis.com 端點的預設配額,反映應用程式的正常預期流量。請注意,如果您縮減這項配額,而應用程式的使用者突然增加,可能會發生登入錯誤,直到您提高配額為止。您可以在 Google Cloud 控制台 中變更專案的 API 配額。
針對非 Firebase 服務,使用個別的受限制 API 金鑰
雖然 Firebase 服務使用的 API 金鑰通常不需要視為機密,但對於與其他 Google Cloud API 搭配使用的 API 金鑰,您應採取一些額外的預防措施。
如果您在任何平台上使用非 Firebase 服務/產品的 Google Cloud API,強烈建議您建立獨立且受限制的 API 金鑰,用於這些 API。如果 API 用於計費 Google Cloud 服務,這點就至關重要。特別是,請勿將 Gemini Developer API 加入公開 API 金鑰或用於其他服務的金鑰許可清單。
為非 Firebase API 使用獨立且受限制的 API 金鑰,您可以在必要時輪替或更換金鑰,並為 API 金鑰新增額外限制 ,而不會中斷 Firebase 服務的使用。
查看建立 API 專用金鑰的操作說明
以下操作說明介紹如何為名為 Super Service API 的假 API 建立獨立的受限 API 金鑰。
在 Google Cloud 控制台中,依序前往「APIs & Services」(API 和服務) >「Credentials」(憑證) 頁面 。如果出現系統提示,請選取您的專案。
在清單中,開啟每個現有 API 金鑰的編輯檢視畫面。
在「API 限制」 部分,選取「限制金鑰」 ,然後將您要讓 API 金鑰存取的所有 API 新增至清單。請務必不要 加入您要建立獨立 API 金鑰的 API (在本例中為 Super Service API)。
設定 API 金鑰的 API 限制時,您會明確宣告金鑰可存取的 API。**根據預設,如果「API 限制」 部分選取了「不限制金鑰」 ,則 API 金鑰可用於存取專案啟用的任何 API。**
現在,現有的 API 金鑰將「無法」 存取 Super Service API,但每個金鑰仍可用於您新增至其「API 限制」 清單的任何 API。
重要事項: 日後如啟用其他 API,請務必將這些 API 新增至適用 API 金鑰的「API 限制」 清單。
步驟 2:建立並使用新的 API 金鑰,以便存取 Super Service API
返回「APIs & Services」(API 和服務) >「Credentials」(憑證) 頁面 。確認 Firebase 專案仍處於選取狀態。
依序點選「建立憑證」>「API 金鑰」 。記下新的 API 金鑰,然後按一下「Restrict key」(限制金鑰) 。
在「API 限制」 部分,選取「限制金鑰」 ,然後在清單中僅 新增 Super Service API。
這組新的 API 金鑰只會授予 Super Service API 的存取權。
設定應用程式和服務,以便使用新的 API 金鑰。
使用環境專屬 API 金鑰
如果您為不同環境 (例如測試和正式環境) 設定不同的 Firebase 專案,請務必讓每個應用程式執行個體與對應的 Firebase 專案互動。舉例來說,測試應用程式執行個體不應與正式版 Firebase 專案通訊。這也表示測試應用程式必須使用與測試 Firebase 專案相關聯的 API 金鑰。
為減少將程式碼變更從開發階段推送到測試階段,再推送到正式環境時發生的問題,請勿在程式碼中加入 API 金鑰,而是將金鑰設為環境變數,或加入設定檔。
常見問題與疑難排解
常見問題
Firebase 服務的 API 金鑰預設是否會受到限制?
是,根據預設,Firebase 自動佈建的所有 API 金鑰 (用於 Firebase 相關 API),都會自動套用「API 限制」 。請參閱這份許可清單中的 Firebase 相關 API 清單 。
加入這份許可清單的 API 是 Firebase 服務從用戶端程式碼呼叫的 API,需要 API 金鑰才能識別 Firebase 專案或應用程式。請注意,使用 Firebase 服務所需的多數 API 實際上不需要加入 API 金鑰許可清單。
Firebase 會為「所有 」Firebase 服務新增必要的 API,因此 API 金鑰的
許可清單可能會包含您未使用的產品 API。您可以從許可清單中移除 API,但請務必小心,不要移除 Firebase 和您使用的 Firebase 服務所需的 API (請參閱 Firebase 相關 API 清單 ,瞭解各項服務/產品必須加入許可清單的 API)。否則,呼叫 Firebase 服務時會發生錯誤。
重要事項: 所有 Firebase 相關 API 都不會使用 API 金鑰做為呼叫 API 的授權 。API 呼叫傳遞的 API 金鑰僅用於識別 Firebase 專案或應用程式。
如要查看所有 API 金鑰和「API 限制」,請前往 Google Cloud 控制台的「APIs & Services 」(API 和服務) >「Credentials 」(憑證) 頁面。
請注意 Firebase 如何套用這些「API 限制」:
自 2024 年 5 月起,Firebase 自動佈建的所有新 API 金鑰,都會自動限定只能用於這份清單 中的 Firebase 相關 API。
2024 年 5 月,Firebase 先前自動佈建的所有現有無限制 API 金鑰,都將限定用於與 Firebase 相關的 API ,以及 專案目前啟用的任何 API。
Firebase 先前自動佈建的任何現有 API 金鑰,如果已受限制 ,則不會變更。
任何「非」 Firebase 自動佈建的現有 API 金鑰都不會變更。
重要事項: 如果您在任何平台上使用非 Firebase 服務/產品的 Google Cloud API,強烈建議您建立獨立且受限制的 API 金鑰 ,用於這些 API。
如何判斷哪個 API 金鑰與我的 Firebase 應用程式相關聯?
您可以透過下列任一選項,判斷與 Firebase 應用程式相關聯的 API 金鑰:
Firebase 控制台
依序前往「settings Settings 」>「General 」分頁標籤 。
向下捲動至「您的應用程式」 資訊卡,然後選取所需應用程式。
取得所需應用程式的 Firebase 設定檔/物件,然後找出其 API 金鑰:
Apple :下載 GoogleService-Info.plist,然後找出 API_KEY 欄位
Android :下載 google-services.json,找出所需應用程式的設定 (尋找套件名稱),然後找出 current_key 欄位
網頁 :選取「設定」 選項,然後找出 apiKey 欄位
Firebase CLI
執行下列指令,取得所需應用程式的 Firebase 設定檔/物件:
firebase apps:sdkconfig PLATFORM FIREBASE_APP_ID
PLATFORM (擇一):IOS | ANDROID | WEB
FIREBASE_APP_ID :Firebase 指派給 Firebase 應用程式的專屬 ID (查看應用程式 ID )
在應用程式輸出的 Firebase 設定中,找出 API 金鑰:
我可以在 Firebase 設定檔/物件中,為同一個 Firebase 應用程式列出兩組 API 金鑰嗎?
Firebase Apple 應用程式 :每個應用程式都有專屬設定檔,且只能列出一組 API 金鑰。
Firebase Android 應用程式 :Firebase 專案中的所有 Android 應用程式都會列在同一個設定檔中,且每個 應用程式只能列出一組 API 金鑰。不過,這個設定檔中的每個應用程式都可以列出不同的金鑰。
Firebase 網頁應用程式 :每個應用程式都有專屬的設定物件,且只能列出一組 API 金鑰。
不過,您可以 在一個應用程式中使用多個 API 金鑰。您必須提供機制,讓應用程式存取這些 API 金鑰,例如透過環境變數。存取其他 API 金鑰的機制,不能依賴 Firebase 設定檔/物件中列出的 API 金鑰。
Firebase 如何知道要將哪個 API 金鑰與應用程式配對 (例如在 Firebase 設定檔/物件中)?
首次取得應用程式的 Firebase 設定檔/物件 時,Firebase 會檢查專案中是否有任何現有 API 金鑰,其「應用程式限制」 與應用程式相符 (例如,與 Apple 應用程式相符的軟體包 ID)。
如果 Firebase 找不到任何相符的受限金鑰,就會在設定檔/物件中列出 Apple 應用程式的 iOS key、Android 應用程式的 Android key,以及網頁應用程式的 Browser key (假設這些金鑰存在,且沒有任何「應用程式限制」導致無法與該應用程式比對)。
我可以手動從 Firebase 設定檔/物件中刪除 API 金鑰和欄位嗎?
可以,您可以手動從設定檔/物件中刪除 API 金鑰。不過,您必須提供其他機制,讓應用程式存取 API 金鑰 (例如透過環境變數)。否則,對 Firebase 服務的任何呼叫都會失敗。
我可以手動編輯 Firebase 設定檔/物件,使用不同的 API 金鑰嗎?
可以,您可以手動編輯設定檔/物件,將不同的 API 金鑰與應用程式建立關聯。
您可以手動編輯 Firebase 設定檔/物件中的 API 金鑰,但通常不建議這麼做 。這會增加存取 Firebase 服務時發生問題的機率。不過,如果您選擇編輯設定檔/物件,請按照下列步驟操作:
確認 API 金鑰的範圍限定為設定檔/物件中列出的專案 ID。
確認沒有任何「API 金鑰限制」 會導致 API 金鑰無法與該應用程式搭配使用。
確認 API 金鑰已套用適當的「API 限制」。請參閱與 Firebase 相關的 API 清單 ,瞭解各項 Firebase 服務/產品需要加入許可清單的 API。
請注意,如果您從 Firebase 控制台重新取得應用程式的設定檔/物件 ,系統一律會列出 Firebase 自動與該應用程式比對 的 API 金鑰。因此,您需要視需要重複手動編輯。
我可以將 API 金鑰從一個 Firebase 專案移至另一個專案嗎?
不行,API 金鑰只能識別特定專案,無法移至其他專案。
如果刪除 Google Cloud 控制台中列出的 API 金鑰,會發生什麼事?
如果刪除應用程式使用的 API 金鑰,該應用程式的 API 呼叫就會失敗。您可能會收到報告、電子郵件或錯誤訊息,指出您嘗試使用的 API 金鑰無效。
API 金鑰一經刪除即無法復原。
Firebase API 金鑰的「API 限制」許可清單中,需要哪些 API?
如果是 Firebase API 金鑰,只有在用戶端呼叫時需要提供 API 金鑰的 API,才需要加入金鑰的「API 限制」許可清單。請注意,只有極少數 Firebase 相關 API 有這項要求。專案中啟用的 Firebase 相關 API,大多不必加入金鑰的「API 限制」許可清單。
重要事項: 所有 Firebase 相關 API 都不會使用 API 金鑰做為呼叫 API 的授權 。API 呼叫傳遞的 API 金鑰僅用於識別 Firebase 專案或應用程式。
請參閱下表,判斷哪些 Firebase 相關 API 必須加入 Firebase API 金鑰的「API 限制」許可清單。請注意,Firebase API 金鑰只能用於 Firebase 服務。進一步瞭解如何為特定類型的 API 建立獨立的受限制 API 金鑰 。
如要查看及管理專案的 API 金鑰,請前往 Google Cloud 控制台的「APIs & Services」(API 和服務) >「Credentials」(憑證) 頁面 。
注意: 如果您在嘗試呼叫 Firebase 相關 API 時收到 API_KEY_SERVICE_BLOCKED 或 Forbidden 403 錯誤,且您使用的 API 金鑰已具備本表列出的所有必要 API,請與 Firebase 支援團隊 聯絡。
API 名稱 (服務名稱)
API 顯示名稱
相關聯的 Firebase 服務/產品
firebase.googleapis.com
Firebase Management API
所有產品
logging.googleapis.com
Cloud Logging API
所有產品
firebaseinstallations.googleapis.com
Firebase Installations API
Cloud Messaging 、Crashlytics 、In-App Messaging 、Performance Monitoring 、Remote Config 、Firebase ML
firebaseappcheck.googleapis.com
Firebase App Check API
App Check
firebaseappdistribution.googleapis.com
Firebase App Distribution API
App Distribution
firebaseapptesters.googleapis.com
Firebase App Testers API
App Distribution
identitytoolkit.googleapis.com
Identity Toolkit API
Authentication
securetoken.googleapis.com
Token Service API
Authentication
firebaserules.googleapis.com *
Firebase Rules API
Cloud Firestore 、Cloud Storage 、Realtime Database
datastore.googleapis.com
Cloud Datastore API
Cloud Firestore
firestore.googleapis.com
Google Cloud Firestore API
Cloud Firestore
fcmregistrations.googleapis.com
FCM Registration API
Cloud Messaging
firebasestorage.googleapis.com
Cloud Storage for Firebase API
Cloud Storage
firebasedynamiclinks.googleapis.com
Firebase Dynamic Links API
Dynamic Links
firebasehosting.googleapis.com *
Firebase Hosting API
Hosting
firebaseinappmessaging.googleapis.com
Firebase In-App Messaging API
In-App Messaging
firebaseml.googleapis.com
Firebase ML API
Firebase ML
mlkit.googleapis.com **
ML Kit API
Firebase ML
mobilecrashreporting.googleapis.com
Mobile Crash Reporting API
Performance Monitoring
play.googleapis.com
Google Play Android Developer API
Performance Monitoring
firebaseremoteconfig.googleapis.com
Firebase Remote Config API
Performance Monitoring 、Remote Config
firebaseremoteconfigrealtime.googleapis.com
Firebase Remote Config Realtime API
Performance Monitoring 、Remote Config
cloudconfig.googleapis.com **
不適用
Remote Config
firebasedatabase.googleapis.com *
Firebase Realtime Database API
Realtime Database
firebasevertexai.googleapis.com
Firebase AI Logic API
Firebase AI Logic 用戶端 SDK
fpnv.googleapis.com
Firebase Phone Number Verification API
Firebase Phone Number Verification
* 只有在透過第三方工具使用 Firebase API 金鑰,或直接透過 REST 存取 Firebase 服務/產品時,才需要執行這項操作。
** 舊版產品 SDK 的必要屬性。如果您使用的是最新版 SDK,則不必將 API 加入金鑰許可清單。
疑難排解
如何修正 API_KEY_SERVICE_BLOCKED 或 Forbidden 403 錯誤,指出對這個 API 的要求遭到封鎖?
如果收到 API_KEY_SERVICE_BLOCKED 錯誤或類似下方的錯誤,請按照本常見問題中的指引操作:
Forbidden: 403 POST https://example-service.googleapis.com/method: Requests to this API example-service.googleapis.com method google.example-service.rest.method are blocked.
應用程式用來呼叫 API 的 API 金鑰可能已套用 API 限制 ,且金鑰的許可清單不包含該 API。
如何修正這項錯誤?「無法從伺服器擷取這個 Firebase 應用程式的評估 ID。」
網頁應用程式使用的 API 金鑰可能已套用「API 限制」 。如果是這種情況,請確認 Firebase Management API 位於允許的 API 清單中。
我收到電子郵件或錯誤訊息,指出 API 金鑰無效。發生了什麼事?該如何修正這個問題?
以下是 API 金鑰無效的幾個常見原因:
API 金鑰已套用「API 金鑰限制」 ,因此與嘗試使用金鑰的應用程式不相符 (「應用程式限制」),或無法用於呼叫的 API (「API 限制」)。
API 金鑰已從 Google Cloud 控制台的專案中刪除。
API 金鑰並非為應用程式 Firebase 設定檔/物件中列出的專案 ID 建立。
如要修正這個問題,其中一種方法是取得應用程式 Firebase 設定檔/物件的更新版本 ,然後將舊的設定檔/物件替換 為新的更新檔案/物件。Firebase 會先檢查列出的 API 金鑰是否與應用程式相符 ,然後才會傳送設定檔供下載,或在Firebase 控制台中顯示設定物件。