开发者

Reliable time difference in the iOS environment

开发者 https://www.devze.com 2023-03-21 03:14 出处:网络
I am working on a casual game with some improvement over time, much like TinyTower. But the biggest flaw in TinyTower (and all respect, its a cute game) is that cheating is too easy. The game relies

I am working on a casual game with some improvement over time, much like TinyTower.

But the biggest flaw in TinyTower (and all respect, its a cute game) is that cheating is too easy. The game relies on the device time, so when it says that "this is done in eight hours" you just set your clock eight hours ahead, get the thing, and then tu开发者_开发知识库rn it back.

Now, I need to make sure that this isnt a way people can win in my game. I had one idea that i could crossreference the system time with the server time, but I can't rely on the connection being open, since offline play is an option.

I could also set up a sensor indicating if the OS time suddently was before last-played-time, you would earn an invisible cheat-suspicion counter. Three of these, and the game would reset, and mark you as a cheater.

The final option was to simply not care, let cheaters be cheaters. But if I am to have a competative element, with hoghscores and such, i really need this to work.

So... The question is this: Does anyone know a safe reliable way of detecting how much time has passed since last time a user last had the app open?


A few ideas:

1) Have the app always keep track of current-time vs. last-closed-time. When you see it go backwards, increment a counter in all current saved games, and reject high scores from games where this counter has a sufficiently high value.

2) When submitting high scores, submit the device's current time. If that's sufficiently ahead of the server time, reject the high score.

3) When starting a game, check the time against the time at which the current version of the game was released. If the user is supposedly starting a game before the game was released, complain.


The app delegate is notified of significant time changes. You can catch these calls to applicationSignificantTimeChange: and watch for significant forward or backward time jumps.

Of course, that only catches changes that take place while the app is running. You can also save the time last run in the NSUserDefaults and check it next time you start up for significant backwards time jumps.


About all those solutions, what if the user goes to another country and the timezone changes and goes into the past or future?

0

精彩评论

暂无评论...
验证码 换一张
取 消