La versione 7.0.0 dell'SDK Firebase Admin per Java introduce alcune importanti modifiche all'API. Principalmente, le modifiche all'API in questa release sono aggiunte e miglioramenti alla gestione degli errori per Authentication e FCM.
Modifiche generali alla gestione degli errori
La classe base FirebaseException ora espone diversi nuovi attributi:
ErrorCode getErrorCode(): restituisce il codice di errore della piattaforma associato all'eccezione. Ogni istanza diFirebaseExceptionha sicuramente un codice di errore della piattaforma non nullo. I possibili codici di errore della piattaforma sono definiti come un nuovo tipo di enumErrorCode.IncomingHttpResponse getHttpResponse(): restituisce la risposta HTTP associata all'eccezione. Può essere null se l'eccezione è stata causata da un motivo diverso da una risposta HTTP del backend.
Come in precedenza, la maggior parte degli altri tipi di eccezioni definiti nell'SDK (ad esempio,
FirebaseAuthException, FirebaseMessagingException) derivano dalla
classe base FirebaseException.
Modifiche alla gestione degli errori di autenticazione
Tutte le API della classe FirebaseAuth possono generare istanze di FirebaseAuthException. Le API asincrone (ad esempio, i metodi che restituiscono un ApiFuture) potrebbero non riuscire con un ExecutionException che aggrega un FirebaseAuthException. I codici di errore specifici per l'autenticazione sono definiti pubblicamente nel nuovo tipo di enum AuthErrorCode.
Prima (<= 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");
}
}
Ora (>= 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 si aggiunge a ErrorCode ereditato dal tipo FirebaseException di base. Se necessario, puoi implementare una logica di gestione degli errori che esamina entrambi i codici di errore.
FCM modifiche alla gestione degli errori
Tutte le API della classe FirebaseMessaging possono generare istanze di FirebaseMessagingException. Le API asincrone (ad esempio, i metodi che restituiscono un ApiFuture) potrebbero non riuscire con un ExecutionException che aggrega un FirebaseMessagingException. I codici di errore specifici di Authentication sono definiti pubblicamente nel nuovo tipo di enum MessagingErrorCode.
Prima (<= 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");
}
}
Ora (>= 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 si aggiunge a ErrorCode ereditato dal tipo FirebaseException di base. Se necessario, puoi implementare una logica di gestione degli errori che esamina entrambi i codici di errore.
Authentication claim personalizzato
Il metodo FirebaseAuth.setCustomClaims() deprecato è stato rimosso. Utilizza invece FirebaseAuth.setCustomUserClaims().
Prima (<= v6.15.0)
FirebaseAuth.getInstance().setCustomClaims(uid, claims);
Ora (>= v7.0.0)
FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);
FCM costruttori di notifiche
I costruttori deprecati della classe Notification sono stati rimossi. Utilizza
la classe Notification.Builder per creare nuove istanze.
Prima (<= v6.15.0)
Notification notification = new Notification(title, body, url);
Ora (>= v7.0.0)
Notification notification = Notification.builder()
.setTitle(title)
.setBody(body)
.setImage(url)
.build();