Java Admin SDK v7 への移行

Firebase Admin SDK for Java のバージョン 7.0.0 では、API にいくつかの重要な変更が導入されています。このリリースの API の変更は主に Authentication と FCM のエラー処理の追加と改善です。

一般的なエラー処理の変更点

FirebaseException 基本クラスでいくつか新しい属性が利用できるようになりました。

  • ErrorCode getErrorCode(): 例外に関連するプラットフォームのエラーコードを返します。FirebaseException のすべてのインスタンスは、null のプラットフォームのエラーコードが保証されます。プラットフォーム エラーコードは、新しい列挙型 ErrorCode として定義されています。
  • IncomingHttpResponse getHttpResponse(): 例外に関連付けられた HTTP レスポンスを返します。バックエンド HTTP レスポンス以外の理由によって例外が発生した場合は、null の可能性もあります。

以前と同様、SDK で定義された他の例外タイプ(FirebaseAuthExceptionFirebaseMessagingException など)は、FirebaseException 基本クラスから派生します。

Auth エラー処理の変更点

FirebaseAuth クラスのすべての API で FirebaseAuthException のインスタンスがスローされることがあります。非同期 API(ApiFuture を返すメソッドなど)は、FirebaseAuthException をラップする ExecutionException で失敗する場合があります。Auth 固有のエラーコードの定義は、新しい列挙型の 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 は、基本の FirebaseException タイプから継承された ErrorCode に追加されます。必要に応じて、両方のエラーコードを調べるエラー処理ロジックを実装できます。

FCM エラー処理の変更点

FirebaseMessaging クラスのすべての API で FirebaseMessagingException のインスタンスがスローされることがあります。非同期 API(ApiFuture を返すメソッドなど)は、FirebaseMessagingException をラップする ExecutionException で失敗する場合があります。Auth 固有のエラーコードの定義は、新しい列挙型の 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 は、基本の FirebaseException タイプから継承された ErrorCode に追加されます。必要に応じて、両方のエラーコードを調べるエラー処理ロジックを実装できます。

Authentication のカスタム クレーム

非推奨になった 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();