Przejdź do głównej zawartości

Połącz Google Calendar

Ten poradnik pokazuje, jak połączyć Kalendarz Google z obszarem roboczym. Połączenie działa w zakresie obszaru roboczego: synchronizuje wydarzenia tego obszaru roboczego do Control Center w trybie tylko do odczytu. Pełny obraz znajdziesz w sekcji Kalendarz i planowanie.

  1. Otwórz Kalendarz na pasku bocznym.
  2. Kliknij Dodaj konto kalendarza na pasku bocznym kalendarza. (Ta sama sekcja znajduje się w Ustawienia → Obszar roboczy → Profil i tożsamość, pod Kalendarz Google.)
  3. Wybierz sposób autoryzacji:
    • Użyj aplikacji Google od Control Center — nic nie trzeba konfigurować. To ustawienie domyślne, gdy Twoja kompilacja zawiera taką aplikację.
    • Użyj mojego własnego klienta Google Cloud — wklej identyfikator klienta i sekret z własnego projektu (zobacz Własny klient Google (forki i self-hosting)).
  4. Kliknij Połącz Kalendarz Google. W oknie dialogowym pojawia się krótki kod i link do strony weryfikacji Google.
  5. Otwórz tę stronę na dowolnym urządzeniu, wpisz kod i zatwierdź żądany dostęp. Okno dialogowe zamknie się samo, a Twoje wydarzenia zaczną się synchronizować.

Tę wymianę przeprowadza serwer, a nie Twoje urządzenie, i to on przechowuje powstały token odświeżania — dlatego kod zatwierdza się na „dowolnym urządzeniu”, a nie specjalnie w tej aplikacji.

Konto jest połączone tylko z aktywnym obszarem roboczym. Przełącz obszar roboczy, a zobaczysz kalendarze tego obszaru roboczego.

Przepływ łączenia żąda zakresu calendar.readonly oraz dostępu do Twojego adresu e-mail — tych samych zakresów zarówno w przypadku aplikacji wbudowanej, jak i wklejonego klienta. Control Center odczytuje wydarzenia; nie tworzy ich, nie edytuje, nie usuwa ani nie odpowiada na zaproszenia w Google.

Serwer odpowiada za harmonogram: co dwie minuty przegląda połączone konta wszystkich obszarów roboczych i zapisuje wydarzenia w bazie danych obszaru roboczego. Klienci nigdy nie komunikują się z Google — odczytują to, co zapisał serwer.

Przegląd jest przyrostowy. Pierwsze przejście dla każdego kalendarza pobiera ruchome okno (60 dni wstecz, 90 dni w przód) i zapisuje token synchronizacji Google; kolejne przejścia przekazują ten token i otrzymują wyłącznie zmiany — właśnie dzięki temu rytm co dwie minuty jest opłacalny. Okno jest zakotwiczane od nowa przez pełną synchronizację co 24 godziny oraz za każdym razem, gdy Google unieważni token.

Tokeny odświeżania są przechowywane po stronie serwera w pliku secrets.json w katalogu danych serwera, z uprawnieniami tylko dla właściciela (0600) — nie w magazynie poświadczeń systemu operacyjnego i nigdy na urządzeniu klienta.

Obszar roboczy może połączyć kilka kont Google (na przykład służbowe i prywatne). Powtórz krok łączenia dla każdego z nich; ich wydarzenia scalają się w tych samych widokach miesiąca, tygodnia i agendy. Każde konto synchronizuje się i odświeża niezależnie, a każde można rozłączyć osobno.

Jeśli Google trwale unieważni token konta (unieważniona sesja lub sesja dawno wygasła), synchronizacja się zatrzymuje, a Control Center pokazuje w kalendarzu baner Połącz ponownie oraz powiadomienie na pulpicie. Kliknij Połącz ponownie i zatwierdź nowy kod; baner zniknie po następnej udanej synchronizacji.

Na pasku bocznym kalendarza (albo w Ustawienia → Obszar roboczy → Profil i tożsamość) kliknij Rozłącz przy koncie. Spowoduje to usunięcie zsynchronizowanych wydarzeń i wyczyszczenie zapisanych tokenów tego konta na serwerze.

Serwer bez podłączonego interfejsu graficznego łączy to samo konto ze swojego terminala:

Okno terminala
GOOGLE_OAUTH_CLIENT_ID=<id> GOOGLE_OAUTH_CLIENT_SECRET=<secret> \
cc_server calendar connect --data-dir <dir> --workspace <workspace-id>

Polecenie wyświetla kod i adres URL, czeka na zatwierdzenie, a następnie zapisuje tokeny i synchronizuje przy następnym przeglądzie.

Kompilacja ze źródeł nie zawiera żadnego klienta Google, więc identyfikator i sekret są wymagane — ustaw GOOGLE_OAUTH_CLIENT_ID i GOOGLE_OAUTH_CLIENT_SECRET. Nie ma flagi --google-client-id (nieznane flagi są ignorowane). Bez tej pary zmiennych środowiskowych polecenie kończy się błędem braku klienta.

Kompilacje wydania zawierają klienta Google, więc większość osób nigdy tego nie potrzebuje. Użyj własnego, jeśli budujesz ze źródeł, prowadzisz własny serwer albo chcesz, aby na ekranie zgody widniała nazwa Twojego projektu.

  1. W konsoli Google Cloud włącz Google Calendar API i skonfiguruj ekran zgody OAuth, dodając zakresy calendar.readonly, openid i email. Dopóki aplikacja nie jest zweryfikowana, dodaj siebie jako użytkownika testowego. Dodanie zakresu calendar.events na ekranie zgody nie włącza RSVP — Control Center nigdy nie żąda tego zakresu.
  2. Utwórz identyfikator klienta OAuth o typie aplikacji „TVs and limited input devices” i skopiuj zarówno identyfikator klienta, jak i sekret klienta.
  3. Podaj je albo przy pojedynczym łączeniu (wybierz w oknie dialogowym Użyj mojego własnego klienta Google Cloud), albo dla całego serwera przez GOOGLE_OAUTH_CLIENT_ID i GOOGLE_OAUTH_CLIENT_SECRET.

Para ustawiona dla całego serwera zastępuje wbudowaną wszędzie, również za opcją „użyj aplikacji Google od Control Center” — więc na własnym serwerze ta opcja oznacza Twoją aplikację.

Sekret klienta nigdy nie opuszcza serwera: żadna odpowiedź RPC go nie przenosi, a konto połączone przez klienta samego serwera zapisuje znacznik, a nie kopię pary — więc jego rotacja sprowadza się do ponownego uruchomienia z nową wartością.

Objaw Prawdopodobna przyczyna
W oknie dialogowym nie ma opcji wbudowanej Ta kompilacja nie zawiera klienta Google (kompilacja ze źródeł) albo serwer uruchomiono tylko z połową pary. Wymagane są zarówno identyfikator, jak i sekret
invalid_scope przy rozpoczynaniu przepływu Kalendarz nie jest dozwolony dla klienta kodu urządzenia w tym projekcie Cloud. Użyj zamiast tego projektu z klientem loopback lub web
invalid_client od Google Klient nie jest klientem typu „TVs and limited input devices” albo identyfikator i sekret pochodzą z różnych klientów
Zatwierdzenie się udaje, ale synchronizacja jest pusta Twoje konto nie jest użytkownikiem testowym na ekranie zgody albo nie przyznano zakresu calendar.readonly
Kod wygasa, zanim go zatwierdzisz Kody urządzenia są krótkotrwałe. Rozpocznij łączenie ponownie, aby otrzymać nowy
„Nie udało się zaktualizować odpowiedzi” przy RSVP Oczekiwane: przepływ łączenia nigdy nie żąda zakresu calendar.events
Synchronizacja zatrzymuje się z ostrzeżeniem o odświeżaniu w logu serwera Konto połączono klientem, który nie jest już skonfigurowany. Połącz konto ponownie albo przywróć identyfikator i sekret tego klienta