Надежная разница во времени в среде iOS - PullRequest
4 голосов
/ 16 июля 2011

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

Но самый большой недостаток TinyTower (и при всем уважении, это милая игра) в том, что обман слишком легок. Игра зависит от времени устройства, поэтому, когда говорится, что «это сделано за восемь часов», вы просто устанавливаете свои часы на восемь часов вперед, получаете вещь и затем возвращаете ее обратно.

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

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

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

Итак ... Вопрос в следующем: Кто-нибудь знает безопасный надежный способ определения того, сколько времени прошло с тех пор, как последний раз пользователь последний раз открывал приложение?

Ответы [ 3 ]

3 голосов
/ 16 июля 2011

Несколько идей:

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

2) При отправке рекордов укажите текущее время устройства. Если это опережает время сервера, отклоните высокий балл.

3) При запуске игры сравнивайте время со временем, когда была выпущена текущая версия игры. Если пользователь предположительно запускает игру до ее выпуска, подайте жалобу.

2 голосов
/ 16 июля 2011

Делегат приложения уведомляется о значительных изменениях времени. Вы можете перехватить эти вызовы на applicationSignificantTimeChange: и наблюдать за существенными скачками времени вперед или назад.

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

0 голосов
/ 30 июня 2015

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

...