Migrasikan ke Java Admin SDK v7

Versi 7.0.0 Firebase Admin SDK untuk Java memperkenalkan beberapa perubahan API penting. Pada dasarnya, perubahan API dalam rilis ini adalah penambahan dan peningkatan kualitas dalam penanganan error untuk Authentication dan FCM.

Perubahan penanganan error umum

Class dasar FirebaseException sekarang mengekspos beberapa atribut baru:

  • ErrorCode getErrorCode(): Menampilkan kode error platform yang terkait dengan pengecualian. Setiap instance FirebaseException dijamin memiliki kode error platform bukan null. Kode error platform yang mungkin ditentukan sebagai jenis enum baru ErrorCode.
  • IncomingHttpResponse getHttpResponse(): Menampilkan respons HTTP yang terkait dengan pengecualian. Mungkin null jika pengecualian disebabkan oleh alasan selain respons HTTP backend.

Seperti sebelumnya, sebagian besar jenis pengecualian lain yang ditetapkan dalam SDK (misalnya, FirebaseAuthException, FirebaseMessagingException) berasal dari class dasar FirebaseException.

Perubahan penanganan error Auth

Semua API di class FirebaseAuth dapat menampilkan instance FirebaseAuthException. API asinkron (misalnya, metode yang menampilkan ApiFuture) mungkin gagal dengan ExecutionException yang menggabungkan FirebaseAuthException. Kode error khusus Auth ditentukan secara publik dalam jenis enum baru AuthErrorCode.

Versi sebelumnya (<= 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");
  }
}

Versi sekarang (>= 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 adalah tambahan untuk ErrorCode yang diwarisi dari jenis FirebaseException dasar. Anda dapat menerapkan logika penanganan error yang memeriksa kedua kode error jika diperlukan.

Perubahan penanganan error FCM

Semua API di class FirebaseMessaging dapat menampilkan instance FirebaseMessagingException. API asinkron (misalnya, metode yang menampilkan ApiFuture) mungkin gagal dengan ExecutionException yang menggabungkan FirebaseMessagingException. Kode error khusus Authentication ditentukan secara publik dalam enum jenis baru MessagingErrorCode.

Versi sebelumnya (<= 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");
  }
}

Versi sekarang (>= 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 adalah tambahan untuk ErrorCode yang diwarisi dari jenis FirebaseException dasar. Anda dapat menerapkan logika penanganan error yang memeriksa kedua kode error jika diperlukan.

Klaim kustom Authentication

Metode FirebaseAuth.setCustomClaims() yang tidak digunakan lagi telah dihapus. Gunakan FirebaseAuth.setCustomUserClaims() sebagai gantinya.

Versi sebelumnya (<= v6.15.0)

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

Versi sekarang (>= v7.0.0)

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

Konstruktor notifikasi FCM

Konstruktor class Notification yang sudah tidak digunakan lagi telah dihapus. Gunakan class Notification.Builder untuk membuat instance baru.

Versi sebelumnya (<= v6.15.0)

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

Versi sekarang (>= v7.0.0)

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