從保留的網址載入 Firebase SDK

Firebase Hosting 會在網站中保留開頭為 /__ 的網址。這個保留命名空間可讓您更輕鬆地將其他 Firebase 產品與 Firebase Hosting 搭配使用。

無論您是將應用程式部署至 Firebase (firebase deploy),或是在本機伺服器上執行應用程式 (firebase serve),都可以使用這些保留的網址。

新增保留網址的指令碼

由於 Firebase Hosting 在部署時會透過 HTTP/2 放送,因此您可以從相同來源載入檔案來提升效能。Firebase Hosting 會透過特殊網址提供 Firebase JavaScript SDK 的 8 版,格式如下:

/__/firebase/JS_SDK_VERSION/FIREBASE_SDK_NAME.js

強烈建議您只載入應用程式中使用的程式庫。舉例來說,如要只納入 AuthenticationCloud Firestore,請在使用任何 Firebase 服務之前,將下列指令碼新增至 <body> 標記的底部:

<body>
  <!-- Insert these scripts at the bottom of the HTML, but before you use any Firebase services -->
  <!-- Firebase App (the core Firebase SDK) is always required and must be listed first -->
  <script src="/__/firebase/8.10.1/firebase-app.js"></script>

  <!-- Add Firebase products that you want to use -->
  <script src="/__/firebase/8.10.1/firebase-auth.js"></script>
  <script src="/__/firebase/8.10.1/firebase-firestore.js"></script>
</body>

SDK 自動設定

自動 SDK 設定可讓您輕鬆透過單一程式碼基底管理多個環境 (例如開發、測試和正式環境)。您可以使用預留的 Hosting 網址,將相同程式碼部署至多個 Firebase 專案。

除了代管 SDK 本身之外,保留的命名空間還會提供所有必要的設定,讓您為與 Hosting 網站相關聯的 Firebase 專案初始化 SDK。這個 Firebase 設定和 SDK 初始化作業是由您可以直接加入的指令碼提供:

<!-- Load the Firebase SDKs before loading this file -->
<script src="/__/firebase/init.js"></script>

當您將應用程式部署至 Firebase 或在本機測試應用程式時,這個指令碼會自動為有效的 Firebase 專案設定 Firebase JavaScript SDK,並初始化 SDK。

如果您想自行控制初始化作業,也可以使用 JSON 格式提供 Firebase 設定值:

fetch('/__/firebase/init.json').then(async response => {
  firebase.initializeApp(await response.json());
});

可用的 Firebase JS SDK (來自預留的 Hosting 網址)

Firebase 產品 程式庫參照 (保留網址)
Firebase 核心
(必要)
<script src="/__/firebase/8.10.1/firebase-app.js"></script>
Analytics
<script src="/__/firebase/8.10.1/firebase-analytics.js"></script>
App Check
<script src="/__/firebase/8.10.1/firebase-app-check.js"></script>
Authentication
<script src="/__/firebase/8.10.1/firebase-auth.js"></script>
Cloud Firestore
<script src="/__/firebase/8.10.1/firebase-firestore.js"></script>
Cloud Functions for Firebase Client SDK
<script src="/__/firebase/8.10.1/firebase-functions.js"></script>
Firebase 安裝次數
<script src="/__/firebase/8.10.1/firebase-installations.js"></script>
Cloud Messaging
<script src="/__/firebase/8.10.1/firebase-messaging.js"></script>

為獲得最佳的 Cloud Messaging 使用體驗,請一併新增 Analytics 專用的 Firebase SDK。

Cloud Storage
<script src="/__/firebase/8.10.1/firebase-storage.js"></script>
Performance Monitoring
(Beta 版版本)
<script src="/__/firebase/8.10.1/firebase-performance.js"></script>
Realtime Database
<script src="/__/firebase/8.10.1/firebase-database.js"></script>
Remote Config
(Beta 版版本)
<script src="/__/firebase/8.10.1/firebase-remote-config.js"></script>

為獲得最佳的 Remote Config 使用體驗,請一併新增 Analytics 專用的 Firebase SDK。

Firebase JavaScript SDK
(整個 SDK)
<script src="/__/firebase/8.10.1/firebase.js"></script>

驗證輔助工具

Firebase Authentication 會使用保留的命名空間,提供特殊 JavaScript 和 HTML,透過 OAuth 完成與供應商的驗證。這樣一來,每個 Firebase 專案都能擁有專屬的 Firebase 子網域,進而提升 Firebase Authentication 的安全性。

此外,您也可以使用自訂網域來設定 firebase.initializeApp()authDomain 選項。如果您為 Firebase Hosting設定自訂網域,也可以在初始化 Firebase SDK 時指定該自訂網域 (而非 web.appfirebaseapp.com 子網域)。如要進一步瞭解如何使用自訂網域,請參閱「使用 signInWithRedirect 的最佳做法」。

保留的網址和服務工作程式

如果您正在建構漸進式網頁應用程式 (PWA),可以建立具有「導覽備用」的服務 worker,並在預先快取項目清單不相符時,以預設方式轉譯特定網址。

如果您使用 sw-precache 程式庫,可以新增導覽備用白名設定,排除保留的命名空間:

{
  navigateFallbackWhitelist: [/^(?!\/__).*/]
}

一般來說,請記住雙下劃線命名空間是保留給 Firebase 使用,且您不應在服務 worker 中攔截這些要求。