คู่มือนี้จะอธิบายถึงวิธีการ ใช้ "การซิงค์ข้อมูลที่เพิ่มขึ้น" ของข้อมูลปฏิทิน การใช้ คุณสามารถซิงค์ข้อมูลคอลเล็กชันปฏิทินทั้งหมดให้ตรงกันขณะที่บันทึก แบนด์วิดท์
เนื้อหา
ภาพรวม
การซิงค์ส่วนเพิ่มนั้นประกอบด้วย 2 ขั้นตอน
การซิงค์เต็มรูปแบบครั้งแรกจะทำเพียงครั้งเดียวเมื่อเริ่มต้น เพื่อ ซิงค์สถานะไคลเอ็นต์กับสถานะของเซิร์ฟเวอร์ ลูกค้าจะได้รับ โทเค็นการซิงค์ที่ต้องมีการเก็บไว้
มีการซิงค์ส่วนเพิ่มซ้ำหลายครั้งและอัปเดตไคลเอ็นต์ด้วย การเปลี่ยนแปลง นับตั้งแต่การซิงค์ครั้งก่อน ในแต่ละครั้ง ลูกค้า ระบุโทเค็นการซิงค์ก่อนหน้าที่ได้รับจากเซิร์ฟเวอร์และจัดเก็บโทเค็นการซิงค์ใหม่จากการตอบกลับ
การซิงค์เต็มรูปแบบครั้งแรก
การซิงค์เต็มรูปแบบครั้งแรกเป็นคำขอต้นฉบับสำหรับทรัพยากรทั้งหมดของ คอลเล็กชันที่ต้องการซิงค์ข้อมูล คุณสามารถเลือกที่จะจำกัดรายการ โดยใช้พารามิเตอร์คำขอ หากคุณต้องการซิงค์ ทรัพยากรย่อยๆ ได้
ในการตอบกลับการดำเนินการรายการ คุณจะพบฟิลด์ที่ชื่อว่า
nextSyncToken
หมายถึงโทเค็นการซิงค์ คุณจะต้องจัดเก็บค่าของ
nextSyncToken
หากชุดผลลัพธ์มีขนาดใหญ่เกินไปและได้รับคำตอบ
ใส่เลขหน้า ตามด้วย nextSyncToken
จะแสดงในหน้าสุดท้ายเท่านั้น
การซิงค์ส่วนเพิ่ม
การซิงค์ส่วนเพิ่มทำให้คุณสามารถเรียกคืนทรัพยากรทั้งหมดที่มี
ถูกแก้ไขตั้งแต่คำขอซิงค์ครั้งล่าสุด หากต้องการดำเนินการนี้ คุณจะต้องทำรายการ
โดยระบุโทเค็นการซิงค์ล่าสุดของคุณในช่อง syncToken
โปรดทราบว่าผลลัพธ์จะมีรายการที่ถูกลบเสมอ ดังนั้น
ให้ลูกค้านำไฟล์ออกจากพื้นที่เก็บข้อมูลได้
ในกรณีที่ทรัพยากรจำนวนมากมีการเปลี่ยนแปลงนับจากครั้งล่าสุด
คำขอซิงค์เพิ่มขึ้น คุณอาจเห็น pageToken
แทนที่จะเป็น syncToken
ในผลลัพธ์รายการ ในกรณีเหล่านี้ คุณต้องทำขั้นตอนเดียวกัน
รายการคำค้นหาที่ใช้เพื่อดึงข้อมูลหน้าแรกในการซิงค์ส่วนเพิ่ม
(ที่มี syncToken
เหมือนกัน) เพิ่ม pageToken
ต่อท้าย และ
ใส่เลขหน้าในคำขอต่อไปนี้ทั้งหมดจนกว่าจะพบ syncToken
อีกรายการหนึ่งในหน้าสุดท้าย อย่าลืมเก็บ syncToken
นี้ไว้สำหรับการซิงค์ครั้งถัดไป
คำขอในอนาคต
ต่อไปนี้คือตัวอย่างคำค้นหาสำหรับกรณีที่ต้องมีการซิงค์แบบใส่เลขหน้าเพิ่ม
คำค้นหาเดิม
GET /calendars/primary/events?maxResults=10&singleEvents=true&syncToken=CPDAlvWDx70CEPDAlvWDx
// Result contains the following
"nextPageToken":"CiAKGjBpNDd2Nmp2Zml2cXRwYjBpOXA",
กําลังเรียกดูหน้าถัดไป
GET /calendars/primary/events?maxResults=10&singleEvents=true&syncToken=CPDAlvWDx70CEPDAlvWDx&pageToken=CiAKGjBpNDd2Nmp2Zml2cXRwYjBpOXA
เซิร์ฟเวอร์ต้องการการซิงค์อย่างเต็มรูปแบบ
บางครั้งเซิร์ฟเวอร์อาจทำให้โทเค็นการซิงค์ใช้งานไม่ได้เนื่องจากสาเหตุหลายประการ
รวมถึงการหมดอายุของโทเค็นหรือการเปลี่ยนแปลงใน ACL ที่เกี่ยวข้อง
ในกรณีดังกล่าว เซิร์ฟเวอร์จะตอบสนองคำขอที่เพิ่มขึ้นโดยมี
โค้ดตอบกลับ 410
การดำเนินการนี้จะเรียกใช้การล้างข้อมูลทั้งหมดของร้านค้าของลูกค้า
และการซิงค์เต็มรูปแบบแบบใหม่
โค้ดตัวอย่าง
ตัวอย่างโค้ดด้านล่างแสดงวิธีใช้โทเค็นการซิงค์กับ ไลบรารีไคลเอ็นต์ Java ครั้งแรก วิธีการเรียกใช้ดังกล่าวเรียกว่า วิธีที่จะทําการซิงค์อย่างเต็มรูปแบบและจัดเก็บโทเค็นการซิงค์ ในการดำเนินการแต่ละครั้ง โทเค็นนี้จะโหลดโทเค็นการซิงค์ที่บันทึกไว้และดำเนินการ การซิงค์ที่เพิ่มขึ้น
private static void run() throws IOException { // Construct the {@link Calendar.Events.List} request, but don't execute it yet. Calendar.Events.List request = client.events().list("primary"); // Load the sync token stored from the last execution, if any. String syncToken = syncSettingsDataStore.get(SYNC_TOKEN_KEY); if (syncToken == null) { System.out.println("Performing full sync."); // Set the filters you want to use during the full sync. Sync tokens aren't compatible with // most filters, but you may want to limit your full sync to only a certain date range. // In this example we are only syncing events up to a year old. Date oneYearAgo = Utils.getRelativeDate(java.util.Calendar.YEAR, -1); request.setTimeMin(new DateTime(oneYearAgo, TimeZone.getTimeZone("UTC"))); } else { System.out.println("Performing incremental sync."); request.setSyncToken(syncToken); } // Retrieve the events, one page at a time. String pageToken = null; Events events = null; do { request.setPageToken(pageToken); try { events = request.execute(); } catch (GoogleJsonResponseException e) { if (e.getStatusCode() == 410) { // A 410 status code, "Gone", indicates that the sync token is invalid. System.out.println("Invalid sync token, clearing event store and re-syncing."); syncSettingsDataStore.delete(SYNC_TOKEN_KEY); eventDataStore.clear(); run(); } else { throw e; } } List<Event> items = events.getItems(); if (items.size() == 0) { System.out.println("No new events to sync."); } else { for (Event event : items) { syncEvent(event); } } pageToken = events.getNextPageToken(); } while (pageToken != null); // Store the sync token from the last request to be used during the next execution. syncSettingsDataStore.set(SYNC_TOKEN_KEY, events.getNextSyncToken()); System.out.println("Sync complete."); }
การซิงค์เดิม
สำหรับคอลเล็กชันของกิจกรรม คุณยังสามารถซิงค์ใน
แบบเดิมโดยเก็บค่าของช่องที่อัปเดตจากรายการเหตุการณ์ไว้
จากนั้นใช้ช่อง modifiedSince
เพื่อเรียกข้อมูลเหตุการณ์ที่อัปเดต
เราไม่แนะนำวิธีนี้อีกต่อไปเนื่องจากมีโอกาสเกิดข้อผิดพลาดมากกว่า
การอัปเดตที่พลาดไป (เช่น ไม่ได้บังคับใช้ข้อจำกัดการค้นหา)
นอกจากนี้ ใช้ได้กับกิจกรรมเท่านั้น