Migrar al SDK de administración de Java v7

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

Cambios generales en el manejo de errores

La clase base FirebaseException ahora expone varios atributos nuevos:

  • ErrorCode getErrorCode() : Devuelve 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 posibles códigos de error de la plataforma se definen como un nuevo tipo de enumeración ErrorCode .
  • IncomingHttpResponse getHttpResponse() : devuelve la respuesta HTTP asociada con la excepción. Puede ser nulo si la excepción fue causada por un motivo distinto a una respuesta HTTP de backend.

Como antes, la mayoría de los demás tipos de excepciones definidos en el SDK (por ejemplo, FirebaseAuthException , FirebaseMessagingException ) se derivan de la clase base FirebaseException .

Cambios en el manejo de errores de autenticación

Todas las API de la clase FirebaseAuth pueden generar instancias de FirebaseAuthException . Las API asíncronas (por ejemplo, los métodos que devuelven ApiFuture ) pueden fallar con una ExecutionException que envuelve una FirebaseAuthException . Los códigos de error específicos de autenticación 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");
  }
}

AuthErrorCode se suma al ErrorCode heredado del tipo base FirebaseException . Puede implementar una lógica de manejo de errores que inspeccione 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 devuelven ApiFuture ) pueden fallar con una ExecutionException que envuelve una FirebaseMessagingException . Los códigos de error específicos de autenticación 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");
  }
}

MessagingErrorCode se suma al ErrorCode heredado del tipo FirebaseException base. Puede implementar una lógica de manejo de errores que inspeccione ambos códigos de error si es necesario.

Reclamaciones personalizadas de autenticación

Se eliminó el método obsoleto FirebaseAuth.setCustomClaims() . Utilice FirebaseAuth.setCustomUserClaims() en su lugar.

Antes (<= v6.15.0)

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

Ahora (>= v7.0.0)

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

Constructores de notificaciones FCM

Se han eliminado los constructores obsoletos de la clase Notification . Utilice la clase Notification.Builder para crear nuevas instancias.

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();