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 deFirebaseException
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ónErrorCode
. -
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();