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.