La versione 7.0.0 dell'SDK Firebase Admin per Java introduce alcune modifiche importanti nell'API. Le modifiche all'API in questa release riguardano principalmente 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. Per ogni istanza diFirebaseException
è garantito che il codice di errore della piattaforma sia diverso da null. 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 nullo se l'eccezione è stata causata da un motivo diverso da una risposta HTTP di backend.
Come in precedenza, la maggior parte degli altri tipi di eccezioni definiti nell'SDK (ad esempio FirebaseAuthException
, FirebaseMessagingException
) è derivata dalla classe di base FirebaseException
.
Modifiche alla gestione degli errori di autorizzazione
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 avvolge un
FirebaseAuthException
. I codici di errore specifici per l'autenticazione sono definiti pubblicamente nel nuovo tipo di enum AuthErrorCode
.
Versioni precedenti (<= 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 baseFirebaseException
. Se necessario, puoi implementare una logica di gestione degli errori che esamini entrambi i codici di errore.
FCM modifiche alla gestione degli errori
Tutte le API nella classe FirebaseMessaging
possono generare istanze di
FirebaseMessagingException
. Le API asincrone (ad esempio, i metodi che restituiscono un
ApiFuture
) potrebbero avere esito negativo 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 al ErrorCode
ereditato dal tipo
FirebaseException
di base. Se necessario, puoi implementare una logica di gestione degli errori che esamini entrambi i codici di errore.
Authentication rivendicazioni personalizzate
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 obsoleti della classe Notification
sono stati rimossi. Utilizza
la classe Notification.Builder
per creare nuove istanze.
Versioni precedenti (<= 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();