### Intro - 本影片介紹 Firebase 專案與 Firebase App 之間的關係與結構 - 不涵蓋 Firebase 設定教學,僅針對概念與架構進行說明 - 適合希望深入了解 Firebase 專案如何與應用整合的人 --- ### Firebase 專案是什麼 ![image](https://hackmd.io/_uploads/ByFtJLBRyl.png) ![image](https://hackmd.io/_uploads/HJHqyUBA1g.png) ![image](https://hackmd.io/_uploads/ryajJUH0yg.png) - Firebase 是 Google 的應用開發平台,提供儲存、推播、分析等功能 - 專案是用來整合與設定所有 Firebase 產品的地方 - 可為不同成員設定角色(擁有者、編輯者、檢視者) - 支援更細緻的角色管理,例如只讓某些成員管理資料庫或推播 - 管理計費設定與服務整合(如發送警報) - Firebase 專案本質上是 Google Cloud 專案,啟用 Firebase 服務後成為 Firebase 專案 - 可在 Google Cloud Console 中檢視並管理 Firebase 專案 --- ### Firebase App 是什麼 ![image](https://hackmd.io/_uploads/r1UC1USC1x.png) ![image](https://hackmd.io/_uploads/SyRygUHCyl.png) ![image](https://hackmd.io/_uploads/B1EexIHR1l.png) ![image](https://hackmd.io/_uploads/SyZ-eIrRJx.png) - Firebase App 是指你註冊在 Firebase 專案內的個別平台應用(如 Android、iOS、Web) - 同一專案下的所有 App 共享相同的資源,如資料庫、使用者、分析資料 - 適用於不同平台但為同一業務用途的應用程式 - 若應用屬於不同業務用途,應註冊於不同專案中 - 同一專案的 App 也共享與外部工具(如 Slack、Jira)的整合設定 --- ### Firebase 團隊建議的最佳實踐 ![image](https://hackmd.io/_uploads/S1Y7gLSCkl.png) ![image](https://hackmd.io/_uploads/rkT4lLSRyg.png) ![image](https://hackmd.io/_uploads/r15Se8SAyl.png) ![image](https://hackmd.io/_uploads/ryYyWIHCkl.png) ![image](https://hackmd.io/_uploads/SJkx-Ur0kg.png) ![image](https://hackmd.io/_uploads/B1z-WUBC1e.png) ![image](https://hackmd.io/_uploads/BkJ7ZIrR1l.png) - 同一 Firebase 專案應只包含同一業務用途的應用 - 同一 App 不同平台應放在同一專案以共享用戶資料 - 同平台的免費版與付費版若屬同一應用也可放在同一專案 - 若需隔離分析資料與權限,應將應用放在不同專案中 - 若使用不同專案又需共用登入,需自行實作自訂身份驗證(Custom Auth) - 若進行白標(White-label)或客製應用,應為每個品牌建立不同專案 - 一個經驗法則:一個 Logo 建一個專案 - 完全不相關的應用(如聊天 App 與遊戲)應放在不同專案以避免資料洩露 - 分離專案也有助於避免超出 Firebase 專案的配額限制 --- ### 遵守最佳實踐的好處 - 相同專案中的 App 共用資源,只需設定一次即可應用於所有平台 - 安全性規則(Security Rules)統一管理,避免重複設定 - 所有服務集中於同一控制台,更容易監控開發與運行狀態 - 可跨平台查看分析資料、建立並比較使用者區段 - 使用者能在不同平台之間無縫存取相同帳號與資料 - 免費版與付費版若在同一專案,升級後資料可持續使用無需轉移 --- ### 計劃與收費機制 - Firebase 提供兩種計費方案:Spark(免費)與 Blaze(付費) - Spark 計畫適用於開發初期與原型設計,包含大部分產品功能 - Spark 有特定產品使用上限,達到上限該產品當月即停止服務 - Blaze 計畫依實際使用量計費,並保留 Spark 的免費額度 - Blaze 適用於進入正式上線階段的專案 - 可在 Firebase 控制台的使用與計費頁面切換方案與新增付款方式 - Firebase 專案可連結至 Google Cloud 帳單帳戶 - 建議使用 Blaze 計畫時設定預算提醒,以避免預算超支 --- ### 最佳實踐重點回顧 - 若 App 為同一業務用途、跨不同平台,應註冊在同一 Firebase 專案 - 共用資料、用戶與分析的需求更適合使用單一專案管理 - 避免將同一應用拆分至不同專案,否則需實作自訂身份驗證 - 對不同品牌(不同 Logo)的應用應使用不同 Firebase 專案 ### Terminology - Firebase Project:Firebase 中的基本單位,集合了所有服務與資源的配置。 - Firebase App:註冊於 Firebase Project 內的單一應用,代表特定平台(如 Android、iOS、Web)的應用版本。 - Platform Variant:同一應用在不同平台上的變體(如 Android 與 iOS 版)。 - Google Cloud Project:Firebase Project 背後實際運作的 Google Cloud 專案。 - IAM(Identity and Access Management):控制誰能存取哪些 Firebase 資源的權限系統。 - Owner(擁有者):Firebase Project 中擁有全部存取與編輯權限的角色。 - Editor(編輯者):可編輯資源但無法管理使用者與計費的角色。 - Viewer(檢視者):僅能檢視設定,無法修改任何資源的角色。 - Granular Roles(細部角色):針對特定產品或服務授予更精細的權限控制。 - Develop Role:Firebase 中開發類產品(如 Firestore、Storage)的角色權限組。 - Grow Role:Firebase 中成長類產品(如 FCM、In-App Messaging)的角色權限組。 - Billing Settings:管理 Firebase Project 的帳務資訊。 - Project Integrations:整合 Firebase Project 與外部工具(如 Slack、Jira)的設定。 - Slack Integration:將 Firebase 事件通知發送到 Slack 頻道的功能。 - Jira Integration:當 Firebase 偵測到錯誤時,自動在 Jira 建立問題的功能。 - Crashlytics:Firebase 提供的即時錯誤追蹤與報告工具。 - Firestore:Firebase 的雲端 NoSQL 資料庫服務。 - Realtime Database:Firebase 的即時同步資料庫。 - Firebase Authentication:Firebase 提供的用戶身份驗證系統。 - Shared Resources:註冊於同一 Project 的 App 共用的資源,如資料庫、使用者資料等。 - Custom Authentication:自訂的身份驗證方式,用於跨 Project 共用使用者資料。 - Token Minting:產生自訂登入憑證的流程。 - White Label(白牌):相同應用的多品牌版本,供不同企業使用。 - Private Labeling:針對企業需求定制應用並套用專屬品牌的模式。 - One Project per Logo:一個 Firebase Project 對應一個品牌或 Logo 的建議原則。 - Analytics Data Sharing:同一 Project 內所有 App 共用的分析數據。 - User Base Sharing:所有平台共用的使用者身份資料。 - Project-level Permissions:Firebase Project 層級設定的使用者存取權限。 - Cross-platform Sync:使用相同 Firebase Project 的 App 間可共享登入狀態與資料。 - App Isolation:將應用完全隔離於不同 Firebase Project 中以強化隱私與安全。 - Configuration Mistake Risk:將不同應用放入同一 Project 時可能導致設定錯誤的風險。 - Firebase Quota Limits:Firebase Project 所擁有的使用上限(如讀寫次數、API 次數等)。 - Project Migration:因使用量成長而從多 App 共用 Project 遷移至一 App 一 Project 的流程。 - Firebase Console:Firebase 的圖形介面,用於管理 Project 與 App。 - Firebase SDK:提供應用與 Firebase 各項服務整合的開發工具包。 - Firebase Extensions:Firebase 提供的即插即用擴充功能(如影像壓縮、自動翻譯等)。 - Firebase Hosting:Firebase 提供的靜態網站與 Web 應用託管服務。 - Firebase Cloud Messaging(FCM):Firebase 的推播通知服務。 - In-App Messaging:Firebase 提供的應用內訊息顯示服務。 - Google Analytics for Firebase:分析使用者行為並產出報表的工具。 - Remote Config:可遠端控制應用設定與 UI 的 Firebase 服務。 - Firebase Test Lab:Google 提供的應用測試雲端平台。 - Firebase Dynamic Links:可跨平台且具備追蹤功能的深層連結工具。 - Firebase App Distribution:提供 App 測試版本給測試人員的分發服務。 - Security Rules:Firebase 中用來限制資料存取與操作權限的規則系統。 - App Monitoring:Firebase 提供的效能監控與錯誤偵測服務。 - Project Structure Best Practices:Firebase 官方建議的 Project 架構設計原則。 - Security Rules:Firebase 提供用於控制資料庫(如 Firestore、Storage)存取權限的規則系統。 - Unified Configuration:在同一 Firebase 專案中配置一次即適用所有平台變體的設定方式。 - Cross-platform Experience:使用者在多平台間無縫存取相同資料的體驗。 - Firebase Authentication:Firebase 的身份驗證服務,可讓使用者跨平台登入相同帳號。 - Firestore Documents:Firestore 中用來儲存結構化資料的基本單位。 - Free & Paid Version:相同 App 的不同版本(免費與付費),可共用同一 Firebase 專案的資源。 - Spark Plan:Firebase 的免費資費方案,適合開發初期使用。 - Blaze Plan:Firebase 的付費方案,按實際使用量收費。 - Product Usage Limit:Firebase 產品在 Spark 計畫中所允許的免費使用上限。 - Billing Cycle:Firebase 每月計費的週期。 - No-cost Tier:在 Blaze 計畫中仍保留的免費使用量,與 Spark 一致。 - Usage and Billing:Firebase Console 中顯示計費資訊的區域。 - Budget Alerts:設定預算警示以避免 Firebase 支出超過預期的功能。 - Cloud Billing Account:Google Cloud 的計費帳戶,可與 Firebase 專案連結。 - Cross-app Analytics:於同一 Firebase 專案中各 App 之間共用分析資料的能力。 - Seamless User Experience:提供使用者跨平台一致體驗的設計原則。 - User Migration:當使用者升級應用版本(如免費轉付費)仍保留其資料與設定。 - Project-level Integration:將外部服務整合於 Firebase 專案,使所有 App 共用。 - A/B Testing:Firebase 支援的實驗測試功能,可用於優化產品體驗。 - Cloud Messaging(FCM):Firebase 的推播通知服務,免費且無使用上限。 - Crashlytics:Firebase 提供的錯誤追蹤與即時崩潰報告工具。 - Firebase Console:管理 Firebase 專案與應用的平台圖形介面。 - Shared Authentication State:讓不同平台的 App 使用相同使用者登入狀態。 - Platform Synchronization:Firebase 跨平台共享資源與狀態的能力。 - Emulators:Firebase 提供的本地模擬工具,用於離線開發與測試環境。 - Environment Separation:為開發、測試、部署等不同階段建立獨立 Firebase 環境的做法。 - Development Environment:Firebase 專案中專用於開發階段的設置。 - Staging Environment:部署前用於測試與驗證的 Firebase 專案環境。 - Production Environment:正式上線並供用戶使用的 Firebase 專案環境。 - Project Isolation:將不同應用分開管理以確保數據與安全隔離的做法。 - Custom Authentication:為跨 Project 使用者登入所需實作的自訂驗證機制。 - Token Exchange:自訂登入機制中交換身份憑證的流程。 - Best Practices:Firebase 團隊建議的架構與使用原則。 - Project Scalability:Firebase 專案在使用量增加時能否順利擴展的能力。 - Project Quota Limits:Firebase 各服務(如 Firestore、Storage)在專案層級的使用限制。 - Firebase Extensions:Firebase 提供的功能套件,可快速加入擴展能力。 - Firebase Hosting:Firebase 的網頁與靜態內容託管服務。 - Realtime Database:Firebase 提供的即時同步資料庫。 - Firebase ML:Firebase 提供的機器學習功能模組。 - Remote Config:Firebase 提供的遠端配置工具,可動態控制 App 行為。 - Dynamic Links:跨平台的深層連結工具,支援追蹤來源與內容。 - App Distribution:Firebase 的測試版本分發平台,供 QA 或外部測試使用。 - Feature Parity:Firebase 跨平台應用中功能一致性。 - Shared User Base:同一 Firebase 專案內所有 App 共用的使用者資料庫。 - Role-based Access Control(RBAC):以角色為基礎的存取控制策略。 - Google Cloud Console:Firebase 專案可於此進行更高階設定的平台。 - App Management Efficiency:集中管理多平台應用的效率提升。