Version 7.0.0 des Firebase Admin SDK für Java bringt einige wichtige Änderungen an der API mit sich. Die API-Änderungen in dieser Version umfassen hauptsächlich Ergänzungen und Verbesserungen bei der Fehlerbehandlung für Authentication und FCM.
Änderungen bei der allgemeinen Fehlerbehandlung
Die Basisklasse FirebaseException
weist jetzt mehrere neue Attribute auf:
ErrorCode getErrorCode()
: Gibt den Plattformfehlercode zurück, der mit der Ausnahme verknüpft ist. Jede Instanz vonFirebaseException
hat garantiert einen nicht nullwertigen Plattformfehlercode. Mögliche Plattformfehlercodes werden als neuer Enum-TypErrorCode
definiert.IncomingHttpResponse getHttpResponse()
: Gibt die HTTP-Antwort zurück, die mit der Ausnahme verknüpft ist. Kann null sein, wenn die Ausnahme aus einem anderen Grund als einer Back-End-HTTP-Antwort verursacht wurde.
Wie bereits erwähnt, sind die meisten anderen im SDK definierten Ausnahmetypen (z. B. FirebaseAuthException
, FirebaseMessagingException
) von der Basisklasse FirebaseException
abgeleitet.
Änderungen bei der Authentifizierungsfehlerbehandlung
Alle APIs der Klasse FirebaseAuth
können Instanzen von FirebaseAuthException
auswerfen. Asynchrone APIs (z. B. Methoden, die ein ApiFuture
zurückgeben) können mit einem ExecutionException
fehlschlagen, der einen FirebaseAuthException
umschließt. Die Auth-spezifischen Fehlercodes sind im neuen Enum-Typ AuthErrorCode
öffentlich definiert.
Vorher (bis Version 6.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");
}
}
Jetzt (Version 7.0.0 und höher)
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
ist zusätzlich zu ErrorCode
, das vom Basistyp FirebaseException
übernommen wird. Sie können eine Fehlerbehandlungslogik implementieren, die bei Bedarf beide Fehlercodes prüft.
Änderungen an der FCM-Fehlerbehandlung
Alle APIs der Klasse FirebaseMessaging
können Instanzen von FirebaseMessagingException
auswerfen. Asynchrone APIs (z. B. Methoden, die eine ApiFuture
zurückgeben) können mit einer ExecutionException
fehlschlagen, die eine FirebaseMessagingException
umschließt. Die Authentication-spezifischen Fehlercodes sind im neuen Enum-Typ MessagingErrorCode
öffentlich definiert.
Vorher (bis Version 6.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");
}
}
Jetzt (Version 7.0.0 und höher)
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
ist zusätzlich zu ErrorCode
, das vom Basistyp FirebaseException
übernommen wird. Sie können bei Bedarf eine Logik zur Fehlerbehandlung implementieren, die beide Fehlercodes überprüft.
Authentication benutzerdefinierte Ansprüche
Die verworfene Methode FirebaseAuth.setCustomClaims()
wurde entfernt. Verwenden Sie stattdessen FirebaseAuth.setCustomUserClaims()
.
Vorher (bis Version 6.15.0)
FirebaseAuth.getInstance().setCustomClaims(uid, claims);
Jetzt (Version 7.0.0 und höher)
FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);
FCM Benachrichtigungskonstruktoren
Die verworfenen Konstruktoren der Klasse Notification
wurden entfernt. Verwenden Sie die Notification.Builder
-Klasse, um neue Instanzen zu erstellen.
Vorher (bis Version 6.15.0)
Notification notification = new Notification(title, body, url);
Jetzt (Version 7.0.0 und höher)
Notification notification = Notification.builder()
.setTitle(title)
.setBody(body)
.setImage(url)
.build();