Saltar para o conteúdo

Ligar um Google Calendar

Este guia mostra-lhe como ligar o Google Calendar a um espaço de trabalho. É por espaço de trabalho: sincroniza os eventos desse espaço de trabalho para o Control Center, só de leitura. Consulte Calendário e agendamento para o panorama completo.

  1. Abra Calendário na barra lateral.
  2. Clique em Adicionar conta de calendário na barra lateral do calendário. (A mesma secção encontra-se em Definições → Espaço de trabalho → Perfil e identidade, em Google Calendar.)
  3. Escolha como autorizar:
    • Usar a aplicação Google do Control Center — não há nada a configurar. Esta é a predefinição quando a sua compilação inclui uma.
    • Usar o meu cliente do Google Cloud — cole um ID de cliente e um segredo do seu próprio projeto (consulte Traga o seu próprio cliente Google).
  4. Clique em Ligar o Google Calendar. A caixa de diálogo mostra um código curto e uma ligação para a página de dispositivos da Google.
  5. Abra essa página em qualquer dispositivo, introduza o código e aprove o acesso pedido. A caixa de diálogo fecha-se sozinha e os seus eventos começam a sincronizar.

É o servidor, e não o seu dispositivo, que realiza esta troca e guarda o token de atualização resultante — é por isso que o código é aprovado “em qualquer dispositivo” e não nesta aplicação em concreto.

A conta é ligada apenas ao espaço de trabalho ativo. Mude de espaço de trabalho e verá, em vez disso, os calendários desse espaço de trabalho.

O fluxo de ligação pede calendar.readonly mais o seu email — os mesmos âmbitos para a aplicação incorporada e para um cliente que cole. O Control Center lê eventos; não cria, edita, elimina nem responde a convites na Google.

O servidor é o dono do agendamento: a cada dois minutos percorre as contas ligadas de cada espaço de trabalho e escreve os eventos na base de dados do espaço de trabalho. Os clientes nunca falam com a Google — leem o que o servidor escreveu.

A recolha é incremental. A primeira passagem por calendário obtém uma janela móvel (60 dias para trás, 90 dias para a frente) e captura o token de sincronização da Google; as passagens seguintes apresentam esse token e recebem apenas o que mudou, que é o que torna suportável uma cadência de dois minutos. A janela é reancorada com uma sincronização completa a cada 24 horas e sempre que a Google invalida o token.

Os tokens de atualização residem no lado do servidor, no secrets.json, sob o diretório de dados do servidor, escritos apenas para o proprietário (0600) — não no keychain do sistema operativo e nunca num dispositivo cliente.

Um espaço de trabalho pode ligar várias contas Google (por exemplo, de trabalho e pessoal). Repita o passo de ligação para cada uma; os respetivos eventos são combinados nas mesmas vistas de mês, semana e agenda. Cada conta sincroniza e atualiza-se de forma independente e cada uma pode ser desligada por si só.

Se a Google invalidar definitivamente o token de uma conta (uma sessão revogada ou expirada há muito tempo), a sincronização para e o Control Center mostra um banner Voltar a ligar no calendário, juntamente com uma notificação no computador. Clique em Voltar a ligar e aprove um novo código; o banner desaparece na sincronização seguinte com êxito.

Na barra lateral do calendário (ou em Definições → Espaço de trabalho → Perfil e identidade), clique em Desligar na conta. Isto elimina os eventos sincronizados e limpa os tokens guardados no servidor.

Um servidor sem interface gráfica liga a mesma conta a partir do seu próprio terminal:

Janela do terminal
GOOGLE_OAUTH_CLIENT_ID=<id> GOOGLE_OAUTH_CLIENT_SECRET=<secret> \
cc_server calendar connect --data-dir <dir> --workspace <workspace-id>

Imprime um código e um URL, aguarda a aprovação e, em seguida, guarda os tokens e sincroniza na recolha seguinte.

Uma compilação a partir do código-fonte não inclui nenhum cliente Google, pelo que o ID e o segredo são obrigatórios — defina GOOGLE_OAUTH_CLIENT_ID e GOOGLE_OAUTH_CLIENT_SECRET. Não existe nenhuma flag --google-client-id (as flags desconhecidas são ignoradas). Sem o par de variáveis de ambiente, o comando termina com um erro de cliente em falta.

Traga o seu próprio cliente Google (forks e alojamento próprio)

Secção intitulada “Traga o seu próprio cliente Google (forks e alojamento próprio)”

As compilações oficiais incluem um cliente Google, pelo que a maioria das pessoas nunca precisa disto. Traga o seu próprio se compilar a partir do código-fonte, executar o seu próprio servidor ou quiser que o ecrã de consentimento apresente o seu próprio projeto.

  1. Na Google Cloud Console, ative a Google Calendar API e configure o ecrã de consentimento OAuth, adicionando os âmbitos calendar.readonly, openid e email. Enquanto a aplicação não estiver verificada, adicione-se como utilizador de teste. Adicionar calendar.events no ecrã de consentimento não ativa o RSVP — o Control Center nunca pede esse âmbito.
  2. Crie um ID de cliente OAuth do tipo de aplicação TVs and limited input devices e copie tanto o ID de cliente como o segredo do cliente.
  3. Forneça-os por ligação (escolha Usar o meu cliente do Google Cloud na caixa de diálogo) ou para todo o servidor com GOOGLE_OAUTH_CLIENT_ID e GOOGLE_OAUTH_CLIENT_SECRET.

Um par para todo o servidor substitui o incorporado em todo o lado, incluindo por trás da opção “usar a aplicação Google do Control Center” — por isso, no seu próprio servidor, essa opção é a sua aplicação.

O segredo do cliente nunca sai do servidor: nenhuma resposta RPC o transporta e uma conta ligada através do próprio cliente do servidor guarda um marcador em vez de uma cópia do par, pelo que rodá-lo é uma questão de reiniciar com um novo valor.

Sintoma Causa provável
A caixa de diálogo não oferece nenhuma opção incorporada Esta compilação não inclui nenhum cliente Google (uma compilação a partir do código-fonte), ou o servidor foi iniciado com apenas metade do par. Tanto o ID como o segredo são obrigatórios
invalid_scope ao iniciar o fluxo O Calendar não está autorizado para um cliente device-code nesse projeto Cloud. Use antes um projeto de cliente loopback ou web
invalid_client devolvido pela Google O cliente não é um cliente TVs and limited input devices, ou o ID e o segredo são de clientes diferentes
A aprovação é bem-sucedida mas a sincronização está vazia A sua conta não é um utilizador de teste no ecrã de consentimento, ou calendar.readonly não foi concedido
O código expira antes de o aprovar Os códigos de dispositivo têm vida curta. Inicie a ligação novamente para obter um novo
“Não foi possível atualizar a sua resposta” num RSVP Esperado: o fluxo de ligação nunca pede calendar.events
A sincronização para com um aviso de atualização no registo do servidor A conta foi ligada com um cliente que já não está configurado. Volte a ligar a conta ou restaure esse ID de cliente e segredo