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 Контактов и вашего кеша.