Bu kılavuzda, "artımlı senkronizasyon"u uygulamak olabilir. Bunu kullanma yöntemini kullanıyorsanız, dosyayı kaydederken tüm takvim koleksiyonlarına ait verilerin senkronize edilmesini bant genişliği.
İçindekiler
Genel Bakış
Artımlı senkronizasyon iki aşamadan oluşur:
İlk tam senkronizasyon, tam senkronizasyon işleminin en başında istemcinin durumunu sunucunun durumuyla senkronize eder. Müşteri, projenin saklaması gereken bir senkronizasyon jetonudur.
Artımlı senkronizasyon tekrar tekrar gerçekleştirilir ve istemciyi tüm son senkronizasyondan bu yana gerçekleşen değişiklikler. Müşteri her seferinde sunucudan aldığı önceki senkronizasyon jetonunu sağlar ve yanıttaki yeni senkronizasyon jetonunu depolar.
İlk tam senkronizasyon
İlk tam senkronizasyon, koleksiyonudur. İsteğe bağlı olarak listeyi kısıtlayabilirsiniz. yalnızca belirli bir dosyayı senkronize etmek istiyorsanız istek parametreleri alt kümesidir.
Listeleme işlemine yanıtta,
nextSyncToken
, senkronizasyon jetonunu temsil eder. Şunun değerini depolamanız gerekir:
nextSyncToken
Sonuç kümesi çok büyükse ve yanıt,
sayfalara ayrılmış, ardından nextSyncToken
alanı yalnızca en son sayfada yer almalıdır.
Artımlı senkronizasyon
Artımlı senkronizasyon, son 30 güne ait olan
Son senkronizasyon isteğinden bu yana değiştirildi. Bunun için, hedef kitlenizin
syncToken
alanında belirtilen en son senkronizasyon jetonunuzla istek gönderin.
Sonucun her zaman silinmiş girişleri içereceğini unutmayın. Bu nedenle,
bu verileri depolama alanından kaldırabilir.
Son zamandan bu yana çok sayıda kaynağın değiştiği durumlarda,
artımlı senkronizasyon isteğinde bulunursanız liste sonucunda syncToken
yerine pageToken
görebilirsiniz. Bu durumlarda, tam olarak aynı
artımlı senkronizasyonda ilk sayfanın alınması için kullanılan liste sorgusu
(tam olarak aynı syncToken
ile), ona pageToken
ifadesini ekleyin ve
Son sayfada başka bir syncToken
bulana kadar aşağıdaki tüm istekleri sayfalara ayırın. Bu syncToken
öğesini bir sonraki senkronizasyon için sakladığınızdan emin olun
talep etmeniz gerekir.
Aşağıda, sayfalandırılmış artımlı senkronizasyon gerektiren bir destek kaydıyla ilgili örnek sorgular verilmiştir:
Orijinal sorgu
GET /calendars/primary/events?maxResults=10&singleEvents=true&syncToken=CPDAlvWDx70CEPDAlvWDx
// Result contains the following
"nextPageToken":"CiAKGjBpNDd2Nmp2Zml2cXRwYjBpOXA",
Sonraki sayfayı alma
GET /calendars/primary/events?maxResults=10&singleEvents=true&syncToken=CPDAlvWDx70CEPDAlvWDx&pageToken=CiAKGjBpNDd2Nmp2Zml2cXRwYjBpOXA
.
Sunucu, tam senkronizasyon gerektiriyor
Senkronizasyon jetonları bazen çeşitli nedenlerle sunucu tarafından geçersiz kılınır.
jeton geçerlilik süresi veya ilgili EKL'lerdeki değişiklikler dahil.
Bu tür durumlarda sunucu, artan bir isteğe
yanıt kodu 410
. Bu işlem, müşteriye ait mağazanın tamamen temizlenmesini tetikler.
yeni bir tam senkronizasyon yapabilirsiniz.
Örnek kod
Aşağıdaki örnek kod snippet'i, Java istemci kitaplığı. İlk kez tam senkronizasyon gerçekleştirecek ve senkronizasyon jetonunu depolayacağı olarak adlandırılır. Sonraki her yürütmede, kayıtlı senkronizasyon jetonunu yükler ve artımlı senkronizasyon.
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."); }
Eski senkronizasyon
Etkinlik koleksiyonları için, yine
Güncellenen alanın değerini bir etkinlik listesinden koruyarak eski yöntemle
isteği ve ardından, güncellenen etkinlikleri almak için modifiedSince
alanını kullanma.
Saygı açısından hataya daha açık olduğundan bu yaklaşım artık önerilmez
eksik güncellemelere neden olabilir (örneğin, sorgu kısıtlamalarını zorunlu kılmıyorsa).
Ayrıca yalnızca etkinlikler için kullanılabilir.