Einen Google Calendar verbinden
Diese Anleitung zeigt, wie du Google Calendar mit einem Arbeitsbereich verbindest. Die Verbindung gilt pro Arbeitsbereich: Sie synchronisiert die Termine dieses Arbeitsbereichs schreibgeschützt nach Control Center. Wie das zusammenhängt, steht unter Kalender und Terminplanung.
Ein Konto verbinden
Abschnitt betitelt „Ein Konto verbinden“- Öffne Kalender in der Seitenleiste.
- Klicke in der Kalender-Seitenleiste auf Kalenderkonto hinzufügen. (Dieselbe Stelle liegt unter Einstellungen → Arbeitsbereich → Profil und Identität, bei Google Calendar.)
- Wähle, wie du autorisierst:
- Google-App von Control Center verwenden — nichts einzurichten. Das ist die Vorgabe, wenn dein Build eine mitliefert.
- Eigenen Google-Cloud-Client verwenden — füge eine Client-ID und ein Secret aus deinem eigenen Projekt ein (siehe Einen eigenen Google-Client mitbringen).
- Klicke auf Google Calendar verbinden. Der Dialog zeigt einen kurzen Code und einen Link zu Googles Geräteseite.
- Öffne diese Seite auf einem beliebigen Gerät, gib den Code ein und genehmige den angeforderten Zugriff. Der Dialog schließt sich von selbst, und die Synchronisierung deiner Termine beginnt.
Den Austausch führt der Server aus, nicht dein Gerät, und er behält das daraus entstehende Refresh-Token — deshalb bestätigst du den Code auf einem „beliebigen Gerät“ und nicht speziell in dieser App.
Das Konto ist nur mit dem aktiven Arbeitsbereich verbunden. Wechselst du den Arbeitsbereich, siehst du die Kalender dieses Arbeitsbereichs.
Der Verbindungsablauf fordert calendar.readonly plus deine E-Mail an —
dieselben Scopes für die eingebaute App und für einen Client, den du einfügst.
Control Center liest Termine. Es legt nichts an, bearbeitet nichts, löscht
nichts und beantwortet keine Einladungen bei Google.
So funktioniert die Synchronisierung
Abschnitt betitelt „So funktioniert die Synchronisierung“Der Server besitzt den Zeitplan: Alle zwei Minuten durchläuft er die verbundenen Konten jedes Arbeitsbereichs und schreibt die Termine in die Datenbank des Arbeitsbereichs. Clients sprechen nie mit Google — sie lesen, was der Server geschrieben hat.
Der Durchlauf ist inkrementell. Der erste Durchgang je Kalender holt ein gleitendes Fenster (60 Tage zurück, 90 Tage voraus) und merkt sich Googles Sync-Token; spätere Durchgänge legen dieses Token vor und erhalten nur, was sich geändert hat. Genau das macht einen Takt von zwei Minuten tragbar. Das Fenster wird alle 24 Stunden und immer dann, wenn Google das Token ungültig macht, mit einer vollständigen Synchronisierung neu verankert.
Refresh-Tokens liegen serverseitig in secrets.json im Datenverzeichnis des
Servers, nur für den Eigentümer geschrieben (0600) — nicht im Schlüsselbund
des Betriebssystems und nie auf einem Client-Gerät.
Mehrere Konten verbinden
Abschnitt betitelt „Mehrere Konten verbinden“Ein Arbeitsbereich kann mehrere Google-Konten verbinden (etwa Arbeit und privat). Wiederhole den Verbindungsschritt für jedes Konto; ihre Termine fließen in dieselben Ansichten für Monat, Woche und Agenda. Jedes Konto synchronisiert und erneuert sein Token unabhängig, und jedes lässt sich einzeln trennen.
Ein abgelaufenes Konto erneut verbinden
Abschnitt betitelt „Ein abgelaufenes Konto erneut verbinden“Erklärt Google das Token eines Kontos dauerhaft für ungültig (eine widerrufene oder lange abgelaufene Sitzung), stoppt die Synchronisierung. Control Center zeigt auf dem Kalender ein Banner Erneut verbinden und eine Desktop-Benachrichtigung. Klicke auf Erneut verbinden und bestätige einen neuen Code; das Banner verschwindet bei der nächsten erfolgreichen Synchronisierung.
Ein Konto trennen
Abschnitt betitelt „Ein Konto trennen“Klicke in der Kalender-Seitenleiste (oder unter Einstellungen → Arbeitsbereich → Profil und Identität) beim Konto auf Trennen. Das löscht die synchronisierten Termine und entfernt die gespeicherten Tokens auf dem Server.
Von einem Headless-Server aus verbinden
Abschnitt betitelt „Von einem Headless-Server aus verbinden“Ein Server ohne angeschlossene Oberfläche verbindet dasselbe Konto über sein eigenes Terminal:
GOOGLE_OAUTH_CLIENT_ID=<id> GOOGLE_OAUTH_CLIENT_SECRET=<secret> \ cc_server calendar connect --data-dir <dir> --workspace <workspace-id>Er gibt einen Code und eine URL aus, wartet auf die Bestätigung, speichert dann die Tokens und synchronisiert beim nächsten Durchlauf.
Ein Build aus dem Quellcode bringt keinen Google-Client mit, deshalb sind
ID und Secret erforderlich — setze GOOGLE_OAUTH_CLIENT_ID und
GOOGLE_OAUTH_CLIENT_SECRET. Ein Flag --google-client-id gibt es nicht
(unbekannte Flags werden ignoriert). Ohne das Paar in der Umgebung beendet
sich der Befehl mit einem Fehler, weil der Client fehlt.
Einen eigenen Google-Client mitbringen (Forks und Self-Hosting)
Abschnitt betitelt „Einen eigenen Google-Client mitbringen (Forks und Self-Hosting)“Release-Builds bringen einen Google-Client mit, deshalb kommen die meisten damit nie in Berührung. Bring deinen eigenen mit, wenn du aus dem Quellcode baust, einen eigenen Server betreibst oder der Zustimmungsbildschirm dein eigenes Projekt nennen soll.
- Aktiviere in der Google Cloud Console die Google Calendar API und richte den OAuth-Zustimmungsbildschirm ein. Füge die Scopes
calendar.readonly,openidundemailhinzu. Solange die App nicht verifiziert ist, trag dich als Testnutzer ein.calendar.eventsauf dem Zustimmungsbildschirm schaltet keine Zu- oder Absage frei — Control Center fordert diesen Scope nie an. - Lege eine OAuth-Client-ID vom Anwendungstyp TVs and limited input devices an und kopiere Client-ID und Client-Secret.
- Gib sie entweder pro Verbindung an (wähle im Dialog Eigenen Google-Cloud-Client verwenden) oder serverweit mit
GOOGLE_OAUTH_CLIENT_IDundGOOGLE_OAUTH_CLIENT_SECRET.
Ein serverweites Paar ersetzt das eingebaute überall, auch hinter der Option „Google-App von Control Center verwenden“ — auf deinem eigenen Server ist diese Option deine App.
Das Client-Secret verlässt den Server nie: Keine RPC-Antwort enthält es, und ein Konto, das über den eigenen Client des Servers verbunden wurde, speichert eine Markierung statt einer Kopie des Paars. Zum Rotieren reicht ein Neustart mit dem neuen Wert.
Fehlerbehebung
Abschnitt betitelt „Fehlerbehebung“| Symptom | Wahrscheinliche Ursache |
|---|---|
| Der Dialog bietet keine eingebaute Option | Dieser Build bringt keinen Google-Client mit (ein Quellcode-Build), oder der Server wurde nur mit einer Hälfte des Paars gestartet. ID und Secret sind beide erforderlich |
invalid_scope beim Start des Ablaufs |
Calendar ist für einen Device-Code-Client in diesem Cloud-Projekt nicht erlaubt. Nimm stattdessen ein Projekt mit Loopback- oder Web-Client |
invalid_client von Google |
Der Client ist kein Client vom Typ TVs and limited input devices, oder ID und Secret stammen von verschiedenen Clients |
| Die Bestätigung gelingt, die Synchronisierung bleibt leer | Dein Konto ist auf dem Zustimmungsbildschirm kein Testnutzer, oder calendar.readonly wurde nicht gewährt |
| Der Code läuft ab, bevor du ihn bestätigst | Device-Codes sind kurzlebig. Starte die Verbindung erneut, um einen neuen zu bekommen |
| „Antwort konnte nicht aktualisiert werden“ bei einer Zu- oder Absage | Erwartet: Der Verbindungsablauf fordert calendar.events nie an |
| Die Synchronisierung stoppt mit einer Warnung beim Token-Refresh im Serverprotokoll | Das Konto wurde mit einem Client verbunden, der nicht mehr konfiguriert ist. Verbinde das Konto erneut, oder setze diese Client-ID und dieses Secret wieder |
Verwandte Anleitungen
Abschnitt betitelt „Verwandte Anleitungen“- Eine Besprechung aufzeichnen und zusammenfassen: aus einem Termin eine Aufnahme machen
- Einen Headless-Server betreiben: wo die Tokens und der Zeitplan der Synchronisierung liegen
- GitHub-Integration einrichten