Wersja 7.0.0 pakietu Firebase Admin SDK dla Java wprowadza kilka ważnych zmian w interfejsie API. Przede wszystkim zmiany API w tej wersji to dodatki i ulepszenia w obsłudze błędów w przypadku uwierzytelniania i FCM.
Ogólne zmiany w obsłudze błędów
Klasa bazowa FirebaseException
udostępnia teraz kilka nowych atrybutów:
-
ErrorCode getErrorCode()
: Zwraca kod błędu platformy powiązany z wyjątkiem. Każde wystąpienie wyjątkuFirebaseException
gwarantuje kod błędu platformy inny niż null. Możliwe kody błędów platformy są zdefiniowane jako nowy typ wyliczeniowyErrorCode
. -
IncomingHttpResponse getHttpResponse()
: Zwraca odpowiedź HTTP powiązaną z wyjątkiem. Może mieć wartość null, jeśli wyjątek został spowodowany z innego powodu niż odpowiedź HTTP zaplecza.
Podobnie jak poprzednio, większość innych typów wyjątków zdefiniowanych w zestawie SDK (na przykład FirebaseAuthException
, FirebaseMessagingException
) wywodzi się z klasy bazowej FirebaseException
.
Zmiany w obsłudze błędów uwierzytelniania
Wszystkie interfejsy API w klasie FirebaseAuth
mogą zgłaszać wystąpienia FirebaseAuthException
. Asynchroniczne interfejsy API (na przykład metody zwracające ApiFuture
) mogą zakończyć się niepowodzeniem w przypadku ExecutionException
, który otacza FirebaseAuthException
. Kody błędów specyficzne dla uwierzytelniania są publicznie zdefiniowane w nowym typie wyliczeniowym AuthErrorCode
.
Przed (<= 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");
}
}
Teraz (>= 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");
}
}
AuthErrorCode
jest dodatkiem do ErrorCode
odziedziczonego z podstawowego typu FirebaseException
. Można zaimplementować logikę obsługi błędów, która w razie potrzeby sprawdza oba kody błędów.
Zmiany w obsłudze błędów FCM
Wszystkie interfejsy API w klasie FirebaseMessaging
mogą zgłaszać instancje FirebaseMessagingException
. Asynchroniczne interfejsy API (na przykład metody zwracające ApiFuture
) mogą zakończyć się niepowodzeniem w przypadku ExecutionException
, który otacza FirebaseMessagingException
. Kody błędów specyficzne dla uwierzytelniania są publicznie zdefiniowane w nowym typie wyliczeniowym MessagingErrorCode
.
Przed (<= 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");
}
}
Teraz (>= 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");
}
}
Wartość MessagingErrorCode
stanowi dodatek do ErrorCode
odziedziczonej z podstawowego typu FirebaseException
. Można zaimplementować logikę obsługi błędów, która w razie potrzeby sprawdza oba kody błędów.
Niestandardowe oświadczenia dotyczące uwierzytelniania
Usunięto przestarzałą metodę FirebaseAuth.setCustomClaims()
. Zamiast tego użyj funkcji FirebaseAuth.setCustomUserClaims()
.
Przed (<= v6.15.0)
FirebaseAuth.getInstance().setCustomClaims(uid, claims);
Teraz (>= v7.0.0)
FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);
Konstruktory powiadomień FCM
Usunięto przestarzałe konstruktory klasy Notification
. Użyj klasy Notification.Builder
, aby utworzyć nowe instancje.
Przed (<= v6.15.0)
Notification notification = new Notification(title, body, url);
Teraz (>= v7.0.0)
Notification notification = Notification.builder()
.setTitle(title)
.setBody(body)
.setImage(url)
.build();