Migrar para Java Admin SDK v7

A versão 7.0.0 do Firebase Admin SDK para Java apresenta algumas mudanças importantes na API. Principalmente, as alterações da API nesta versão são adições e melhorias no tratamento de erros para autenticação e FCM.

Mudanças gerais no tratamento de erros

A classe base FirebaseException agora expõe vários novos atributos:

  • ErrorCode getErrorCode() : Retorna o código de erro da plataforma associado à exceção. É garantido que cada instância de FirebaseException tenha um código de erro de plataforma não nulo. Possíveis códigos de erro de plataforma são definidos como um novo tipo de enum ErrorCode .
  • IncomingHttpResponse getHttpResponse() : Retorna a resposta HTTP associada à exceção. Pode ser nulo se a exceção tiver sido 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 , FirebaseMessagingException ) são derivados da classe base FirebaseException .

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

Todas as APIs da classe FirebaseAuth podem lançar instâncias de FirebaseAuthException . APIs assíncronas (por exemplo, métodos que retornam um ApiFuture ) podem falhar com um ExecutionException que agrupa um FirebaseAuthException . Os códigos de erro específicos do Auth são definidos publicamente no novo tipo de enumeração 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");
  }
}

Agora (>= 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 é um acréscimo ao ErrorCode herdado do tipo base FirebaseException . Você pode implementar uma lógica de tratamento de erros que inspeciona ambos os códigos de erro, se necessário.

Mudanças no tratamento de erros do FCM

Todas as APIs na classe FirebaseMessaging podem lançar instâncias de FirebaseMessagingException . APIs assíncronas (por exemplo, métodos que retornam um ApiFuture ) podem falhar com um ExecutionException que agrupa um FirebaseMessagingException . Os códigos de erro específicos da autenticação são definidos publicamente no novo tipo de enumeração 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");
  }
}

Agora (>= 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 é um acréscimo ao ErrorCode herdado do tipo base FirebaseException . Você pode implementar uma lógica de tratamento de erros que inspeciona ambos os códigos de erro, se necessário.

Declarações personalizadas de autenticação

O método obsoleto FirebaseAuth.setCustomClaims() foi removido. Use FirebaseAuth.setCustomUserClaims() em vez disso.

Antes (<= v6.15.0)

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

Agora (>= v7.0.0)

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

Construtores de notificação 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);

Agora (>= v7.0.0)

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