Переход на Java Admin SDK v7

Версия 7.0.0 Firebase Admin SDK для Java вносит некоторые важные изменения в API. В первую очередь изменения API в этом выпуске представляют собой дополнения и улучшения обработки ошибок для аутентификации и FCM.

Общие изменения в обработке ошибок

Базовый класс FirebaseException теперь предоставляет несколько новых атрибутов:

  • ErrorCode getErrorCode() : возвращает код ошибки платформы, связанный с исключением. Каждый экземпляр FirebaseException гарантированно будет иметь ненулевой код ошибки платформы. Возможные коды ошибок платформы определяются как новый тип перечисления ErrorCode .
  • IncomingHttpResponse getHttpResponse() : возвращает HTTP-ответ, связанный с исключением. Может иметь значение null, если исключение было вызвано причиной, отличной от HTTP-ответа серверной части.

Как и прежде, большинство других типов исключений, определенных в SDK (например, FirebaseAuthException , FirebaseMessagingException ), являются производными от базового класса FirebaseException .

Изменения в обработке ошибок аутентификации

Все API в классе FirebaseAuth могут создавать экземпляры FirebaseAuthException . Асинхронные API (например, методы, возвращающие ApiFuture ) могут завершиться ошибкой из-за ExecutionException , которое обертывает FirebaseAuthException . Коды ошибок, специфичные для аутентификации, публично определены в новом типе перечисления AuthErrorCode .

До (<= 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");
  }
}

Сейчас (>= 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 является дополнением к ErrorCode унаследованному от базового типа FirebaseException . Вы можете реализовать логику обработки ошибок, которая при необходимости проверяет оба кода ошибок.

Изменения обработки ошибок FCM

Все API в классе FirebaseMessaging могут создавать экземпляры FirebaseMessagingException . Асинхронные API (например, методы, возвращающие ApiFuture ) могут завершиться ошибкой из-за ExecutionException , которое оборачивает FirebaseMessagingException . Коды ошибок, специфичные для аутентификации, публично определены в новом типе перечисления MessagingErrorCode .

До (<= 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");
  }
}

Сейчас (>= 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 является дополнением к ErrorCode унаследованному от базового типа FirebaseException . Вы можете реализовать логику обработки ошибок, которая при необходимости проверяет оба кода ошибок.

Пользовательские утверждения аутентификации

Устаревший метод FirebaseAuth.setCustomClaims() был удален. Вместо этого используйте FirebaseAuth.setCustomUserClaims() .

До (<= v6.15.0)

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

Сейчас (>= v7.0.0)

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

Конструкторы уведомлений FCM

Устаревшие конструкторы класса Notification были удалены. Используйте класс Notification.Builder для создания новых экземпляров.

До (<= v6.15.0)

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

Сейчас (>= v7.0.0)

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