Ir a la consola

Actualiza tu app para Android desde Firebase.com

Este documento te guiará en la actualización de tu app existente de Firebase.com a la nueva versión de Firebase console y las API correspondientes.

El proceso consta de cuatro pasos:

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

Puedes actualizar tu proyecto a la nueva versión de la consola de firebase.google.com en cualquier momento. Tus aplicaciones seguirán funcionando. Después, 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 la nueva versión de Firebase console

  • Accede a Firebase console y selecciona tu proyecto en "Tus proyectos actuales en Firebase.com".
  • Haz clic en el botón Importar correspondiente al proyecto que deseas actualizar.
    • Si tu proyecto está en un plan pago de firebase.com, deberás configurar la facturación del proyecto en la consola nueva. 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.
  • Tu contenido de Realtime Database y Hosting se importa automáticamente a Firebase console al instante.
  • Los datos de tus 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.

Instala el nuevo SDK de Firebase

No es necesario que actualices el código de tus aplicaciones de inmediato. El código de base de datos y de autenticación existente seguirá funcionando con el proyecto migrado. Sin embargo, cuando estés listo para comenzar a usar algunas de las nuevas características de Firebase en la aplicación, puedes instalar el nuevo SDK de Firebase (asegúrate de descargar el archivo google-services.json nuevo y agregar el complemento google-services al archivo Gradle).

Ten en cuenta que cuando comiences a usar el SDK nuevo, se habilitará Google Analytics para Firebase de forma automática. Según la configuración predeterminada, tus datos de Analytics mejorarán otras características de Firebase y otros productos de Google. Puedes controlar la forma de compartir datos de Analytics cuando lo desees en la configuración. Más información

Actualiza el código de tu base de datos

Actualiza tus dependencias de Gradle

El modo más sencillo de comenzar es cambiar tu dependencia de Gradle:

ANTES

dependencies {
  compile 'com.firebase:firebase-client-android:x.x.x'
}
DESPUÉS

dependencies {
  compile "com.google.firebase:firebase-database:18.0.1"
}

Corrige las referencias a las clases

Es probable que ahora la app tenga varios errores de compilación, debido a que se movieron clases o se les cambió el nombre. Sigue estas soluciones simples para solucionar varios de ellos:

Antes Después
com.firebase.client com.google.firebase.database
FirebaseError DatabaseError
FirebaseException DatabaseException
Firebase.AuthStateListener FirebaseAuth.AuthStateListener
Firebase DatabaseReference

Si no puedes encontrar la clase o el método que estás buscando, consulta los documentos de referencia de Database.

Configuración del contexto de Android y habilitación de la persistencia sin conexión

En el nuevo SDK, ya no es necesario llamar a Firebase.setAndroidContext(), así que puedes quitarlo del código.

Si la app usa la persistencia en disco, ahora debes habilitarla con el objeto FirebaseDatabase:

ANTES

Firebase.getDefaultConfig().setPersistenceEnabled(true);
DESPUÉS

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Al igual que en el SDK 2.x, la persistencia en disco debe habilitarse antes de que se hagan otras llamadas a la base de datos.

Obtén una referencia de la base de datos

En el nuevo SDK, las referencias de Firebase se reemplazan con DatabaseReference y usas la clase FirebaseDatabase para obtener una referencia inicial a la base de datos. De modo que puedes obtener la referencia de la base de datos en tu código de la siguiente manera:

ANTES

Firebase rootRef = new Firebase("https://<your-app>.firebaseio.com/");
DESPUÉS

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

Ten en cuenta que la URL de la base de datos se determina de manera automática a partir del archivo google-services.json que descargaste, por lo que no es necesario que la especifiques. Sin embargo, si quieres especificarla, puedes hacerlo (lo que sería conveniente para la migración):

ANTES

Firebase ref = new Firebase("https://<your-app>.firebaseio.com/path/to/data");
DESPUÉS

DatabaseReference ref = FirebaseDatabase.getInstance()
    .getReferenceFromUrl("https://<your-app>.firebaseio.com/path/to/data");

Actualiza los objetos del modelo de Java

Al igual que en el SDK 2.x, Firebase Database convierte los objetos Java que pases a DatabaseReference.setValue() en JSON de forma automática, y puede leer JSON en objetos Java con DataSnapshot.getValue().

En el nuevo SDK, cuando lees JSON en un objeto Java con DataSnapshot.getValue(), las propiedades desconocidas de JSON ahora se ignoran de forma predeterminada, por lo que ya no necesitas @JsonIgnoreExtraProperties(ignoreUnknown=true).

Para excluir campos o métodos cuando escribes un objeto Java a JSON, la anotación ahora se llama @Exclude en lugar de @JsonIgnore.

ANTES

@JsonIgnoreExtraProperties(ignoreUnknown=true)
public class ChatMessage {
   public String name;
   public String message;
   @JsonIgnore
   public String ignoreThisField;
}

dataSnapshot.getValue(ChatMessage.class)
DESPUÉS

public class ChatMessage {
   public String name;
   public String message;
   @Exclude
   public String ignoreThisField;
}

dataSnapshot.getValue(ChatMessage.class)

Si hay una propiedad adicional en tu JSON que no está en la clase Java, verás esta advertencia en los archivos de registro:

W/ClassMapper: No setter/field for ignoreThisProperty found on class com.firebase.migrationguide.ChatMessage

Para deshacerte de esta advertencia, agrega una anotación @IgnoreExtraProperties en la clase. Si deseas que Firebase Database se comporte como en el SDK 2.x y muestre una excepción si hay propiedades desconocidas, puedes agregar una anotación @ThrowOnExtraProperties en la clase.

Actualiza tu código de autenticación

Ahora, la función de Firebase Authentication reside tras su propia clase FirebaseAuth, por lo que las operaciones de autenticación se ejecutan en una instancia de FirebaseAuth en lugar de a través de una referencia de Firebase.

Actualiza tus dependencias de Gradle

Dado que Authentication ahora reside en su propio módulo, primero debes agregar una dependencia a tu build.gradle:

dependencies {
  compile 'com.google.firebase:firebase-auth:18.1.0'
}

Actualiza tus importaciones

ANTES

import com.firebase.client.AuthData;
DESPUÉS

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

Haz que un usuario acceda de forma anónima

Los métodos de autenticación funcionan de manera similar a como lo hacían antes, pero ahora existen como métodos en el objeto FirebaseAuth con nombres nuevos y AuthData se reemplaza por FirebaseUser. Por ejemplo, a continuación, se muestra cómo acceder en trabajos anónimos tanto en la API 2.x como en la API nueva:

ANTES

ref.authAnonymously(new Firebase.AuthResultHandler() {
   public void onAuthenticated(AuthData authData) { }
   public void onAuthenticationError(FirebaseError firebaseError) {
       throw firebaseError.toException();
   }
});
DESPUÉS

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.signInAnonymously().addOnFailureListener(new OnFailureListener() {
   public void onFailure(Throwable throwable) {
       throw new RuntimeException(throwable);
   }
});

Haz que un usuario acceda con un token personalizado

La autenticación con tokens personalizados en el cliente también funciona de manera similar a como lo hacía antes. A continuación, se muestra cómo acceder con un token personalizado en la API 2.x y en la API nueva:

ANTES

ref.authWithCustomToken(AUTH_TOKEN, new Firebase.AuthResultHandler() {
   public void onAuthenticated(AuthData authData) { }
   public void onAuthenticationError(FirebaseError firebaseError) {
       throw firebaseError.toException();
   }
});
DESPUÉS

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.signInWithCustomToken(AUTH_TOKEN)
        .addOnCompleteListener(this, new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
            }
        });

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.

Haz que un usuario acceda con un proveedor de redes sociales

Para proveedores de redes sociales, como Google, Facebook o Twitter, las modificaciones son un poco más grandes.

El flujo para los proveedores de redes sociales es el mismo que antes; primero obtienes del proveedor las credenciales del usuario y después las usas para autenticar con Firebase:

ANTES

ref.authWithOAuthToken(provider, token, authResultHandler);
DESPUÉS

AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)

Para obtener más detalles, consulta la documentación sobre cómo usar la autenticación de Facebook y Google con Firebase.

La autenticación de Twitter es un poco diferente en este caso también:

ANTES

Map options = new HashMap<>();
options.put("oauth_token", oauth_token);
options.put("oauth_token_secret", oauth_token_secret);
options.put("user_id", user_id);
ref.authWithOAuthToken(token.provider, options, authResultHandler);
DESPUÉS

AuthCredential credential = TwitterAuthProvider.getCredential(token, secret);
mAuth.signInWithCredential(credential)

Para obtener más información, consulta Cómo autenticar con Twitter

Haz que un usuario salga de la sesión

ANTES

ref.unauth()
DESPUÉS

FirebaseAuth.getInstance().signOut();

Supervisa el estado de la autenticación

ANTES

ref.addAuthStateListener(new Firebase.AuthStateListener() {
   @Override
   public void onAuthStateChanged(final AuthData authData) {
       if (authData != null) {
           Log.i("AuthStateChanged", "User is signed in with uid: " + authData.getUid());
       } else {
           Log.i("AuthStateChanged", "No user is signed in.");
       }
   }
});
DESPUÉS

FirebaseAuth auth = FirebaseAuth.getInstance();
auth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
   @Override
   public void onAuthStateChanged(@NonNull final FirebaseAuth firebaseAuth) {
       final FirebaseUser user = firebaseAuth.getCurrentUser();
       if (user != null) {
           Log.i("AuthStateChanged", "User is signed in with uid: " + user.getUid());
       } else {
           Log.i("AuthStateChanged", "No user is signed in.");
       }
   }
});

Migra los accesos existentes

Si hay usuarios que accedieron a tu app con un SDK anterior, necesitarás algo 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 un ejemplo de código abierto para esto en el repositorio de GitHub Asistentes para la migración de Firebase Auth.

Actualiza la nueva plantilla para restablecer contraseñas

Si tu app permite que los usuarios accedan 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
GeoFire 1.2.x GitHub