Actualiza tu app web o de Node.js en Firebase.com

Este documento te guiará en la actualización de tus apps web y Node.js existentes desde Firebase.com a la nueva versión de Firebase console y los SDK 3.x.

El proceso consta de tres pasos:

  1. Importa tu proyecto a la nueva versión de Firebase console.
  2. Actualiza el código de tu base de datos.
  3. Actualiza tu código de autenticación.

Puedes importar tu proyecto en cualquier momento. Tus aplicaciones y los SDK existentes seguirán funcionando. Luego, puedes actualizar tu código cuando estés listo para usar alguna de las funciones nuevas de Firebase en tu aplicación.

Importa tu proyecto a Firebase console

  • Accede a Firebase console y selecciona el proyecto en la sección de proyectos actuales alojados en Firebase.com.
  • Haz clic en el botón Importar correspondiente al proyecto que deseas actualizar.
    • Si tu proyecto está en un plan pagado de firebase.com, deberás configurar la facturación del proyecto en la nueva consola. La información de facturación no se migra automáticamente.
    • Selecciona o crea una cuenta de facturación. Después de importar el proyecto, esta cuenta será responsable de todos sus gastos.
  • El contenido de Realtime Database y Hosting se importa de manera instantánea y automática a Firebase console.
  • Los datos de usuarios se migran automáticamente al nuevo backend de autenticación. Esto sucede en segundo plano y los usuarios pueden seguir usando la app mientras se migran los datos. El proceso no afecta los registros ni el acceso de los usuarios. Mientras el sistema migra las cuentas de usuario, verás un ícono giratorio en la pestaña Auth de Firebase console.
  • Si tienes un código promocional activo para una app de Firebase.com, comunícate con nosotros.

Actualiza tu Firebase CLI

Para usar la interfaz de línea de comandos con un proyecto actualizado, deberás instalar la versión 3.0 o una posterior. Para ello, puedes ejecutar el siguiente comando:

npm install -g firebase-tools

Una vez que tengas la versión más reciente de Firebase CLI, deberás volver a realizar la autenticación mediante la ejecución de firebase login. A fin de obtener un nuevo token para servidores de integración continua o para otros sistemas sin interfaz gráfica, ejecuta firebase login:ci.

Por último, tendrás que ejecutar firebase tools:migrate en cada uno de los directorios de los proyectos migrados de Firebase.com.

Actualiza la versión de cliente

No tienes que actualizar el código de tus aplicaciones de inmediato. El código de base de datos y de autenticación existente seguirá funcionando con los proyectos actualizados. Pero cuando estés listo para comenzar a usar alguna de las funciones nuevas de Firebase en tu aplicación, sigue estos pasos para migrar el código de base de datos a las API nuevas.

El modo más sencillo de comenzar es cambiar tu secuencia de comandos. Esto incluye lo siguiente:

ANTES

<script src="https://cdn.firebase.com/js/client/2.3.2/firebase.js"></script>
DESPUÉS

<script src="https://www.gstatic.com/firebasejs/7.4.0/firebase.js"></script>

Si estás migrando una app Node.js, puedes descargar la versión más reciente del paquete npm firebase con los siguientes comandos (para asegurarte de que no está anclada a la versión 2.X, puedes desinstalarla antes de instalar la última versión):

$ npm uninstall firebase --save
$ npm install firebase --save

Obtén una referencia a una base de datos

En los nuevos SDK, ya no se usa new Firebase para crear una instancia de referencia a una base de datos. Lo que se hace es inicializar el SDK mediante firebase.initializeApp():

ANTES

var ref = new Firebase("https://databaseName.firebaseio.com");
DESPUÉS

// See https://firebase.google.com/docs/web/setup for how to
// auto-generate this config
var config = {
  apiKey: "apiKey",
  authDomain: "your-firebase-project-id.firebaseapp.com",
  databaseURL: "https://databaseName.firebaseio.com"
};

firebase.initializeApp(config);

var rootRef = firebase.database().ref();

Para generar esta configuración automáticamente, sigue las instrucciones que se indican en la página de la configuración web.

Los métodos de obtención sin argumento ahora son propiedades de solo lectura

Muchos métodos de obtención sin argumento cambiaron y ahora son propiedades de solo lectura:

ANTES

// Reference
var key = ref.key();
var rootRef = ref.root();
var parentRef = ref.parent();

// Query
var queryRef = query.ref();

// DataSnapshot
ref.on("value", function(snapshot) {
  var dataRef = snapshot.ref();
  var dataKey = snapshot.key();
});
DESPUÉS

// Reference
var key = ref.key;
var rootRef = ref.root;
var parentRef = ref.parent;

// Query
var queryRef = query.ref;

// DataSnapshot
ref.on("value", function(snapshot) {
  var dataRef = snapshot.ref;
  var dataKey = snapshot.key;
});

Actualiza tu código de autenticación

Ahora, la función de Firebase Authentication reside tras su propio servicio de firebase.auth(). Además, se cambió el nombre de varios métodos. Por ejemplo, aquí se muestra cómo autenticar un usuario con un proveedor de OAuth:

ANTES

ref.authWithOAuthPopup("twitter", function(error, authData) {
  if (error) {
    // An error occurred
    console.error(error);
  } else {
    // User signed in!
    var uid = authData.uid;
  }
});
DESPUÉS

var auth = firebase.auth();

var provider = new firebase.auth.TwitterAuthProvider();
auth.signInWithPopup(provider).then(function(result) {
  // User signed in!
  var uid = result.user.uid;
}).catch(function(error) {
  // An error occurred
});

Y aquí se muestra cómo acceder con un token personalizado en la API 2.x y en la API nueva:

ANTES

ref.authWithCustomToken(AUTH_TOKEN, function(error, authData) {
  if (error) {
    console.log("Login Failed!", error);
  } else {
    console.log("Login Succeeded!", authData);
  }
});
DESPUÉS

firebase.auth().signInWithCustomToken(AUTH_TOKEN).catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});

Los tokens personalizados que se generan en el servidor tienen un formato nuevo. Puedes usar los SDK de Firebase Admin para Node.js y Java a fin de crear tokens personalizados compatibles con la API nueva, o bien crearlos mediante una biblioteca de JWT de terceros.

Ten en cuenta que los SDK de Firebase Admin generan tokens personalizados que caducan al cabo de una hora, a diferencia de las bibliotecas auxiliares de la API 2.x que, en la configuración predeterminada, generan tokens que caducan tras 24 horas.

En las referencias de la API de Auth para la Web y Node.js, encontrarás la lista completa de los métodos disponibles.

Obtén el token de acceso

Con la API de autenticación de Firebase.com, puedes usar de manera sencilla el token de acceso del proveedor para llamar a la API del proveedor y obtener información adicional. Este token de acceso aún se encuentra disponible, pero solo inmediatamente después de completar la acción de acceso.

ANTES

ref.onAuth(function(authData) {
  if (authData) {
    var accessToken = authData.providerData[authData.provider].accessToken;
  }
})
DESPUÉS

var auth = firebase.auth();

var provider = new firebase.auth.GoogleAuthProvider();
auth.signInWithPopup(provider).then(function(result) {
  var accessToken = result.credential.accessToken;
});

Dado que Firebase Authentication ya no conserva los tokens de acceso, tu aplicación deberá guardar esa información por sus propios medios, si fuese necesario.

Supervisa el estado de autenticación

El nombre del método y el argumento de la devolución de llamada para supervisar el estado de autenticación variaron un poco, de la siguiente forma:

ANTES

ref.onAuth(function(authData) {
  if (authData) {
    // User signed in!
    var uid = authData.uid;
  } else {
    // User logged out
  }
});
DESPUÉS

var auth = firebase.auth();

auth.onAuthStateChanged(function(user) {
  if (user) {
    // User signed in!
    var uid = user.uid;
  } else {
    // User logged out
  }
});

Migra los accesos existentes

Si hay usuarios que accedieron a la app con un SDK heredado, necesitarás un poco de código para que esas sesiones sigan activas con el SDK nuevo. De lo contrario, los usuarios deberán volver a acceder a sus cuentas. Se proporciona una muestra de código abierto para esto en el repositorio de GitHub de asistentes para la migración de Firebase Auth.

Actualiza la nueva plantilla para restablecer contraseñas

Si tu app permite que los usuarios accedan a sus cuentas con la autenticación de correo electrónico y contraseña, probablemente también les otorgues a estos usuarios la opción de restablecer su contraseña.

Una vez que hayas actualizado al SDK nuevo, esos correos electrónicos de restablecimiento de contraseña usarán las plantillas nuevas especificadas en Firebase Console. Asegúrate de actualizarlas según las necesidades de tu app.

Actualiza tus bibliotecas de Firebase

Si usas alguna de las siguientes bibliotecas, deberás actualizarla a la versión más reciente.

Biblioteca Versión compatible Recurso
AngularFire 2.x.x Github
ReactFire 1.x Github
GeoFire 4.1.x Github