Przejdź na pakiet Java Admin SDK w wersji 7

Wersja 7.0.0 pakietu Firebase Admin SDK na platformę Java wprowadza ważne zmiany w interfejsie API. W tej wersji zmiany w interfejsie API dotyczą głównie dodatków i ulepszeń w obsługiwaniu błędów w przypadku interfejsów AuthenticationFCM.

Ogólne zmiany w obsłudze 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 instancja FirebaseException ma gwarantowany niezerowy kod błędu platformy. Możliwe kody błędów platformy są zdefiniowane jako nowy typ za pomocą enum ErrorCode.
  • IncomingHttpResponse getHttpResponse(): zwraca odpowiedź HTTP powiązaną z wyjątkiem. Może być równa null, jeśli wyjątek został spowodowany z powodu innego niż odpowiedź HTTP z tego 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ługiwaniu 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 ExecutionException, który zawiera FirebaseAuthException. Kody błędów związanych z autoryzacją są publicznie zdefiniowane w nowym typie zbioru AuthErrorCode.

Wersja 6.15.0 i starsze

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 dotyczące obsługi błędów

Wszystkie interfejsy API w klasie FirebaseMessaging mogą zgłaszać wyjątki FirebaseMessagingException. Interfejsy Async API (np. metody zwracające ApiFuture) mogą nie działać z ExecutionException, który zawiera FirebaseMessagingException. Kody błędów związane z 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");
  }
}

Obecnie (≥ w wersji 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");
  }
}

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 tego użyj kolumny FirebaseAuth.setCustomUserClaims().

Wersja 6.15.0 i starsze

FirebaseAuth.getInstance().setCustomClaims(uid, claims);

Obecnie (≥ w wersji 7.0.0)

FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);

FCM konstruktory powiadomień

Wycofane konstruktory klasy Notification zostały usunięte. Użyj klasy Notification.Builder, aby utworzyć nowe instancje.

Wersja 6.15.0 i starsze

Notification notification = new Notification(title, body, url);

Obecnie (≥ w wersji 7.0.0)

Notification notification = Notification.builder()
  .setTitle(title)
  .setBody(body)
  .setImage(url)
  .build();