Точное время обнаружения в автономном режиме

Справочная информация

Я разрабатываю приложение для iOS, которое подключено к серверу, и с устройства по направлению к серверу могут быть сделаны запросы на синхронизацию локальной базы данных с базой данных сервера. Изменения могут произойти в любой из баз данных. Приложение также имеет функцию офлайн, где пользователи могут изменять данные, не подключаясь к интернет-соединению, и только подключаясь к сети, чтобы синхронизировать локальную базу данных устройства с базой данных сервера, отправляя новые данные и получая обновления с сервера.

Обновлена ​​дополнительная справочная информация: Обрабатываемые данные - это форма, которая должна быть заполнена за определенное время. Время его запуска сохраняется как свойство модели, и, используя указанное свойство, приложение показывает пользователю, сколько времени осталось до блокировки этой формы.


Проблема

Пока устройство находится в автономном режиме, пользователь может манипулировать настройками времени, что сделает данные, полученные с этого устройства, неточными.

Я искал способ обнаружить изменения в настройках времени устройства, но согласно этому ответу SO , это кажется невозможным, если мое приложение не работает в фоновом режиме, что Apple очень строгое и не допускается, если в приложении не включен один из фоновых режимов , которые не применимы в приложении.

Обновлено с дополнительной информацией: Как я упоминал в обновленной части справочной информации выше, данные - это формы, которые могут иметь ограничение по времени. Поэтому пользователь может запустить форму на одном устройстве, но не завершить ее там. Затем они синхронизируют данные с сервером, переходят на другое устройство и заполняют ту же форму.


Предлагаемое решение

Самое близкое, к чему я пришел, чтобы решить эту проблему, - это определить разницу между временем сервера и временем устройства, когда приложение установлено. в первый раз приложение открывается для настройки его для этого устройства) и использует это различие в качестве справочного, когда я хочу сохранить значение, связанное со временем.

Если сервер обнаружит разницу во времени, он отклонит все данные, поступающие с этого устройства, что заставит устройство отменить данные, обновит разницу во времени, и только после этого данные будут приняты с этого устройства.

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

Обновление, чтобы добавить другое предлагаемое решение: Чтобы более подробно остановиться на моей заметке в приведенных ниже вопросах и комментариях с @Krypton, время работы устройства не очень помогает в моей ситуации из-за того же проблема как вышеуказанное решение.

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


Вопросы

  1. Существует ли неизменяемая временная метка, которую можно использовать в качестве справочной при сохранении значения, связанного со временем, чтобы на него не могли повлиять изменения времени устройства со стороны пользователя? Примером этого может служить время с момента первой активации устройства. ( Примечание. . Самое близкое, что я нашел к этому вопросу, это время работы устройства, но в моей ситуации это мало помогает)
  2. Есть ли способ узнать текущее время без необходимости подключаться к сети всякий раз, когда будет сохранено значение, связанное со временем?
  3. Есть ли способ исправить предложенное мной решение или какое-нибудь лучшее решение?
10
задан Community 23 May 2017 в 12:06
поделиться