Могу ли я предотвратить фоновую синхронизацию firestore со старой версией клиента?

Я хочу управлять фоновой синхронизацией базы данных firestore google-firebase в режиме сохранения (с PersistenceEnabled по true).

Боюсь, что старая версия клиента, работающая в автономном режиме и не знающая обновленной версии приложения (с некоторыми деструктивными обновлениями), может загружать локальные данные на сервер при переходе в онлайн. В этом случае я хочу проверить текущие версии приложений и разрешить / запретить перед синхронизацией.

Есть какое-нибудь решение?


person Masaki Hamanishi    schedule 05.02.2018    source источник


Ответы (1)


Данные в кеше обновляются только тогда, когда вы присоединяете к нему слушателя / наблюдателя. Автоматическая синхронизация данных в автономном кэше не выполняется.

Это означает, что вы можете добавить проверку версии в код запуска вашего приложения, прежде чем прикреплять какие-либо наблюдатели. Просто сохраните поле database-version в глобальном документе и проверьте его при запуске приложения. Если версия больше, чем та, для обработки которой было создано приложение, отобразите запрос на обновление.

person Frank van Puffelen    schedule 05.02.2018
comment
Спасибо за заявку, но, если приложение запускается в автономном режиме, проверка затруднительна, не так ли? Или global document означает что-то важное? - person Masaki Hamanishi; 08.02.2018
comment
Нет, в глобальном документе нет волшебного смысла. Это просто документ, который вы используете для хранения такой переменной. - person Frank van Puffelen; 08.02.2018
comment
Но я бы рекомендовал не полагаться на версию приложения для проверки записи. Вместо этого просто создайте правила безопасности, которые проверяют структуру данных. Таким образом, сервер всегда будет выполнять проверку на соответствие последним правилам. Если записи от старых клиентов нарушают эти правила, они будут отклонены. Итак: используйте номер версии, чтобы убедиться, что код вашего приложения может обрабатывать данные, используйте правила безопасности, чтобы убедиться, что ваши приложения записывают проверку (и отклоняют записи из старых приложений, которые записывают данные, которые больше не пригодны для использования). - person Frank van Puffelen; 08.02.2018
comment
Я знаю правила, но auth в информации нет информации о версии, не так ли? В таком случае, что мне делать? Я думаю о правилах, подобных приведенным ниже: match /documents/wantToPrevent { allow read, write: if request.resource.data.current_version >= X.X; } но для этой стратегии необходимо current_version поле данных для всего документа. Это некрасиво, поэтому я хочу по возможности избегать. - person Masaki Hamanishi; 09.02.2018