Przeprowadź migrację do pakietu Java Admin SDK v7

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ątku FirebaseException gwarantuje kod błędu platformy inny niż null. 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 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();