遷移至 Java Admin SDK v7

Java 適用的 Firebase Admin SDK 7.0.0 版在 API 中導入了一些重要變更。主要而言,這個版本的 API 變更是針對 Authentication md FCM 錯誤處理方式的新增和改善項目。

一般錯誤處理機制的變更

FirebaseException 基礎類別現在會公開幾個新的屬性:

  • ErrorCode getErrorCode():傳回與例外狀況相關聯的平台錯誤代碼。每個 FirebaseException 例項都保證會具有非空值的平台錯誤代碼。可能的平台錯誤代碼已定義為新的列舉類型 ErrorCode
  • IncomingHttpResponse getHttpResponse():傳回與例外狀況相關聯的 HTTP 回應。如果例外狀況是由非後端 HTTP 回應所造成,則可能為空值。

如前所述,SDK 中定義的其他大部分例外狀況類型 (例如 FirebaseAuthExceptionFirebaseMessagingException) 都是衍生自 FirebaseException 基礎類別。

驗證錯誤處理機制變更

FirebaseAuth 類別中的所有 API 可能會擲回 FirebaseAuthException 的例項。非同步 API (例如傳回 ApiFuture 的方法) 可能會在包裝 FirebaseAuthExceptionExecutionException 中失敗。在新的列舉型別 AuthErrorCode 中,公開定義了 Auth 專屬的錯誤代碼。

舊版 (<= 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");
  }
}

現已支援 (7.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 的方法) 可能會在包裝 FirebaseMessagingExceptionExecutionException 中失敗。Authentication 專屬錯誤代碼已在新的列舉類型 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");
  }
}

現已支援 (7.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);

現已支援 (7.0.0 以上版本)

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

FCM 通知建構函式

已移除 Notification 類別已淘汰的建構函式。使用 Notification.Builder 類別建立新的例項。

舊版 (<= v6.15.0)

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

現已支援 (7.0.0 以上版本)

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