🚀 6.5 Sincronização e Acesso à Google Agenda
Após o login bem-sucedido com Google Sign-In, o próximo passo é utilizar as credenciais obtidas para acessar a Google Agenda (Calendar API). No Android Studio 2023.1, fazemos isso integrando o GoogleSignInAccount com o cliente oficial do Google.
Configurando o Cliente da Agenda
Utilizamos o GoogleAccountCredential para autorizar nossas chamadas. Diferente do passado, não precisamos mais gerenciar tokens manualmente; o GMS cuida disso para nós:
private com.google.api.services.calendar.Calendar obterClienteAgenda(GoogleSignInAccount conta) {
var credential = GoogleAccountCredential.usingOAuth2(
this, Collections.singleton(CalendarScopes.CALENDAR));
credential.setSelectedAccount(conta.getAccount());
var transporte = AndroidHttp.newCompatibleTransport();
var jsonFactory = GsonFactory.getDefaultInstance();
return new com.google.api.services.calendar.Calendar.Builder(
transporte, jsonFactory, credential)
.setApplicationName("BoaViagem")
.build();
}Acesso Seguro em Segundo Plano (Java 17)
Requisições de rede para a Google Agenda não podem ocorrer na thread principal. Utilizamos o padrão de Executors para garantir uma execução fluida:
private void listarAgendas(GoogleSignInAccount conta) {
var executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
try {
var cliente = obterClienteAgenda(conta);
var agendas = cliente.calendarList().list().execute().getItems();
// Retorna para a thread principal para atualizar a UI
runOnUiThread(() -> processarAgendas(agendas));
} catch (IOException e) {
Log.e("BOAVIAGEM", "Erro ao acessar a agenda", e);
}
});
}IMPORTANT
Transporte de Dados: O uso do
AndroidHttp.newCompatibleTransport()garante que o app escolha automaticamente a melhor engine de rede disponível no dispositivo (como OkHttp ou a nativa), otimizando a performance.
TIP
No Android 2023.1, sempre que trabalhar com APIs do Google, prefira as bibliotecas de cliente oficiais fornecidas via Gradle. Elas abstraem toda a complexidade do protocolo HTTP e do parsing de JSON, permitindo que você foque na lógica do seu app.