Migrar para o SDK Admin para Java v7

A versão 7.0.0 do SDK Admin do Firebase para Java introduz algumas alterações importantes na API. Basicamente, as alterações de API nessa versão são adições e melhorias no tratamento de erros para Authentication e FCM.

Alterações gerais no tratamento de erros

Agora, a classe base FirebaseException expõe vários novos atributos:

  • ErrorCode getErrorCode(): retorna o código de erro da plataforma associado à exceção. Todas as instâncias de FirebaseException têm um código de erro de plataforma não nulo. Os possíveis códigos de erro da plataforma são definidos como um novo tipo de enum ErrorCode.
  • IncomingHttpResponse getHttpResponse(): retorna a resposta HTTP associada à exceção. Poderá ser nula se a exceção for causada por um motivo diferente de uma resposta HTTP de back-end.

Como antes, a maioria dos outros tipos de exceção definidos no SDK (por exemplo, FirebaseAuthException e FirebaseMessagingException) são derivadas da classe base FirebaseException.

Alterações no tratamento de erros de autenticação

Todas as APIs na classe FirebaseAuth podem gerar instâncias de FirebaseAuthException. APIs assíncronas (por exemplo, métodos que retornam ApiFuture) podem falhar com um ExecutionException que encapsula um FirebaseAuthException. Os códigos de erro específicos do Auth são definidos publicamente no novo tipo de enum AuthErrorCode.

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

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

O AuthErrorCode é adicionado ao ErrorCode herdado do tipo base FirebaseException. É possível implementar a lógica de tratamento de erros que inspeciona os dois códigos de erro, se necessário.

Alterações no tratamento de erros FCM

Todas as APIs na classe FirebaseMessaging podem gerar instâncias de FirebaseMessagingException. APIs assíncronas (por exemplo, métodos que retornam ApiFuture) podem falhar com um ExecutionException que encapsula um FirebaseMessagingException. Os códigos de erro específicos do Authentication são definidos publicamente no novo tipo enumerado MessagingErrorCode.

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

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

O MessagingErrorCode é adicionado ao ErrorCode herdado do tipo base FirebaseException. É possível implementar a lógica de tratamento de erros que inspeciona os dois códigos de erro, se necessário.

Declarações personalizadas do Authentication

O método FirebaseAuth.setCustomClaims() obsoleto foi removido. Use o FirebaseAuth.setCustomUserClaims(), como alternativa.

Antes (<= v6.15.0)

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

Hoje (>= v7.0.0)

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

Construtores de notificação do FCM

Os construtores obsoletos da classe Notification foram removidos. Use a classe Notification.Builder para criar novas instâncias.

Antes (<= v6.15.0)

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

Hoje (>= v7.0.0)

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