Version 7.0.0 des Firebase Admin SDK für Java führt einige wichtige Änderungen in der API ein. Bei den API-Änderungen in dieser Version handelt es sich in erster Linie um Ergänzungen und Verbesserungen bei der Fehlerbehandlung für Authentifizierung und FCM.
Allgemeine Änderungen bei der Fehlerbehandlung
FirebaseException
Basisklasse stellt jetzt mehrere neue Attribute bereit:
-
ErrorCode getErrorCode()
: Gibt den mit der Ausnahme verbundenen Plattformfehlercode zurück. Es ist garantiert, dass jede Instanz vonFirebaseException
einen Plattformfehlercode ungleich Null aufweist. Mögliche Plattformfehlercodes werden als neuer Enum-TypErrorCode
definiert. -
IncomingHttpResponse getHttpResponse()
: Gibt die mit der Ausnahme verknüpfte HTTP-Antwort zurück. Kann null sein, wenn die Ausnahme durch einen anderen Grund als eine Back-End-HTTP-Antwort verursacht wurde.
Wie zuvor werden die meisten anderen im SDK definierten Ausnahmetypen (z. B. FirebaseAuthException
, FirebaseMessagingException
) von der FirebaseException
Basisklasse abgeleitet.
Änderungen bei der Behandlung von Authentifizierungsfehlern
Alle APIs in der FirebaseAuth
Klasse können Instanzen von FirebaseAuthException
auslösen. Asynchrone APIs (z. B. Methoden, die ein ApiFuture
zurückgeben) können mit einer ExecutionException
fehlschlagen, die eine FirebaseAuthException
umschließt. Die Auth-spezifischen Fehlercodes werden im neuen Enum-Typ AuthErrorCode
öffentlich definiert.
Vorher (<= 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");
}
}
Jetzt (>= 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");
}
}
Der AuthErrorCode
ist zusätzlich zum ErrorCode
, der vom Basistyp FirebaseException
geerbt wurde. Sie können eine Fehlerbehandlungslogik implementieren, die bei Bedarf beide Fehlercodes überprüft.
Änderungen bei der FCM-Fehlerbehandlung
Alle APIs in FirebaseMessaging
Klasse können Instanzen von FirebaseMessagingException
auslösen. Asynchrone APIs (z. B. Methoden, die ein ApiFuture
zurückgeben) können mit einer ExecutionException
fehlschlagen, die eine FirebaseMessagingException
umschließt. Die authentifizierungsspezifischen Fehlercodes werden im neuen Enum-Typ MessagingErrorCode
öffentlich definiert.
Vorher (<= 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");
}
}
Jetzt (>= 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");
}
}
Der MessagingErrorCode
ist zusätzlich zum ErrorCode
, der vom Basistyp FirebaseException
geerbt wurde. Sie können eine Fehlerbehandlungslogik implementieren, die bei Bedarf beide Fehlercodes überprüft.
Benutzerdefinierte Authentifizierungsansprüche
Die veraltete Methode FirebaseAuth.setCustomClaims()
wurde entfernt. Verwenden Sie stattdessen FirebaseAuth.setCustomUserClaims()
.
Vorher (<= v6.15.0)
FirebaseAuth.getInstance().setCustomClaims(uid, claims);
Jetzt (>= v7.0.0)
FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);
FCM-Benachrichtigungskonstruktoren
Die veralteten Konstruktoren der Notification
Klasse wurden entfernt. Verwenden Sie die Notification.Builder
-Klasse, um neue Instanzen zu erstellen.
Vorher (<= v6.15.0)
Notification notification = new Notification(title, body, url);
Jetzt (>= v7.0.0)
Notification notification = Notification.builder()
.setTitle(title)
.setBody(body)
.setImage(url)
.build();