指南)
開發(fā)工具后端【免費下載鏈接】firebase-js-sdkFirebase Javascript SDK項目地址https://gitcode.com/gh_mirrors/fi/firebase-js-sdk點擊查看免費下載FirebaseOptions是 firebase-js-sdk 中定義 Firebase 應用配置的核心接口承載著客戶端與服務端通信所需的全部項目標識參數(shù)。本文以倉庫內(nèi)官方 API 文檔為基礎結合firebase/app包的真實源碼與測試用例系統(tǒng)講解該接口 8 個屬性的含義、用途、初始化方式與底層校驗邏輯幫助你在 Web 應用中正確配置并初始化 Firebase。FirebaseOptions 是什么在 firebase-js-sdk 中FirebaseOptions源碼定義見 packages/app/src/public-types.ts是 Firebase 配置對象它包含一組服務與 Firebase 服務器 API 成功通信、以及將客戶端數(shù)據(jù)關聯(lián)到你的 Firebase 項目和 Firebase 應用所必需的參數(shù)。通常這個對象在項目搭建時由 Firebase 控制臺Firebase console填充生成。其接口簽名如下export interface FirebaseOptions該接口的官方 API 參考文檔位于 docs-devsite/app.firebaseoptions.md所有屬性均為可選以?標記但從實用角度看絕大多數(shù)服務都依賴其中若干必填字段才能正常工作。FirebaseOptions 的 8 個屬性詳解FirebaseOptions共包含 8 個字符串類型屬性官方文檔屬性表總結如下屬性類型說明apiKeystring用于調(diào)用某些無需訪問私有用戶數(shù)據(jù)的 API 的加密字符串a(chǎn)ppIdstring應用的唯一標識符authDomainstring項目 ID 對應的 Auth 域名databaseURLstring默認 Realtime Database URLmeasurementIdstring啟用 Analytics 并注冊 Web 應用時自動創(chuàng)建的 IDmessagingSenderIdstring用于標識可向客戶端應用發(fā)送 FCM 消息的發(fā)送方的唯一數(shù)值projectIdstring項目在所有 Firebase 與 Google Cloud 中的唯一標識符storageBucketstring默認 Cloud Storage 存儲桶名稱apiKeyAPI 調(diào)用加密密鑰apiKey是一個加密字符串用于調(diào)用那些不需要訪問私有用戶數(shù)據(jù)的 API示例值形如AIzaSyDOCAbC123dEf456GhI789jKl012-MnO。apiKey?: string;需要特別澄清apiKey僅用于將請求與你的 Firebase 項目關聯(lián)它不是安全憑據(jù)不應被當作防止未授權訪問的手段。它通常在瀏覽器端公開可見Firebase 的真正安全邊界來自安全規(guī)則如 Firestore 安全規(guī)則、Storage 規(guī)則與 Firebase Authentication。appId應用唯一標識appId是應用的唯一標識符。當你在 Firebase 控制臺注冊一個 Web 應用時系統(tǒng)會為這個應用生成專屬的appId。SDK 內(nèi)部如 Analytics、Messaging會使用它來區(qū)分不同的應用實例從而將遙測數(shù)據(jù)與具體應用正確關聯(lián)。appId?: string;authDomainAuth 域名authDomain是項目 ID 對應的 Auth 域名格式通常為YOUR_PROJECT_ID.firebaseapp.com。在使用 Firebase Authentication 的 popup/redirect 登錄流程時該域名用于承載 OAuth 跳轉與憑據(jù)校驗頁面。authDomain?: string;databaseURLRealtime Database 默認地址databaseURL是默認 Realtime Database 的 URL格式形如https://YOUR_PROJECT_ID-default-rtdb.firebaseio.com舊格式為https://YOUR_APP.firebaseio.com。使用firebase/database時SDK 會讀取該字段定位數(shù)據(jù)庫實例。databaseURL?: string;measurementIdAnalytics 測量 IDmeasurementId是在 Firebase 項目中啟用 Analytics 并注冊 Web 應用時自動創(chuàng)建的 ID。需要留意其版本約束在 SDK 7.20.0 及更高版本中該參數(shù)為可選也就是說舊版本可能要求必須提供。measurementId?: string;messagingSenderIdFCM 發(fā)送方 IDmessagingSenderId是一個唯一數(shù)值用于標識每個可以向客戶端應用發(fā)送 Firebase Cloud MessagingFCM消息的發(fā)送方。Firebase Messaging 服務端向設備推送消息時依賴該 ID 定位正確的發(fā)送方項目。messagingSenderId?: string;projectId跨 Firebase 與 Google Cloud 的項目標識projectId是項目在所有 Firebase 和 Google Cloud 服務中的唯一標識符。它是最核心的字段之一Firestore、Storage、Functions、Data Connect 等大量服務都會依據(jù)projectId定位后端資源例如 Firestore 數(shù)據(jù)庫名、Cloud Functions 區(qū)域等。projectId?: string;storageBucket默認 Cloud Storage 桶名storageBucket是默認 Cloud Storage 存儲桶的名稱格式通常為YOUR_PROJECT_ID.appspot.com。使用firebase/storage時SDK 默認在該桶下讀寫對象。storageBucket?: string;如何獲取與使用 FirebaseOptionsFirebaseOptions通常由 Firebase 控制臺在項目搭建時自動生成。在控制臺項目設置Project settings中為你的 Web 應用添加 SDK 后控制臺會給出類似如下的配置對象const firebaseConfig { apiKey: AIzaSyDOCAbC123dEf456GhI789jKl012-MnO, authDomain: my-project-id.firebaseapp.com, databaseURL: https://my-project-id-default-rtdb.firebaseio.com, projectId: my-project-id, storageBucket: my-project-id.appspot.com, messagingSenderId: 123456789, appId: 1:123456789:web:abcdef1234567890, measurementId: G-ABC12345 };拿到配置后通過initializeApp()將其傳入即可初始化 Firebase 應用。initializeApp是firebase/app包對外暴露的核心 API完整重載與實現(xiàn)見 packages/app/src/api.tsimport { initializeApp } from firebase/app; const app initializeApp(firebaseConfig);初始化時的底層處理從源碼看initializeApp(options)會經(jīng)歷以下關鍵步驟對應 packages/app/src/api.ts應用命名若未顯式傳入應用名則使用默認名[DEFAULT]該常量定義于 packages/app/src/constants.ts配置補齊automaticDataCollectionEnabled默認置為true空配置保護如果既沒傳options又無法從環(huán)境默認值獲取配置則拋出NO_OPTIONS錯誤冪等復用如果已存在同名應用且新舊options與config深度相等deepEqual則直接返回既有實例若配置不同則拋出DUPLICATE_APP錯誤提示該應用名已存在但配置不同組件容器構建為應用創(chuàng)建ComponentContainer注冊各服務組件最終實例化FirebaseAppImpl見 packages/app/src/firebaseApp.ts。FirebaseAppImpl構造函數(shù)會對傳入的 options 做一次淺拷貝this._options { ...options }并通過get options()對外只讀暴露packages/app/src/firebaseApp.ts保證配置對象在應用生命周期內(nèi)不被外部意外修改。重復初始化的冪等行為驗證倉庫測試 packages/app/src/api.test.ts 對上述行為做了明確驗證相同 options 與 config 重復調(diào)用initializeApp返回同一個實例對默認應用傳入不同 options 時拋錯信息形如[DEFAULT].*exists with different options.*test1.*test2對命名應用傳入不同 options 時拋錯信息形如MyApp.*exists with different options.*test1.*test2。同時初始化多個 Firebase 應用FirebaseOptions也可用于在同一頁面初始化多個 Firebase 項目。通過第二個參數(shù)傳入應用名即可import { initializeApp } from firebase/app; // 默認應用 const app initializeApp({ apiKey: ..., projectId: project-A, appId: 1:...:web:aaaa }); // 命名應用 const otherApp initializeApp( { apiKey: ..., projectId: project-B, storageBucket: ...appspot.com }, otherApp );initializeApp支持三種調(diào)用形態(tài)packages/app/src/api.tsinitializeApp(options: FirebaseOptions, name?: string): FirebaseApp; initializeApp(options: FirebaseOptions, config?: FirebaseAppSettings): FirebaseApp; initializeApp(): FirebaseApp;第三種無參形態(tài)依賴環(huán)境默認配置見下文自動初始化。應用名必須是非空字符串否則拋出BAD_APP_NAME錯誤。服務端場景initializeServerApp 與 FirebaseOptions除了瀏覽器端的initializeAppFirebaseOptions同樣服務于服務端渲染場景的initializeServerApppackages/app/src/api.ts。FirebaseServerApp專為 SSR 環(huán)境設計在瀏覽器環(huán)境中調(diào)用會直接拋出INVALID_SERVER_APP_ENVIRONMENT錯誤。典型用法如下源碼注釋示例packages/app/src/api.tsinitializeServerApp({ apiKey: AIza...., // Auth / General Use authDomain: YOUR_APP.firebaseapp.com, // Auth with popup/redirect databaseURL: https://YOUR_APP.firebaseio.com, // Realtime Database storageBucket: YOUR_APP.appspot.com, // Storage messagingSenderId: 123456789 // Cloud Messaging }, { authIdToken: Your Auth ID Token });從源碼可以看到initializeServerApp在服務端還支持兩種特殊輸入形態(tài)直接傳入一個已初始化的FirebaseApp取其.options屬性復用配置或傳入FirebaseServerAppSettings。其應用名由配置對象內(nèi)容經(jīng)哈希計算得出Math.imul(31, hash)累加哈希packages/app/src/api.ts相同配置的 ServerApp 會被冪等復用。自動獲取默認配置FIREBASE_DEFAULTS機制FirebaseOptions除了通過initializeApp顯式傳入外還可以借助getDefaultAppConfig()從環(huán)境自動讀取。該函數(shù)定義于 packages/util/src/defaults.ts其實現(xiàn)是export const getDefaultAppConfig (): Recordstring, string | undefined getDefaults()?.config;getDefaults()會按優(yōu)先級依次從以下來源讀取__FIREBASE_DEFAULTS__對象packages/util/src/defaults.ts構建期生成的默認值postinstallglobalThis.__FIREBASE_DEFAULTS__全局對象環(huán)境變量process.env.__FIREBASE_DEFAULTS__或其路徑變量__FIREBASE_DEFAULTS_PATH__指向的 JSON 文件Cookie 中的__FIREBASE_DEFAULTS__。因此在 Node.js 服務端場景中你可以在環(huán)境變量中以 JSON 形式注入完整的 FirebaseOptions// 環(huán)境變量示例 process.env.__FIREBASE_DEFAULTS__ JSON.stringify({ config: { apiKey: AIzaSy..., authDomain: my-project.firebaseapp.com, projectId: my-project, appId: 1:123456789:web:abcdef } });之后直接調(diào)用initializeApp()無參形態(tài)或getApp()即可自動完成初始化——這一點在initializeApp的options || getDefaultAppConfig()packages/app/src/api.ts與getApp的默認應用自動初始化邏輯packages/app/src/api.ts中均有體現(xiàn)。使用注意事項綜合官方文檔與源碼實現(xiàn)使用FirebaseOptions時有幾點值得注意apiKey 非安全憑據(jù)它僅用于關聯(lián)項目可公開出現(xiàn)在前端代碼中真正的訪問控制必須依賴安全規(guī)則與用戶認證字段按需提供雖然接口層面所有屬性都可選但實際按服務而定——只用 Realtime Database 時databaseURL必不可少只用 Cloud Storage 時storageBucket必不可少?;煊胕nitializeApp與舊版 compat SDK 時同樣遵守此規(guī)則避免重復初始化沖突同一個應用名如默認的[DEFAULT]只能綁定一套配置第二次以不同 options 初始化會拋出DUPLICATE_APP錯誤版本差異measurementId在 7.20.0 及更高版本中為可選舊版本集成時建議始終提供配置來源多樣化除硬編碼在代碼中外瀏覽器端可用globalThis.__FIREBASE_DEFAULTS__、Node.js 端可用環(huán)境變量注入便于在不同環(huán)境間復用同一套配置而不污染源碼。參考資源接口官方文檔docs-devsite/app.firebaseoptions.md接口類型定義packages/app/src/public-types.ts初始化實現(xiàn)packages/app/src/api.ts應用實例實現(xiàn)packages/app/src/firebaseApp.ts默認配置獲取packages/util/src/defaults.ts相關測試packages/app/src/api.test.ts贊分享開發(fā)工具后端【免費下載鏈接】firebase-js-sdkFirebase Javascript SDK項目地址https://gitcode.com/gh_mirrors/fi/firebase-js-sdk點擊查看免費下載相關推薦Firebase AI Logicfirebase-js-sdkCountTokensRequest 接口詳解Token 計數(shù)請求的完整配置指南Firebase AI Logicfirebase js sdkCountTokensRequest 接口詳解Token 計數(shù)請求的完整配置指南 Coun開發(fā)工具后端firebase-js-sdk 的 Firestore Litefirebase/firestore-lite公共 API 全面解析與實戰(zhàn)指南firebase js sdk 的 Firestore Litefirebase/firestore lite公共 API 全面解析與實戰(zhàn)指南 導讀 本開發(fā)工具后端Firebase AI SDK 中 StartChatParams 接口全解析多輪對話會話的完整參數(shù)配置指南Firebase AI SDK 中 StartChatParams 接口全解析多輪對話會話的完整參數(shù)配置指南 StartChatParams 是 Fireba開發(fā)工具后端上一篇Blender3mfFormat重塑3D打印工作流的突破性工具下一篇突破3D打印格式壁壘Blender3mfFormat重構設計到制造的無縫工作流創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考