La versione 7.0.0 dell'SDK Firebase Admin per Java introduce alcune modifiche importanti nell'API. Principalmente, le modifiche all'API in questa release riguardano aggiunte e miglioramenti nella 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 la garanzia di avere un codice di errore della piattaforma non nullo. I possibili codici di errore della piattaforma sono definiti come un nuovo tipo di enumerazioneErrorCode.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 di backend.
Come in precedenza, la maggior parte degli altri tipi di eccezione definiti nell'SDK (ad esempio,
FirebaseAuthException, FirebaseMessagingException) derivano dalla
classe base FirebaseException.
Modifiche alla gestione degli errori di autenticazione
Tutte le API nella 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 racchiude un
FirebaseAuthException. I codici di errore specifici per l'autenticazione sono definiti pubblicamente nel nuovo tipo di enumerazione 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 nella 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 racchiude un
FirebaseMessagingException. I codici di errore specifici di Authentication sono definiti pubblicamente nel nuovo tipo di enumerazione 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
controlli 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.
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();