People.Connections.List nextSyncToken истекает через неделю

Я работаю над решением для синхронизации контактов, чтобы синхронизировать контакты в нашем приложении с контактами пользователя Google.

Наш код использует библиотеку php для последней версии Google People API (v1).

Все отлично работает в течение одной недели с каждым пользователем, но после этой недели мы получаем:

400 - Ошибка "Срок действия токена синхронизации истек. Очистите локальный кеш и повторите вызов без токена синхронизации".

Мой вопрос сейчас:

Это преднамеренное поведение, которое вы должны очистить весь кэш через одну неделю без изменений, или я делаю что-то не так?

Есть ли возможность обновить syncToken, если не было изменений?

Я уже проверил весь код, чтобы убедиться, что новый получил nextSyncToken сохраняется на нашей стороне и используется для следующего запроса инкрементной синхронизации. Кажется, что новый токен синхронизации всегда совпадает с тем, который отправлен в запросе. Таким образом, ясно, что мы получаем эти ошибки, если токен синхронизации истекает ровно через одну неделю. Я также пытался установить опцию requestSyncToken в true для каждого запроса списка, даже если также как syncToken установлено. Нет успеха Токен синхронизации остается неизменным после каждого запроса без изменений.

0 ответов

На всякий случай кто-то тоже сталкивается с этой проблемой (syncToken истечение через неделю без изменений в списке лиц / контактов):

Наше решение было:

  • Сохраните дату и время создания нового syncToken каждый раз, когда вы получаете один вместе с syncToken.
  • Когда вы получите syncTokenв процессе инкрементной синхронизации сравните этот токен с сохраненным. ЕслиsyncToken является новым, перезапишите старый и дату / время его создания.
  • Используйте непрерывный процесс, который проверяет каждый syncToken. Если одному из них около недели (из соображений безопасности мы использовали 6 дней), создайте новыйsyncToken(процесс см. ниже). Поскольку API людей не предлагает такие вещи, как каналы наблюдения календарного API, вам в любом случае понадобятся некоторые непрерывные процессы, которые выполняют вызовы списков в фиксированные интервалы времени для полной синхронизации в реальном времени - так что, возможно, вы могли бы комбинировать эти задачи в зависимости от ваше решение этой проблемы?!

Процесс создания нового SyncToken:

  • Сделайте новый запрос списка без предоставления syncToken.
  • Для дополнительной безопасности сделайте несколько проверок, например сравните общее количество полученных людей с общим количеством людей, ожидаемым по старым / текущим данным. И делайте этот процесс обновления в то время дня, когда в целом почти никто не вносит изменений, например, в 2 часа ночи.
  • Перезаписать старый syncToken и дату / время с новым и текущей датой / временем.

Вот и все.

Но внимание! Вы все равно можете пропустить некоторые изменения, которые были внесены, если выsyncToken процесс обновления выполняется точно в то время, когда вносятся изменения!

Перед синхронизацией создайте фиктивный контакт, чтобы получить новый syncToken. После синхронизации удалите фиктивный контакт из Google Контактов и вашего кеша.

Другие вопросы по тегам