Migrare a Java Admin SDK v7

La versione 7.0.0 di Firebase Admin SDK per Java introduce alcune importanti modifiche nell'API. Principalmente, le modifiche API in questa versione sono aggiunte e miglioramenti nella gestione degli errori per l'autenticazione e FCM.

Modifiche generali alla gestione degli errori

La classe base FirebaseException ora espone diversi nuovi attributi:

  • ErrorCode getErrorCode() : restituisce il codice di errore della piattaforma associato all'eccezione. È garantito che ogni istanza di FirebaseException abbia un codice di errore della piattaforma non nullo. I possibili codici di errore della piattaforma sono definiti come un nuovo tipo enum ErrorCode .
  • IncomingHttpResponse getHttpResponse() : restituisce la risposta HTTP associata all'eccezione. Può essere nullo se l'eccezione è stata causata da un motivo diverso da una risposta HTTP di backend.

Come in precedenza, la maggior parte degli altri tipi di eccezioni definiti nell'SDK (ad esempio, FirebaseAuthException , FirebaseMessagingException ) derivano dalla classe base FirebaseException .

Modifiche alla gestione degli errori di autenticazione

Tutte le API nella classe FirebaseAuth possono generare istanze di FirebaseAuthException . Le API asincrone (ad esempio, i metodi che restituiscono un ApiFuture ) potrebbero non riuscire con un ExecutionException che racchiude un FirebaseAuthException . I codici di errore specifici di Auth sono definiti pubblicamente nel nuovo tipo di enum AuthErrorCode .

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

Ora (>= 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 è in aggiunta ErrorCode ereditato dal tipo FirebaseException di base. Se necessario, è possibile implementare una logica di gestione degli errori che controlli entrambi i codici di errore.

Modifiche alla gestione degli errori FCM

Tutte le API nella classe FirebaseMessaging possono generare istanze di FirebaseMessagingException . Le API asincrone (ad esempio, i metodi che restituiscono un ApiFuture ) potrebbero non riuscire con un ExecutionException che racchiude un FirebaseMessagingException . I codici di errore specifici dell'autenticazione sono definiti pubblicamente nel nuovo tipo di enum MessagingErrorCode .

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

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

Il MessagingErrorCode è in aggiunta al ErrorCode ereditato dal tipo FirebaseException di base. Se necessario, è possibile implementare una logica di gestione degli errori che controlli entrambi i codici di errore.

Attestazioni personalizzate di autenticazione

Il metodo deprecato FirebaseAuth.setCustomClaims() è stato rimosso. Utilizza invece FirebaseAuth.setCustomUserClaims() .

Prima (<= v6.15.0)

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

Ora (>= v7.0.0)

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

Costruttori di notifiche FCM

I costruttori deprecati della classe Notification sono stati rimossi. Utilizza la classe Notification.Builder per creare nuove istanze.

Prima (<= v6.15.0)

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

Ora (>= v7.0.0)

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