Wersja 7.0.0 pakietu SDK Firebase Admin na platformę Java wprowadza ważne zmiany w interfejsie API. W tej wersji zmiany w interfejsie API to przede wszystkim dodatki i ulepszenia w obsłudze błędów w przypadku interfejsów Authentication i FCM.
Ogólne zmiany dotyczące obsługi błędów
FirebaseException
klasa podstawowa udostępnia teraz kilka nowych atrybutów:
ErrorCode getErrorCode()
: zwraca kod błędu platformy powiązany z wyjątkiem. Każda instancjaFirebaseException
ma gwarantowany niezerowy kod błędu platformy. Możliwe kody błędów platformy są zdefiniowane jako nowy typ za pomocą enumErrorCode
.IncomingHttpResponse getHttpResponse()
: zwraca odpowiedź HTTP powiązaną z wyjątkiem. Może mieć wartość null, jeśli wyjątek jest spowodowany czymś innym niż odpowiedź HTTP backendu.
Podobnie jak wcześniej większość innych typów wyjątków zdefiniowanych w pakiecie SDK (np. FirebaseAuthException
, FirebaseMessagingException
) pochodzi z klasy bazowej FirebaseException
.
Zmiany w obsłudze błędów uwierzytelniania
Wszystkie interfejsy API w klasie FirebaseAuth
mogą wywołać instancje
FirebaseAuthException
. Interfejsy Async API (np. metody zwracające ApiFuture
) mogą nie działać z użyciem ExecutionException
, który otacza FirebaseAuthException
. Kody błędów dotyczące uwierzytelniania są publicznie zdefiniowane w nowym typie wyliczenia AuthErrorCode
.
Przed (<= wersja 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");
}
}
Obecnie (≥ w wersji 7.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
jest dodatkowym atrybutem do ErrorCode
odziedziczonego z typu bazowego FirebaseException
. W razie potrzeby możesz zastosować logikę obsługi błędów, która sprawdza oba kody błędów.
FCM zmiany w obsłudze błędów
Wszystkie interfejsy API w klasie FirebaseMessaging
mogą zgłaszać wyjątki FirebaseMessagingException
. Asynchroniczne interfejsy API (na przykład metody, które zwracają wartość ApiFuture
) mogą zakończyć się niepowodzeniem, jeśli ExecutionException
opakowuje tag FirebaseMessagingException
. Kody błędów typowe dla funkcji Authentication są publicznie zdefiniowane w nowym typie wyliczenia MessagingErrorCode
.
Wersja 6.15.0 i starsze
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");
}
}
Now (wersja 7.0.0 lub nowsza)
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");
}
}
Ustawienie MessagingErrorCode
jest oprócz ustawienia ErrorCode
odziedziczonego z typu bazowego FirebaseException
. W razie potrzeby możesz zastosować logikę obsługi błędów, która sprawdza oba kody błędów.
Authentication roszczenia niestandardowe
Wycofana metoda FirebaseAuth.setCustomClaims()
została usunięta. Zamiast niego użyj właściwości FirebaseAuth.setCustomUserClaims()
.
Wersja 6.15.0 i starsze
FirebaseAuth.getInstance().setCustomClaims(uid, claims);
Now (wersja 7.0.0 lub nowsza)
FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);
FCM konstruktora powiadomień
Wycofane konstruktory klasy Notification
zostały usunięte. Użyj klasy Notification.Builder
, aby utworzyć nowe instancje.
Przed (<= wersja 6.15.0)
Notification notification = new Notification(title, body, url);
Obecnie (≥ w wersji 7.0.0)
Notification notification = Notification.builder()
.setTitle(title)
.setBody(body)
.setImage(url)
.build();