Zum Java Admin SDK v7 migrieren

Version 7.0.0 des Firebase Admin SDK für Java führt einige wichtige Änderungen an der API ein. Die API-Änderungen in dieser Version sind hauptsächlich Ergänzungen und Verbesserungen bei der Fehlerbehandlung für Authentication und FCM.

Allgemeine Änderungen bei der Fehlerbehandlung

Die Basisklasse FirebaseException stellt jetzt mehrere neue Attribute bereit:

  • ErrorCode getErrorCode(): Gibt den Plattformfehlercode zurück, der mit der Ausnahme verknüpft ist. Jede Instanz von FirebaseException hat garantiert einen Plattformfehlercode, der nicht null ist. Mögliche Plattformfehlercodes werden als neuer Enum-Typ ErrorCode definiert.
  • IncomingHttpResponse getHttpResponse(): Gibt die HTTP-Antwort zurück, die mit der Ausnahme verknüpft ist. Kann null sein, wenn die Ausnahme durch einen anderen Grund als eine HTTP-Antwort des Back-Ends verursacht wurde.

Wie zuvor werden die meisten anderen im SDK definierten Ausnahmetypen (z. B. FirebaseAuthException, FirebaseMessagingException) von der Basisklasse FirebaseException abgeleitet.

Änderungen bei der Behandlung von Authentifizierungsfehlern

Alle APIs in der Klasse FirebaseAuth können Instanzen von FirebaseAuthException auslösen. Asynchrone APIs (z. B. Methoden, die ein ApiFuture zurückgeben) können mit einem ExecutionException fehlschlagen, das ein FirebaseAuthException umschließt. Die Auth-spezifischen Fehlercodes sind im neuen Enum-Typ AuthErrorCode öffentlich definiert.

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

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

Der AuthErrorCode wird zusätzlich zu dem ErrorCode verwendet, der vom Basis-FirebaseException-Typ übernommen wurde. Sie können eine Fehlerbehandlungslogik implementieren, die bei Bedarf beide Fehlercodes prüft.

FCM Änderungen an der Fehlerbehandlung

Alle APIs in der Klasse FirebaseMessaging können Instanzen von FirebaseMessagingException auslösen. Asynchrone APIs (z. B. Methoden, die ein ApiFuture zurückgeben) können mit einem ExecutionException fehlschlagen, das ein FirebaseMessagingException umschließt. Die Authentication-spezifischen Fehlercodes sind im neuen Enum-Typ MessagingErrorCode öffentlich definiert.

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

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

Der MessagingErrorCode ist zusätzlich zum ErrorCode, der vom Basistyp FirebaseException übernommen wird. Sie können eine Fehlerbehandlungslogik implementieren, die bei Bedarf beide Fehlercodes prüft.

Authentication benutzerdefinierte Ansprüche

Die verworfene Methode FirebaseAuth.setCustomClaims() wurde entfernt. Verwenden Sie stattdessen FirebaseAuth.setCustomUserClaims().

Vorher (<= v6.15.0)

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

Aktuell (>= v7.0.0)

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

FCM Benachrichtigungskonstruktoren

Die verworfenen Konstruktoren der Klasse Notification wurden entfernt. Verwenden Sie die Klasse Notification.Builder, um neue Instanzen zu erstellen.

Vorher (<= v6.15.0)

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

Aktuell (>= v7.0.0)

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