Version 7.0.0 des Firebase Admin SDK für Java enthält einige wichtige API-Änderungen. Die API-Änderungen in diesem Release sind hauptsächlich Ergänzungen und Verbesserungen bei der Fehlerbehandlung für Authentication und FCM.
Allgemeine Änderungen bei der Fehlerbehandlung
Die FirebaseException
-Basisklasse 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 Plattformfehlercode, der nicht null ist. 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 HTTP-Antwort des Back-Ends ausgelöst wurde.
Wie zuvor werden die meisten anderen im SDK definierten Ausnahmetypen (z. B. FirebaseAuthException
, FirebaseMessagingException
) von der Basisklasse FirebaseException
abgeleitet.
Änderungen bei der Fehlerbehandlung bei der Authentifizierung
Alle APIs in der Klasse FirebaseAuth
können Instanzen von FirebaseAuthException
auslösen. Asynchrone APIs (z. B. Methoden, die ein ApiFuture
zurückgeben) können mit einem ExecutionException
fehlschlagen, das ein FirebaseAuthException
umschließt. Die Auth-spezifischen Fehlercodes sind öffentlich im neuen Enum-Typ AuthErrorCode
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");
}
}
Die AuthErrorCode
ist zusätzlich zur ErrorCode
, die vom Basistyp FirebaseException
übernommen wird. Sie können eine Fehlerbehandlungslogik implementieren, die bei Bedarf beide Fehlercodes prüft.
Änderungen bei der FCM-Fehlerbehandlung
Alle APIs in der Klasse FirebaseMessaging
können Instanzen von FirebaseMessagingException
auslösen. Asynchrone APIs (z. B. Methoden, die ein ApiFuture
zurückgeben) können mit einem ExecutionException
fehlschlagen, das ein FirebaseMessagingException
umschließt. Die Authentication-spezifischen Fehlercodes sind öffentlich im neuen Enum-Typ MessagingErrorCode
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");
}
}
Die MessagingErrorCode
ist zusätzlich zur ErrorCode
, die vom Basis-Typ FirebaseException
übernommen wird. Sie können eine Logik zur Fehlerbehandlung implementieren, die bei Bedarf beide Fehlercodes prüft.
Authentication Benutzerdefinierte Anforderungen
Die verworfene 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 verworfenen Konstruktoren der Klasse Notification
wurden entfernt. Verwenden Sie die Klasse Notification.Builder
, 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();