🚀 6.4 Autenticação com Google Sign-In

Para acessar a Google Agenda, o primeiro passo é a autenticação segura do usuário. No Android Studio 2023.1, utilizamos o Google Sign-In, que oferece uma experiência fluida e segura sem exigir que o usuário digite sua senha diretamente no seu app.

Configurando as Opções de Login

Através do GoogleSignInOptions, solicitamos as permissões (Escopos) necessárias para ler e gravar eventos na agenda:

private GoogleSignInClient googleSignInClient;
 
private void configurarGoogleSignIn() {
    var gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestScopes(new Scope(CalendarScopes.CALENDAR)) // Escopo da Agenda
            .build();
 
    googleSignInClient = GoogleSignIn.getClient(this, gso);
}

Iniciando o Fluxo de Login

Utilizamos o ActivityResultLauncher para capturar a resposta do login do Google:

private final var googleSignInLauncher = registerForActivityResult(
    new StartActivityForResult(), result -> {
        if (result.getResultCode() == Activity.RESULT_OK) {
            var task = GoogleSignIn.getSignedInAccountFromIntent(result.getData());
            tratarResultadoLogin(task);
        }
    });
 
private void iniciarLogin() {
    googleSignInLauncher.launch(googleSignInClient.getSignInIntent());
}

Tratando o Resultado (Java 17)

private void tratarResultadoLogin(Task<GoogleSignInAccount> completedTask) {
    try {
        var conta = completedTask.getResult(ApiException.class);
        // Login realizado com sucesso!
        Log.d("BOAVIAGEM", "Bem-vindo: " + conta.getEmail());
    } catch (ApiException e) {
        Log.e("BOAVIAGEM", "Erro no login: " + e.getStatusCode());
    }
}

IMPORTANT

Token de Identificação (ID Token): Para o BoaViagem, o login é apenas o meio de acesso à Agenda. O Google fornece um GoogleSignInAccount que contém o e-mail e as credenciais necessárias para as próximas etapas de integração.

TIP

No Java 17, o uso de try-catch com exceções específicas e var torna o tratamento do fluxo de login muito mais elegante e menos propenso a erros de tipagem.


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