Entornos compatibles con el SDK de Firebase JavaScript

Entornos compatibles

El SDK de Firebase JavaScript es compatible oficialmente con los siguientes entornos.

Navegadores

Producto de Firebase Edge Firefox Chrome Safari iOS Safari
App Check
Analytics
Authentication
Cloud Firestore
(excepto
persistencia)

(excepto
persistencia
en versiones anteriores a iOS 10)
Cloud Functions
Instalaciones de Firebase
Cloud Messaging
(Edge 17 y versiones posteriores, excepto para dispositivos móviles)
Cloud Storage
Performance Monitoring
Realtime Database
Remote Config
Vertex AI in Firebase

Otros entornos

Producto de Firebase React Native Node.js (18+) Extensiones
de Chrome
Cordova
App Check
(con un proveedor personalizado para certificar dispositivos nativos)

(con un proveedor personalizado)
Analytics
Authentication
(consulta la nota)

(consulta la nota)

(consulta la nota)

(consulta la nota)
Cloud Firestore
(excepto
persistencia)

(excepto
persistencia)
Cloud Functions
Instalaciones de Firebase
Cloud Messaging
Cloud Storage
(excepto
cargas)
Performance Monitoring
Realtime Database
Remote Config
Vertex AI in Firebase

Polyfills

El SDK de Firebase JavaScript se compiló según los estándares más recientes de la plataforma web. Algunos entornos de JavaScript y navegadores más antiguos no son compatibles con todas las funciones que requiere Firebase. Tendrás que cargar polyfills según corresponda si necesitas admitir estos entornos o navegadores.

En las siguientes secciones, se identifica la mayoría de los polyfills que podrías necesitar.

Polyfills necesarios

Entornos Polyfills
Safari 7, 8 y 9 ES Stable
Versiones anteriores a Node 10 ES Stable

Polyfills opcionales

Entornos Polyfills Productos de Firebase
  • Versiones anteriores a Safari 10.1
  • Versiones anteriores a iOS 10.3
fetch
  • Authentication
  • Cloud Firestore
  • Cloud Functions
  • Performance Monitoring
  • Versiones anteriores a Node 18
fetch
  • Authentication
  • Cloud Firestore
  • Cloud Functions
  • Cloud Storage
  • React Native y Expo
base-64
  • Cloud Storage

Polyfills recomendados

Polyfills Licencia
ES Stable MIT
fetch: "cross-fetch", mejor para navegadores más antiguos MIT
fetch: "undici", mejor para Node.js MIT
base-64 MIT

Configuración de Polyfill necesaria para React Native y Expo

Para React Native y Expo, si subes una string codificada en base-64, debes hacer lo siguiente:

Instala base-64 desde npm:

npm install base-64

Importa decode desde base-64 y adjúntalo al permiso global como atob para que Cloud Storage pueda acceder a él.

import { decode } from 'base-64';

if(typeof atob === 'undefined') {
  global.atob = decode;
}

Agrega polyfills en tu aplicación

Opción 1: Usa un agrupador integrado en Babel (recomendado)

Si usas un agrupador, intégralo en Babel y @babel/preset-env para obtener polyfills.

Para obtener información sobre cómo integrar Babel en tu integrador, usa la guía de configuración interactiva de Babel.

Con Babel, no tienes que preocuparte de los polyfills exactos que debes incluir. Basta con que especifiques los entornos de navegador mínimos que quieres admitir, y Babel agregará los polyfills necesarios. Además, la herramienta garantiza que siempre se cumplan los requisitos de compatibilidad con navegadores, incluso si Firebase o tu propio código comienza a usar funciones de ES nuevas.

@babel/preset-env ofrece información detallada sobre las opciones de configuración disponibles para especificar objetivos de entorno (opción targets) y agregar polyfills (opción useBuiltIns).

Opción 2: Agrega polyfills manualmente (no recomendado)

Puedes agregar polyfills manualmente con tus bibliotecas de polyfill favoritas (por ejemplo, core-js).

import 'core-js/stable'
import 'cross-fetch/polyfill';

core-js también ofrece un archivo de polyfills todo en uno que puedes incluir directamente en la página HTML.

Si no usas Babel, esta es una opción conveniente para administrar polyfills. Sin embargo, no recomendamos esta opción de todo en uno para las apps de producción, ya que podrían incluirse polyfills innecesarios y aumentar el peso y el tiempo de carga de la página.