เชื่อมต่อ Google Calendar
คู่มือนี้แสดงวิธีเชื่อมต่อ Google Calendar เข้ากับเวิร์กสเปซ โดยแยกตามเวิร์กสเปซ: มันซิงค์เหตุการณ์ของเวิร์กสเปซนั้นเข้ามาใน Control Center แบบอ่านอย่างเดียว ดูปฏิทินและการจัดตาราง สำหรับภาพรวมทั้งหมด
เชื่อมต่อบัญชี
หัวข้อที่มีชื่อว่า “เชื่อมต่อบัญชี”- เปิด ปฏิทิน ในแถบด้านข้าง
- คลิก เพิ่มบัญชีปฏิทิน ในแถบด้านข้างของปฏิทิน (ส่วนเดียวกันนี้อยู่ที่ การตั้งค่า → เวิร์กสเปซ → โปรไฟล์และตัวตน ใต้ Google Calendar)
- เลือกวิธีอนุญาต:
- ใช้แอป Google ของ Control Center — ไม่ต้องตั้งค่าอะไร เป็นค่าเริ่มต้นเมื่อบิลด์ของคุณมาพร้อมกับแอปนี้
- ใช้ไคลเอนต์ Google Cloud ของฉันเอง — วาง client id และ secret จากโปรเจกต์ของคุณเอง (ดู นำไคลเอนต์ Google ของคุณมาเอง)
- คลิก เชื่อมต่อ Google Calendar กล่องโต้ตอบจะแสดงรหัสสั้น ๆ และลิงก์ไปยังหน้าอุปกรณ์ของ Google
- เปิดหน้านั้นบนอุปกรณ์ใดก็ได้ ใส่รหัส แล้วอนุมัติการเข้าถึงที่ขอ กล่องโต้ตอบจะปิดเอง และเหตุการณ์ของคุณจะเริ่มซิงค์
เซิร์ฟเวอร์เป็นผู้ทำการแลกเปลี่ยนนี้ ไม่ใช่อุปกรณ์ของคุณ และเก็บรีเฟรชโทเค็นที่ได้ ไว้ — นั่นคือเหตุผลที่รหัสถูกอนุมัติบน “อุปกรณ์ใดก็ได้” แทนที่จะเป็นในแอปนี้ โดยเฉพาะ
บัญชีจะถูกเชื่อม เข้ากับเวิร์กสเปซที่ใช้งานอยู่เท่านั้น สลับเวิร์กสเปซแล้ว คุณจะเห็นปฏิทินของเวิร์กสเปซนั้นแทน
ขั้นตอนการเชื่อมต่อขอ calendar.readonly พร้อมอีเมลของคุณ — สโคปชุดเดียวกัน
ทั้งสำหรับแอปในตัวและไคลเอนต์ที่คุณวางเข้ามา Control Center อ่านเหตุการณ์เท่านั้น
ไม่ได้สร้าง แก้ไข ลบ หรือตอบรับคำเชิญบน Google
การซิงค์ทำงานอย่างไร
หัวข้อที่มีชื่อว่า “การซิงค์ทำงานอย่างไร”เซิร์ฟเวอร์ เป็นเจ้าของตารางเวลา: มันกวาดบัญชีที่เชื่อมไว้ของทุกเวิร์กสเปซ ทุกสองนาที และเขียนเหตุการณ์ลงฐานข้อมูลของเวิร์กสเปซ ไคลเอนต์ไม่เคยคุยกับ Google — พวกมันอ่านสิ่งที่เซิร์ฟเวอร์เขียนไว้
การกวาดเป็นแบบเพิ่มพูน รอบแรกของแต่ละปฏิทินจะดึงหน้าต่างแบบเลื่อน (ย้อนหลัง 60 วัน ล่วงหน้า 90 วัน) และบันทึกโทเค็นซิงค์ของ Google รอบถัด ๆ ไปจะส่งโทเค็นนั้น และได้รับเฉพาะสิ่งที่เปลี่ยนแปลง ซึ่งเป็นสิ่งที่ทำให้รอบการทำงานทุกสองนาทีมี ต้นทุนที่รับได้ หน้าต่างจะถูกยึดใหม่ด้วยการซิงค์เต็มทุก 24 ชั่วโมง และทุกครั้งที่ Google ทำให้โทเค็นใช้ไม่ได้
รีเฟรชโทเค็นอยู่ในฝั่งเซิร์ฟเวอร์ ใน secrets.json ภายใต้ไดเรกทอรีข้อมูลของ
เซิร์ฟเวอร์ เขียนแบบเจ้าของเท่านั้น (0600) — ไม่ได้อยู่ในคีย์เชนของ
ระบบปฏิบัติการ และไม่อยู่บนอุปกรณ์ไคลเอนต์เลย
เชื่อมต่อหลายบัญชี
หัวข้อที่มีชื่อว่า “เชื่อมต่อหลายบัญชี”เวิร์กสเปซหนึ่งเชื่อมบัญชี Google ได้หลายบัญชี (เช่น บัญชีที่ทำงานและบัญชี ส่วนตัว) ทำขั้นตอนการเชื่อมต่อซ้ำสำหรับแต่ละบัญชี เหตุการณ์ของทั้งหมดจะรวมเข้าใน มุมมองเดือน / สัปดาห์ / วาระเดียวกัน แต่ละบัญชีซิงค์และรีเฟรชอย่างอิสระ และ ยกเลิกการเชื่อมต่อแยกกันได้
เชื่อมต่อบัญชีที่หมดอายุอีกครั้ง
หัวข้อที่มีชื่อว่า “เชื่อมต่อบัญชีที่หมดอายุอีกครั้ง”หาก Google ทำให้โทเค็นของบัญชีใช้ไม่ได้อย่างถาวร (เซสชันถูกเพิกถอนหรือหมดอายุ ไปนานแล้ว) การซิงค์จะหยุด และ Control Center จะแสดงแบนเนอร์ เชื่อมต่ออีกครั้ง บนปฏิทิน พร้อมการแจ้งเตือนบนเดสก์ท็อป คลิก เชื่อมต่ออีกครั้ง แล้วอนุมัติรหัส ใหม่ แบนเนอร์จะหายไปเมื่อการซิงค์ครั้งถัดไปสำเร็จ
ยกเลิกการเชื่อมต่อบัญชี
หัวข้อที่มีชื่อว่า “ยกเลิกการเชื่อมต่อบัญชี”จากแถบด้านข้างของปฏิทิน (หรือ การตั้งค่า → เวิร์กสเปซ → โปรไฟล์และตัวตน) คลิก ยกเลิกการเชื่อมต่อ ที่บัญชีนั้น การทำเช่นนี้จะลบเหตุการณ์ที่ซิงค์ไว้และ ล้างโทเค็นที่จัดเก็บไว้บนเซิร์ฟเวอร์
เชื่อมต่อจากเซิร์ฟเวอร์แบบไม่มีส่วนติดต่อ
หัวข้อที่มีชื่อว่า “เชื่อมต่อจากเซิร์ฟเวอร์แบบไม่มีส่วนติดต่อ”เซิร์ฟเวอร์ที่ไม่มีการเชื่อมต่อ GUI เชื่อมบัญชีเดียวกันได้จากเทอร์มินัลของตัวเอง:
GOOGLE_OAUTH_CLIENT_ID=<id> GOOGLE_OAUTH_CLIENT_SECRET=<secret> \ cc_server calendar connect --data-dir <dir> --workspace <workspace-id>มันจะแสดงรหัสและ URL รอการอนุมัติ แล้วจัดเก็บโทเค็นและซิงค์ในรอบกวาดถัดไป
บิลด์จากซอร์สไม่แนบไคลเอนต์ Google มาให้ จึงต้องระบุ id และ secret —
ตั้ง GOOGLE_OAUTH_CLIENT_ID และ GOOGLE_OAUTH_CLIENT_SECRET ไม่มีแฟล็ก
--google-client-id (แฟล็กที่ไม่รู้จักจะถูกมองข้าม) หากไม่มีตัวแปรสภาพแวดล้อม
คู่นี้ คำสั่งจะออกด้วยข้อผิดพลาดว่าขาดไคลเอนต์
นำไคลเอนต์ Google ของคุณมาเอง (ฟอร์กและการโฮสต์เอง)
หัวข้อที่มีชื่อว่า “นำไคลเอนต์ Google ของคุณมาเอง (ฟอร์กและการโฮสต์เอง)”บิลด์รุ่นทางการแนบไคลเอนต์ Google มาให้ คนส่วนใหญ่จึงไม่ต้องแตะเรื่องนี้เลย นำของคุณมาเองหากคุณบิลด์จากซอร์ส รันเซิร์ฟเวอร์ของคุณเอง หรือต้องการให้หน้า ยินยอมระบุชื่อโปรเจกต์ของคุณเอง
- ใน Google Cloud Console เปิดใช้ Google Calendar API และตั้งค่า OAuth consent screen โดยเพิ่มสโคป
calendar.readonly,openidและemailระหว่างที่แอปยังไม่ผ่านการตรวจสอบ ให้เพิ่มตัวคุณเองเป็น test user การเพิ่มcalendar.eventsบนหน้ายินยอมไม่ได้เปิดใช้ RSVP — Control Center ไม่เคยขอสโคปนั้น - สร้าง OAuth client ID ชนิดแอปพลิเคชัน TVs and limited input devices แล้วคัดลอกทั้ง client id และ client secret
- ใส่ข้อมูลเหล่านี้แบบต่อการเชื่อมต่อแต่ละครั้ง (เลือก ใช้ไคลเอนต์ Google Cloud ของฉันเอง ในกล่องโต้ตอบ) หรือทั้งเซิร์ฟเวอร์ด้วย
GOOGLE_OAUTH_CLIENT_IDและGOOGLE_OAUTH_CLIENT_SECRET
คู่ที่ตั้งระดับเซิร์ฟเวอร์จะแทนที่คู่ในตัวทุกที่ รวมถึงเบื้องหลังตัวเลือก “ใช้แอป Google ของ Control Center” — ดังนั้นบนเซิร์ฟเวอร์ของคุณเอง ตัวเลือกนั้น ก็คือแอปของคุณ
client secret ไม่เคยออกจากเซิร์ฟเวอร์: ไม่มีคำตอบ RPC ใดพามันออกไป และบัญชี ที่เชื่อมผ่านไคลเอนต์ของเซิร์ฟเวอร์เองจะเก็บเพียงเครื่องหมายแทนสำเนาของคู่ข้อมูล การหมุนเวียนมันจึงเป็นแค่การรีสตาร์ตด้วยค่าใหม่
การแก้ปัญหา
หัวข้อที่มีชื่อว่า “การแก้ปัญหา”| อาการ | สาเหตุที่เป็นไปได้ |
|---|---|
| กล่องโต้ตอบไม่มีตัวเลือกในตัว | บิลด์นี้ไม่แนบไคลเอนต์ Google มาให้ (บิลด์จากซอร์ส) หรือเซิร์ฟเวอร์เริ่มทำงานโดยมีเพียงครึ่งเดียวของคู่ข้อมูล ต้องมีทั้ง id และ secret |
invalid_scope เมื่อเริ่มขั้นตอน |
โปรเจกต์ Cloud นั้นไม่ได้อนุญาตให้ใช้ Calendar กับไคลเอนต์แบบ device-code ให้ใช้โปรเจกต์ไคลเอนต์แบบ loopback หรือแบบเว็บแทน |
invalid_client จาก Google |
ไคลเอนต์ไม่ใช่ไคลเอนต์ชนิด TVs and limited input devices หรือ id กับ secret มาจากไคลเอนต์คนละตัว |
| อนุมัติสำเร็จแต่การซิงค์ว่างเปล่า | บัญชีของคุณไม่ใช่ test user บนหน้ายินยอม หรือ calendar.readonly ไม่ได้ถูกให้สิทธิ์ |
| รหัสหมดอายุก่อนที่คุณจะอนุมัติ | รหัสอุปกรณ์มีอายุสั้น เริ่มการเชื่อมต่อใหม่เพื่อขอรหัสใหม่ |
| “อัปเดตคำตอบไม่ได้” เมื่อตอบรับ (RSVP) | เป็นเรื่องปกติ: ขั้นตอนการเชื่อมต่อไม่เคยขอ calendar.events |
| การซิงค์หยุดพร้อมคำเตือนเรื่องการรีเฟรชในบันทึกของเซิร์ฟเวอร์ | บัญชีถูกเชื่อมด้วยไคลเอนต์ที่ไม่ได้ตั้งค่าไว้อีกต่อไป เชื่อมต่อบัญชีอีกครั้ง หรือกู้คืน client id และ secret นั้น |
คู่มือที่เกี่ยวข้อง
หัวข้อที่มีชื่อว่า “คู่มือที่เกี่ยวข้อง”- บันทึกและสรุปการประชุม: เปลี่ยนเหตุการณ์ให้เป็นการบันทึก
- รันเซิร์ฟเวอร์แบบไม่มีส่วนติดต่อ: ที่ซึ่งโทเค็นและตารางการซิงค์อยู่
- ตั้งค่าการผสาน GitHub