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.
Allgemeine Änderungen an der Fehlerbehandlung
Die Basisklasse FirebaseException
stellt jetzt mehrere neue Attribute bereit:
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 nicht durch eine 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 eine ApiFuture
zurückgeben) können mit einer ExecutionException
fehlschlagen, die eine FirebaseAuthException
umschließt. Die authentifizierungsspezifischen 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)
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 eine Fehlerbehandlungslogik implementieren, die bei Bedarf beide Fehlercodes prü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)
FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);
FCM Benachrichtigungskonstruktoren
Die veralteten 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();