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