🚀 6.7 Renovação Automática e Resiliência

No desenvolvimento mobile, a conectividade é incerta e os tokens de acesso expiram rapidamente (geralmente em 1 hora). O Google Play Services remove essa carga do desenvolvedor, gerenciando a renovação automática de tokens em segundo plano.

O Fim do Gerenciamento Manual de Tokens

Diferente do passado, onde precisávamos invalidar e solicitar tokens via AccountManager, o objeto GoogleAccountCredential do GMS detecta automaticamente um token expirado e solicita um novo ao servidor do Google antes de executar a chamada da API.

Silent Sign-In: Experiência Premium

Para que o usuário não precise clicar em “Login” toda vez que abrir o app, utilizamos o Silent Sign-In. Isso recupera a última sessão ativa de forma instantânea e silenciosa:

@Override
protected void onStart() {
    super.onStart();
    
    // Tenta recuperar a conta sem interagir com o usuário
    GoogleSignIn.silentSignIn()
        .addOnCompleteListener(this, task -> {
            try {
                var conta = task.getResult(ApiException.class);
                prosseguirParaDashboard(conta);
            } catch (ApiException e) {
                // Sessão expirou ou usuário deslogou fora do app
                solicitarLoginManual();
            }
        });
}

Tratando Falhas de Rede

Apesar da renovação automática, as requisições podem falhar por falta de internet. Utilize sempre o padrão de Retry ou informe o usuário de forma elegante:

IMPORTANT

User Recoverable Exceptions: Às vezes, o Google precisa que o usuário tome uma ação (ex: trocar a senha). Nestes casos, a API lança uma UserRecoverableAuthException. O Android fornece um Intent dentro dessa exceção que você deve iniciar para que o usuário resolva o problema na interface do sistema.

TIP

No Java 17, combine o silentSignIn() com Executors para garantir que a verificação de credenciais não cause “stuttering” (engasgos) na animação de abertura do seu aplicativo.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️