2013-09-09 5 views
0

Я разрабатываю приложение, которое должно работать в режиме онлайн, а также офлайн. Это приложение должно синхронизировать информацию с нашим сервером. Для этого нам нужно, чтобы устройство использовало серверные часы. я нашел много информации, и я получаю следующую мысль:Могу ли я узнать, перезагружен ли ipad?

  1. Когда логины онлайн заставят его получить время сервера синхронизации. В этот момент он должен иметь подключение к интернету, поэтому все в порядке.
  2. Когда я получаю время сервера часов, я получаю информацию о системном времени, указывающую интервал включения устройства, и я его храню. Я могу получить systemUptime так:

    [NSProcessInfo processInfo].systemUptime 
    
  3. Когда пользователь, чтобы создать новый локальный файл, я буду знать текущий интервал, основанный на функции systemUptime, так что я знаю, текущее время, и я не зависеть Системные часы iOS.

Проблема в следующем: каждый раз, когда это устройство перезагружается или выключается, системное время сбрасывается. Пока здесь ОК, я могу решить, что он заставит пользователя снова войти в систему и снова получить время на сервере. Моя проблема - знать, когда устройство было перезагружено. Вы можете мне помочь? Спасибо вам, ребята!

+0

Выясните вашу цель? Вы действительно заинтересованы в безотказной работе системы, или просто хотите убедиться, что ваше приложение использует время, синхронизированное с часами вашего сервера? – danh

+0

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

ответ

1

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

В какой-то момент в будущем спросите сервер, есть ли файл более поздний, чем время сервера, которое вы записали ранее.

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

Если важно, чтобы ваше приложение было таким сильным, ваш единственный выбор - оставаться независимым от времени устройства. В противном случае существует слишком много способов его разлома (в том числе небольшие ошибки времени из-за задержки при проверке времени или сброса фабрики устройства или вредоносных действий пользователя). Лучше оставаться независимым от времени устройства, если сможете.

+0

Моя большая проблема: у меня есть iPad. Сначала у меня есть учетная запись, зарегистрированная в первом iPad.Поэтому я создал ничью, например, синхронизирую ее и отключился. Теперь я открываю этот файл и продолжаю рисовать что-то. Первый iPad остается в автономном режиме. Теперь я loggin с той же учетной записью во втором iPad. Я загружу ничью, а после второго iPad тоже отключится. Точно так же я продолжаю рисовать это. Если у меня есть правильное время, я знаю, какой из них будет самым последним, который будет синхронизирован. Но теперь я хочу, чтобы это было так сложно, и теперь я думаю об изменении нашей политики синхронизации. Спасибо dahn –

+0

Разрешите ли вы одновременно редактировать два iPad? Тогда даже с идеальной синхронизацией времени редактирование может столкнуться. Таким образом, вам придется разрабатывать логику слияния (например, обрабатывать случай, когда один ipad редактирует объект, который удаляется другим). Альтернативой является позволить одному ipad блокировать файл, а другой - редактировать. Затем вы можете отслеживать версии с простым целым числом. – danh

+0

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

0

Когда вы получаете системное время в первый раз, вычтите его из текущей (iOS) даты и времени. Это время, когда система была в последний раз поднята.

Затем пересчитайте это значение, когда это необходимо. Если «время, когда система в последний раз воспитывалось», изменилось, то вы знаете, что пришло время снова войти в систему.

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

+0

Моя проблема в том, что я никогда не могу доверять часам устройства. Таким образом, я смогу получить ту же проблему, что и сегодня. Спасибо. –

Смежные вопросы