Migra al SDK de Admin para Java v7

La versión 7.0.0 del SDK de Firebase Admin para Java presenta algunos cambios importantes en la API. Principalmente, los cambios en la API de esta versión son adiciones y mejoras para el manejo de errores de FCM y Authentication.

Cambios en el manejo general de errores

La clase base FirebaseException ahora expone varios atributos nuevos:

  • ErrorCode getErrorCode(): Muestra el código de error de la plataforma asociado con la excepción. Se garantiza que cada instancia de FirebaseException tendrá un código de error de plataforma no nulo. Los códigos de error posibles de la plataforma se definen como un nuevo tipo de enumeración ErrorCode.
  • IncomingHttpResponse getHttpResponse(): Muestra la respuesta HTTP asociada con la excepción. Puede ser nulo si la excepción se debe a un motivo que no sea una respuesta HTTP de backend.

Al igual que antes, la mayoría de los otros tipos de excepciones definidos en el SDK (por ejemplo, FirebaseAuthException y FirebaseMessagingException) derivan de la clase base FirebaseException.

Cambios en el manejo de errores de Auth

Todas las API de la clase FirebaseAuth pueden generar instancias de FirebaseAuthException. Las API asíncronas (por ejemplo, los métodos que muestran un ApiFuture) pueden fallar con una ExecutionException que une una FirebaseAuthException. Los códigos de error específicos de Auth se definen públicamente en el nuevo tipo de enumeración AuthErrorCode.

Antes (<= v6.15.0)

try {
  FirebaseAuth.getInstance().verifyIdToken(idToken, true);
} catch (FirebaseAuthException ex) {
  if (ex.getErrorCode().equals("id-token-revoked")) {
    System.err.println("ID token has been revoked");
  } else {
    System.err.println("ID token is invalid");
  }
}

Ahora (>= v7.0.0)

try {
  FirebaseAuth.getInstance().verifyIdToken(idToken, true);
} catch (FirebaseAuthException ex) {
  if (ex.getAuthErrorCode() == AuthErrorCode.REVOKED_ID_TOKEN) {
    System.err.println("ID token has been revoked");
  } else {
    System.err.println("ID token is invalid");
  }
}

El AuthErrorCode se suma al ErrorCode heredado del tipo FirebaseException base. Puedes implementar la lógica de manejo de errores que inspecciona ambos códigos de error si es necesario.

Cambios en el manejo de errores de FCM

Todas las API de la clase FirebaseMessaging pueden generar instancias de FirebaseMessagingException. Las API asíncronas (por ejemplo, los métodos que muestran un ApiFuture) pueden fallar con una ExecutionException que une una FirebaseMessagingException. Los códigos de error específicos de Authentication se definen públicamente en el nuevo tipo de enumeración MessagingErrorCode.

Antes (<= v6.15.0)

try {
  FirebaseMessaging.getInstance().send(message);
} catch (FirebaseMessagingException ex) {
  if (ex.getErrorCode().equals("registration-token-not-registered")) {
    System.err.println("Device token has been unregistered");
  } else {
    System.err.println("Failed to send the notification");
  }
}

Ahora (>= v7.0.0)

try {
  FirebaseMessaging.getInstance().send(message);
} catch (FirebaseMessagingException ex) {
  if (ex.getMessagingErrorCode() == MessagingErrorCode.UNREGISTERED) {
    System.err.println("Device token has been unregistered");
  } else {
    System.err.println("Failed to send the notification");
  }
}

El MessagingErrorCode se suma al ErrorCode heredado del tipo FirebaseException base. Puedes implementar la lógica de manejo de errores que inspecciona ambos códigos de error si es necesario.

Reclamaciones personalizadas de Authentication

Se quitó el método obsoleto FirebaseAuth.setCustomClaims(). En su lugar, usa FirebaseAuth.setCustomUserClaims().

Antes (<= v6.15.0)

FirebaseAuth.getInstance().setCustomClaims(uid, claims);

Ahora (>= v7.0.0)

FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);

Constructores de notificaciones de FCM

Se quitaron los constructores obsoletos de la clase Notification. Usa la clase Notification.Builder para crear instancias nuevas.

Antes (<= v6.15.0)

Notification notification = new Notification(title, body, url);

Ahora (>= v7.0.0)

Notification notification = Notification.builder()
  .setTitle(title)
  .setBody(body)
  .setImage(url)
  .build();