---
# System prepended metadata

title: '[Video Note] [Firebase] Firebase - How Firebase projects and apps work'
tags: [Video Note, Firebase]

---

### 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：集中管理多平台應用的效率提升。