🧩 Exercícios - Cap 20: Login na Arena: Auth e Tokens

📖 Ver Cap 20

🎯 Antes de começar

No Cap 20 você criou gerarHeader (Prática 1), entendeu a expiração de tokens (Prática 2) e criou LogInterceptor (Prática 3), além do AuthInterceptor do exemplo. Depois de completar as três Práticas, faça o exercício extra abaixo para usar os dois interceptors juntos na mesma chamada Retrofit.


💪 Exercício Extra 1: Combinando Interceptors — Auth + Log (15 min)

Objetivo: Registrar AuthInterceptor e LogInterceptor no mesmo OkHttpClient.Builder(), entendendo que cada addInterceptor adiciona um elo na corrente de requisições.

Passos:

  1. Crie a função criarRetrofitComLog, baseada em criarRetrofit, mas adicionando dois interceptors:
    fun criarRetrofitComLog(token: String): Retrofit {
        val client = OkHttpClient.Builder()
            .addInterceptor(AuthInterceptor(token))
            .addInterceptor(LogInterceptor())
            .build()
    
        return Retrofit.Builder()
            .baseUrl("https://meu-jogo.beeceptor.com/")
            .client(client)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }
    
  2. Chame criarRetrofitComLog("pokedex_gold_2026") e faça (ou simule) uma chamada à API.

✅ Resultado Esperado


🆘 Resolução de Problemas Comuns

Erro Causa Solução
Apenas um dos comportamentos acontece (só o log, ou só o token) Apenas um .addInterceptor(...) foi chamado Chame .addInterceptor(...) duas vezes — uma para cada interceptor, encadeados no OkHttpClient.Builder()
Unresolved reference: AuthInterceptor ou LogInterceptor As classes foram criadas em outro arquivo/pacote e não foram importadas Garanta que AuthInterceptor (exemplo do capítulo) e LogInterceptor (Prática 3) estejam acessíveis no mesmo arquivo ou com o import correto
Erro must override 'intercept' A classe LogInterceptor não implementa corretamente Interceptor Confirme class LogInterceptor : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { ... } }

⬅️ Voltar para Exercícios