Перейти до вмісту

Підключити Google Calendar

Цей посібник показує, як підключити Google Calendar до робочого простору. Підключення діє для кожного робочого простору окремо: воно синхронізує події цього робочого простору в Control Center лише для читання. Повну картину дивіться в розділі Календар і планування.

  1. Відкрийте Календар на бічній панелі.
  2. Натисніть Додати обліковий запис календаря на бічній панелі календаря. (Цей самий розділ є в Налаштування → Робочий простір → Профіль і ідентичність, під заголовком Google Calendar.)
  3. Виберіть, як авторизувати:
    • Використовувати застосунок Google від Control Center — нічого налаштовувати не потрібно. Це типовий варіант, якщо ваша збірка містить такий застосунок.
    • Використовувати власний клієнт Google Cloud — вставте ідентифікатор і секрет клієнта зі свого проєкту (див. Власний клієнт Google).
  4. Натисніть Підключити Google Calendar. У діалозі з’явиться короткий код і посилання на сторінку пристрою Google.
  5. Відкрийте цю сторінку на будь-якому пристрої, введіть код і підтвердьте запитаний доступ. Діалог закриється сам, і ваші події почнуть синхронізуватися.

Цей обмін виконує сервер, а не ваш пристрій, і саме сервер зберігає отриманий токен оновлення — тому код підтверджують на «будь-якому пристрої», а не саме в цьому застосунку.

Обліковий запис підключається лише до активного робочого простору. Перемкніть робочий простір — і побачите календарі того робочого простору.

Під час підключення запитуються calendar.readonly та ваша електронна адреса — ті самі області доступу і для вбудованого застосунку, і для клієнта, який ви вставите. Control Center читає події; він не створює, не редагує, не видаляє запрошення в Google і не відповідає на них.

Розкладом керує сервер: він переглядає підключені облікові записи кожного робочого простору що дві хвилини і записує події в базу даних робочого простору. Клієнти ніколи не звертаються до Google — вони читають те, що записав сервер.

Прохід виконується інкрементально. Перший прохід для кожного календаря отримує ковзне вікно (60 днів назад, 90 днів уперед) і зберігає токен синхронізації Google; наступні проходи подають цей токен і отримують лише зміни — саме це робить двохвилинну періодичність прийнятною. Вікно заново прив’язується повною синхронізацією кожні 24 години та щоразу, коли Google визнає токен недійсним.

Токени оновлення зберігаються на сервері у файлі secrets.json у каталозі даних сервера із правами лише для власника (0600) — не в сховищі ключів операційної системи і ніколи не на клієнтському пристрої.

Підключення кількох облікових записів

Розділ із назвою «Підключення кількох облікових записів»

Робочий простір може підключити кілька облікових записів Google (наприклад, робочий і особистий). Повторіть крок підключення для кожного з них; їхні події об’єднуються в одних і тих самих виглядах «Місяць» / «Тиждень» / «Розклад». Кожен обліковий запис синхронізується й оновлюється незалежно, і кожен можна відключити окремо.

Повторне підключення облікового запису зі спливлим токеном

Розділ із назвою «Повторне підключення облікового запису зі спливлим токеном»

Якщо Google остаточно визнає токен облікового запису недійсним (відкликаний сеанс або сеанс, що давно завершився), синхронізація зупиняється, і Control Center показує в календарі банер Підключити знову та надсилає сповіщення на робочий стіл. Натисніть Підключити знову і підтвердьте новий код; банер зникає після наступної успішної синхронізації.

На бічній панелі календаря (або в Налаштування → Робочий простір → Профіль і ідентичність) натисніть Відключити біля облікового запису. Це видаляє його синхронізовані події та очищає збережені токени на сервері.

Сервер без графічного інтерфейсу підключає той самий обліковий запис зі свого термінала:

Вікно термінала
GOOGLE_OAUTH_CLIENT_ID=<id> GOOGLE_OAUTH_CLIENT_SECRET=<secret> \
cc_server calendar connect --data-dir <dir> --workspace <workspace-id>

Він виводить код і URL, чекає на підтвердження, а потім зберігає токени й синхронізує під час наступного проходу.

Збірка з вихідного коду не містить клієнта Google, тож ідентифікатор і секрет обов’язкові — задайте GOOGLE_OAUTH_CLIENT_ID і GOOGLE_OAUTH_CLIENT_SECRET. Прапорця --google-client-id немає (невідомі прапорці ігноруються). Без цієї пари змінних середовища команда завершується помилкою про відсутній клієнт.

Власний клієнт Google (форки та самостійний хостинг)

Розділ із назвою «Власний клієнт Google (форки та самостійний хостинг)»

Релізні збірки містять клієнт Google, тож більшість людей цього ніколи не торкається. Використовуйте власний, якщо збираєте з вихідного коду, запускаєте власний сервер або хочете, щоб на екрані згоди було вказано ваш проєкт.

  1. У Google Cloud Console увімкніть Google Calendar API і налаштуйте екран згоди OAuth, додавши області доступу calendar.readonly, openid та email. Поки застосунок не підтверджено, додайте себе як тестового користувача. Додавання calendar.events на екрані згоди не вмикає RSVP — Control Center ніколи не запитує цю область.
  2. Створіть ідентифікатор клієнта OAuth типу застосунку TVs and limited input devices і скопіюйте ідентифікатор і секрет клієнта.
  3. Передайте їх або під час кожного підключення (виберіть Використовувати власний клієнт Google Cloud у діалозі), або для всього сервера через GOOGLE_OAUTH_CLIENT_ID і GOOGLE_OAUTH_CLIENT_SECRET.

Пара, задана для всього сервера, замінює вбудовану всюди, зокрема за опцією «використовувати застосунок Google від Control Center», — тож на вашому власному сервері ця опція означає ваш застосунок.

Секрет клієнта ніколи не залишає сервер: жодна відповідь RPC його не передає, а обліковий запис, підключений через власний клієнт сервера, зберігає лише маркер, а не копію пари, тож для його заміни достатньо перезапустити сервер із новим значенням.

Симптом Ймовірна причина
У діалозі немає вбудованої опції Ця збірка не містить клієнта Google (збірка з вихідного коду), або сервер запущено лише з половиною пари. Потрібні і ідентифікатор, і секрет
invalid_scope під час запуску потоку Calendar не дозволено для клієнта з кодом пристрою в цьому проєкті Cloud. Натомість використайте проєкт із loopback- або вебклієнтом
invalid_client від Google Клієнт не є клієнтом типу TVs and limited input devices, або ідентифікатор і секрет належать різним клієнтам
Підтвердження успішне, але синхронізація порожня Ваш обліковий запис не додано як тестового користувача на екрані згоди, або область calendar.readonly не надано
Код спливає, перш ніж ви його підтвердите Коди пристрою недовговічні. Почніть підключення знову, щоб отримати новий код
«Не вдалося оновити відповідь» під час RSVP Очікувано: під час підключення область calendar.events ніколи не запитується
Синхронізація зупиняється із попередженням про оновлення в журналі сервера Обліковий запис було підключено клієнтом, який більше не налаштовано. Підключіть обліковий запис знову або відновіть ідентифікатор і секрет того клієнта