Carregar os SDKs do Firebase usando URLs reservados

O Firebase Hosting reserva URLs no seu site começando com /__. O uso de outros produtos do Firebase com o Firebase Hosting é facilitado por esse namespace reservado.

Esses URLs reservados estão disponíveis quando você implanta no Firebase (firebase deploy) ou quando executa o app em um servidor local (firebase serve).

Adicionar scripts a URLs reservados

Como o Firebase Hosting é disponibilizado por HTTP/2 quando implantado, é possível melhorar o desempenho com o carregamento de arquivos da mesma origem. O Firebase Hosting disponibiliza a versão 8 do SDK JavaScript do Firebase de URLs especiais formatados da seguinte maneira:

/__/firebase/JS_SDK_VERSION/FIREBASE_SDK_NAME.js

É altamente recomendável carregar apenas as bibliotecas que você usa no seu app. Por exemplo, para incluir somente o Authentication e o Cloud Firestore, adicione os seguintes scripts à parte inferior da sua tag <body> antes de usar os serviços do Firebase:

<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>

Configuração automática do SDK

O gerenciamento de vários ambientes (como desenvolvimento, preparo e produção) é facilitado pela configuração automática do SDK a partir de uma única base de código. Ao contar com o URL reservado do Hosting, você implanta o mesmo código em vários projetos do Firebase.

Além da hospedagem dos próprios SDKs, o namespace reservado também fornece a configuração necessária para inicializar o SDK para o projeto do Firebase associado ao site do Hosting. Essa configuração do Firebase e a inicialização do SDK são fornecidas por um script que pode ser incluído diretamente:

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

Quando você implanta no Firebase ou testa seu app localmente, esse script configura automaticamente o SDK do Firebase para JavaScript para o projeto ativo do Firebase e inicializa o SDK.

Se você preferir controlar a inicialização, os valores de configuração do Firebase também estão disponíveis no formato JSON:

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

SDKs do Firebase para JS disponíveis (de URLs reservados do Hosting)

Produto do Firebase Referência de biblioteca (URL reservado)
Firebase básico
(obrigatório)
<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 Instalações
<script src="/__/firebase/8.10.1/firebase-installations.js"></script>
Cloud Messaging
<script src="/__/firebase/8.10.1/firebase-messaging.js"></script>

Para uma experiência ideal com o Cloud Messaging, adicione também o SDK do Firebase para Analytics.

Cloud Storage
<script src="/__/firebase/8.10.1/firebase-storage.js"></script>
Performance Monitoring
(versão 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
(versão beta)
<script src="/__/firebase/8.10.1/firebase-remote-config.js"></script>

Para uma experiência ideal com o Remote Config, adicione também o SDK do Firebase para Analytics.

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

Auxiliares do Auth

O Firebase Authentication usa o namespace reservado para fornecer JavaScript e HTML especiais a fim de concluir a autenticação com provedores por meio do OAuth. Isso permite que cada projeto do Firebase tenha um subdomínio exclusivo, o que aumenta a segurança do Firebase Authentication.

Além disso, você pode usar seu próprio domínio personalizado para a opção authDomain de firebase.initializeApp(). Se você configurar um domínio personalizado para o Firebase Hosting, também poderá especificá-lo em vez de fazer isso com o subdomínio web.app ou firebaseapp.com ao inicializar os SDKs do Firebase. Consulte Práticas recomendadas para usar o signInWithRedirect para mais detalhes sobre como usar um domínio personalizado.

URLs reservados e service workers

Se você estiver criando um Progressive Web App (PWA), gere um service worker que tenha um fallback de navegação e renderize um URL específico por padrão, caso ele não corresponda a uma lista de itens armazenados previamente em cache.

Se você estiver usando a biblioteca sw-precache, adicione uma configuração de lista de permissões do fallback de navegação que exclua o namespace reservado:

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

Em geral, lembre-se de que o namespace com sublinhado duplo é reservado para uso pelo Firebase e você não deve interceptar essas solicitações no seu service worker.