Sari la conținut

Conectează un Google Calendar

Acest ghid îți arată cum să conectezi Google Calendar la un spațiu de lucru. Conectarea este proprie fiecărui spațiu de lucru: sincronizează evenimentele acelui spațiu în Control Center, doar în citire. Vezi Calendar și programare pentru imaginea completă.

  1. Deschide Calendar în bara laterală.
  2. Apasă Adaugă un cont de calendar în bara laterală a calendarului. (Aceeași secțiune se află în Setări → Spațiu de lucru → Profil și identitate, sub Google Calendar.)
  3. Alege cum să autorizezi:
    • Folosește aplicația Google a Control Center — nimic de configurat. Aceasta este opțiunea implicită când build-ul tău vine cu una.
    • Folosește propriul client Google Cloud — lipește un id de client și un secret din propriul proiect (vezi Adu-ți propriul client Google).
  4. Apasă Conectează Google Calendar. Dialogul afișează un cod scurt și un link către pagina de dispozitiv a Google.
  5. Deschide acea pagină pe orice dispozitiv, introdu codul și aprobă accesul solicitat. Dialogul se închide singur, iar evenimentele tale încep să se sincronizeze.

Serverul, nu dispozitivul tău, rulează acest schimb și păstrează tokenul de reîmprospătare rezultat — de aceea codul se aprobă pe „orice dispozitiv”, nu în această aplicație anume.

Contul este conectat doar la spațiul de lucru activ. Schimbă spațiul de lucru și vei vedea în schimb calendarele acelui spațiu.

Fluxul de conectare solicită calendar.readonly plus adresa ta de e-mail — aceleași domenii pentru aplicația integrată și pentru un client pe care îl lipești. Control Center citește evenimentele; nu creează, nu editează, nu șterge și nu răspunde la invitații pe Google.

Serverul deține programul: parcurge conturile conectate ale fiecărui spațiu de lucru la fiecare două minute și scrie evenimentele în baza de date a spațiului de lucru. Clienții nu vorbesc niciodată cu Google — citesc ce a scris serverul.

Parcurgerea este incrementală. Prima trecere pentru fiecare calendar preia o fereastră glisantă (60 de zile în urmă, 90 de zile înainte) și captează tokenul de sincronizare al Google; trecerile ulterioare prezintă acel token și primesc doar ce s-a schimbat, ceea ce face sustenabilă o cadență de două minute. Fereastra este reancorată printr-o sincronizare completă la fiecare 24 de ore și ori de câte ori Google invalidează tokenul.

Tokenurile de reîmprospătare stau pe server, în secrets.json, în directorul de date al serverului, scrise cu acces doar pentru proprietar (0600) — nu în keychain-ul sistemului de operare și niciodată pe un dispozitiv client.

Un spațiu de lucru poate conecta mai multe conturi Google (de exemplu, unul de serviciu și unul personal). Repetă pasul de conectare pentru fiecare; evenimentele lor se comasează în aceleași vizualizări de lună / săptămână / agendă. Fiecare cont se sincronizează și se reîmprospătează independent, iar fiecare poate fi deconectat separat.

Dacă Google invalidează definitiv tokenul unui cont (o sesiune revocată sau expirată de mult timp), sincronizarea se oprește și Control Center afișează un banner Reconectează pe calendar, plus o notificare pe desktop. Apasă Reconectează și aprobă un cod nou; bannerul dispare la următoarea sincronizare reușită.

Din bara laterală a calendarului (sau Setări → Spațiu de lucru → Profil și identitate), apasă Deconectează pe cont. Aceasta șterge evenimentele sincronizate și curăță tokenurile stocate pe server.

Un server fără interfață grafică conectează același cont din propriul terminal:

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

Afișează un cod și un URL, așteaptă aprobarea, apoi stochează tokenurile și sincronizează la următoarea parcurgere.

O construcție din surse nu include niciun client Google, așa că id-ul și secretul sunt obligatorii — setează GOOGLE_OAUTH_CLIENT_ID și GOOGLE_OAUTH_CLIENT_SECRET. Nu există un flag --google-client-id (flag-urile necunoscute sunt ignorate). Fără perechea de variabile de mediu, comanda se încheie cu o eroare de client lipsă.

Adu-ți propriul client Google (fork-uri și auto-găzduire)

Secțiune intitulată „Adu-ți propriul client Google (fork-uri și auto-găzduire)”

Build-urile de lansare includ un client Google, așa că majoritatea oamenilor nu ating niciodată acest subiect. Adu-ți propriul client dacă construiești din surse, rulezi propriul server sau vrei ca ecranul de consimțământ să numească propriul proiect.

  1. În Google Cloud Console, activează Google Calendar API și configurează ecranul de consimțământ OAuth, adăugând domeniile calendar.readonly, openid și email. Cât timp aplicația nu este verificată, adaugă-te ca utilizator de test. Adăugarea lui calendar.events pe ecranul de consimțământ nu activează RSVP — Control Center nu solicită niciodată acel domeniu.
  2. Creează un ID client OAuth cu tipul de aplicație TVs and limited input devices și copiază atât id-ul de client, cât și secretul de client.
  3. Furnizează-le fie per conectare (alege Folosește propriul client Google Cloud în dialog), fie la nivel de server cu GOOGLE_OAUTH_CLIENT_ID și GOOGLE_OAUTH_CLIENT_SECRET.

O pereche la nivel de server o înlocuiește pe cea integrată peste tot, inclusiv în spatele opțiunii „folosește aplicația Google a Control Center” — așa că pe propriul tău server, acea opțiune este aplicația ta.

Secretul de client nu părăsește niciodată serverul: niciun răspuns RPC nu îl conține, iar un cont conectat prin clientul propriu al serverului stochează un marcaj în loc de o copie a perechii, așa că rotirea lui înseamnă doar o repornire cu o valoare nouă.

Simptom Cauză probabilă
Dialogul nu oferă nicio opțiune integrată Această construcție nu include niciun client Google (o construcție din surse) sau serverul a fost pornit cu doar o jumătate a perechii. Atât id-ul, cât și secretul sunt obligatorii
invalid_scope la pornirea fluxului Calendar nu este permis pentru un client cu cod de dispozitiv în acel proiect Cloud. Folosește în schimb un proiect cu client loopback sau web
invalid_client de la Google Clientul nu este un client de tip TVs and limited input devices sau id-ul și secretul provin din clienți diferiți
Aprobarea reușește, dar sincronizarea este goală Contul tău nu este utilizator de test pe ecranul de consimțământ sau calendar.readonly nu a fost acordat
Codul expiră înainte să îl aprobi Codurile de dispozitiv sunt de scurtă durată. Pornește din nou conectarea pentru unul nou
„Nu s-a putut actualiza răspunsul” la un RSVP Comportament așteptat: fluxul de conectare nu solicită niciodată calendar.events
Sincronizarea se oprește cu un avertisment de reîmprospătare în jurnalul serverului Contul a fost conectat cu un client care nu mai este configurat. Reconectează contul sau restaurează id-ul și secretul acelui client