Przejdź na pakiet Java Admin SDK w wersji 7

Wersja 7.0.0 pakietu Firebase Admin SDK na Javę wprowadza kilka ważnych zmian w interfejsie API. Zmiany w interfejsie API w tej wersji to przede wszystkim dodatki i ulepszenia w zakresie obsługi błędów w przypadku Authentication 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żda instancja FirebaseException ma gwarantowany kod błędu platformy, który nie jest pusty. Możliwe kody błędów platformy są zdefiniowane jako nowy typ wyliczeniowy ErrorCode.
  • IncomingHttpResponse getHttpResponse(): zwraca odpowiedź HTTP powiązaną z wyjątkiem. Może mieć wartość null, jeśli wyjątek został spowodowany przez coś innego niż odpowiedź HTTP z backendu.

Podobnie jak wcześniej większość innych typów wyjątków zdefiniowanych w pakiecie SDK (np. FirebaseAuthException, FirebaseMessagingException) jest wyprowadzana z klasy bazowej FirebaseException.

Zmiany w obsłudze błędów uwierzytelniania

Wszystkie interfejsy API w klasie FirebaseAuth mogą zgłaszać instancje FirebaseAuthException. Asynchroniczne interfejsy API (np. metody, które zwracają ApiFuture) mogą zakończyć się niepowodzeniem z powodu ExecutionException, który zawiera FirebaseAuthException. Kody błędów specyficzne dla uwierzytelniania są publicznie zdefiniowane w nowym typie wyliczeniowym AuthErrorCode.

Wcześniej (<= 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 klasy bazowej FirebaseException typu. W razie potrzeby możesz zaimplementować logikę obsługi błędów, która 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 (np. metody, które zwracają ApiFuture) mogą zakończyć się niepowodzeniem z powodu ExecutionException, który zawiera FirebaseMessagingException. Kody błędów specyficzne dla Authentication są publicznie zdefiniowane w nowym typie wyliczeniowym MessagingErrorCode.

Wcześniej (<= 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");
  }
}

MessagingErrorCode jest dodatkiem do ErrorCode odziedziczonego z klasy bazowej FirebaseException. W razie potrzeby możesz zaimplementować logikę obsługi błędów, która sprawdza oba kody błędów.

Authentication niestandardowe roszczenia

Usunięto przestarzałą metodę FirebaseAuth.setCustomClaims(). Zamiast niej użyj FirebaseAuth.setCustomUserClaims().

Wcześniej (<= v6.15.0)

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

Teraz (>= v7.0.0)

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

FCM konstruktory powiadomień

Usunięto przestarzałe konstruktory klasy Notification. Do tworzenia nowych instancji używaj klasy Notification.Builder.

Wcześniej (<= 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();