🚀 6.6 Escopos e Consentimento OAuth 2.0

O acesso a dados sensíveis, como a agenda de um usuário, é regido pelo protocolo OAuth 2.0. No Android moderno, facilitamos esse processo através de Escopos (Scopes), que definem exatamente quais “portas” seu aplicativo tem permissão para abrir.

O Que São Escopos?

Um escopo é uma String que identifica um recurso. Para o Google Calendar, os principais são:

  • CalendarScopes.CALENDAR_READONLY: Apenas leitura.
  • CalendarScopes.CALENDAR: Leitura e escrita (o que utilizaremos no BoaViagem).

Fluxo de Consentimento GMS

Diferente do passado, onde usávamos o AccountManager de forma complexa, o Google Play Services apresenta a tela de consentimento automaticamente quando você solicita o escopo no login:

// Configurando a solicitação de autorização
var gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestEmail()
        .requestScopes(new Scope(CalendarScopes.CALENDAR))
        .build();

Verificação de Autorização em Tempo de Execução

Mesmo que o usuário esteja logado, ele pode ter negado o acesso específico à Agenda. Sempre verifique se o escopo foi concedido antes de tentar uma operação:

private void verificarAutorizacaoAgenda() {
    var conta = GoogleSignIn.getLastSignedInAccount(this);
    if (conta != null && GoogleSignIn.hasPermissions(conta, new Scope(CalendarScopes.CALENDAR))) {
        // Autorização confirmada! Seguir para criação de eventos.
        registrarViagemNaAgenda();
    } else {
        // Solicita autorização adicional
        GoogleSignIn.requestPermissions(
                this, 
                RC_AUTHORIZE_CALENDAR, 
                conta, 
                new Scope(CalendarScopes.CALENDAR)
        );
    }
}

IMPORTANT

Segurança por Design: Nunca peça todos os escopos de uma vez se não for usá-los imediatamente. A Engenharia Premium preza pela “Autorização Incremental”: peça apenas o login básico no início e o acesso à Agenda apenas quando o usuário salvar uma viagem.

TIP

No Java 17, a manipulação de escopos e verificações de conta é atômica e segura. O uso do GoogleSignIn.hasPermissions() evita que seu app lance exceções de “403 Forbidden” ao tentar acessar a API sem o devido consentimento.


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