Zum Java Admin SDK v7 migrieren

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

Allgemeine Änderungen an 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 nicht nullwertigen Plattformfehlercode. Mögliche Plattformfehlercodes werden als neuer Enum-Typ ErrorCode definiert.
  • IncomingHttpResponse getHttpResponse(): Gibt die mit der Ausnahme verknüpfte HTTP-Antwort zurück. Kann null sein, wenn die Ausnahme nicht durch eine Back-End-HTTP-Antwort verursacht wurde.

Wie bereits erwähnt, sind die meisten anderen im SDK definierten Ausnahmetypen (z. B. FirebaseAuthException, FirebaseMessagingException) von der Basisklasse FirebaseException abgeleitet.

Änderungen bei der Authentifizierungsfehlerbehandlung

Alle APIs der Klasse FirebaseAuth können Instanzen von FirebaseAuthException auswerfen. Bei asynchronen APIs (z. B. Methoden, die eine ApiFuture zurückgeben) kann es zu einem Fehler kommen, wenn eine ExecutionException eine FirebaseAuthException umschließt. Die authentifizierungsspezifischen Fehlercodes sind im neuen Enum-Typ AuthErrorCode öffentlich definiert.

Vorher (bis Version 6.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");
  }
}

Jetzt (≥ Version 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");
  }
}

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

Änderungen an der FCM-Fehlerbehandlung

Alle APIs der Klasse FirebaseMessaging können Instanzen von FirebaseMessagingException auswerfen. Bei asynchronen APIs (z. B. Methoden, die eine ApiFuture zurückgeben) kann es zu einem Fehler kommen, wenn eine ExecutionException eine FirebaseMessagingException umschließt. Die Authentication-spezifischen Fehlercodes sind im neuen Enum-Typ MessagingErrorCode öffentlich definiert.

Vorher (bis Version 6.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");
  }
}

Jetzt (≥ Version 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 ist zusätzlich zu ErrorCode, das 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 (bis Version 6.15.0)

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

Jetzt (≥ Version 7.0.0)

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

FCM Benachrichtigungskonstruktoren

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

Vorher (bis Version 6.15.0)

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

Jetzt (≥ Version 7.0.0)

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