如何在应用程序运行之间在本地检测iPhone用户的时钟提升?

休闲游戏中常见的一个漏洞就是人为地推动系统时钟在游戏中跳跃前进。 iOS设备上的应用程序如何检测此类用户时钟进度?

  • 不得涉及networking通信
  • 时钟提前时,不得假定应用程序处于打开状态(正在运行或暂停)
  • 必须检测时钟前进,检测时钟回滚是不够的

理想情况下,该解决scheme可以防止重新启动,但这不是必需的。

CACurrentMediaTime&mach_absolute_time

看看这个问题:

iOS:如何测量通过的时间,独立于时钟和时区的变化?

计算Cocoa中两个时间点之间的秒数,即使系统时钟在中途改变

CACurrentMediaTime使用mach_absolute_time: http : //developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreAnimation_functions/Reference/reference.html

这里有一个关于如何使用CACurrentMediaTime的例子: http : //www.informit.com/blogs/blog.aspx? b = 02b4e309-308c-468a-bab1-cebb1404be6a

在这里,您可以获得有关mach_absolute_time的更多信息: http : //developer.apple.com/library/mac/#qa/qa1398/_index.html http://shiftedbits.org/2008/10/01/mach_absolute_time-on-the -苹果手机/

我正在考虑如果GPS数据的这部分暴露给你,CoreLocation的东西可以做到这一点。 然而,这让我思考。

我唯一的(意想不到的)build议是把一些东西放到后台处理中 – 这只能是一小组特定的原因,例如跟踪在后台的位置。 作为一个副作用,试着检测普通定时器的时钟变化。 苹果可能会拒绝,因为它可能很清楚,它没有使用位置信息,只是一个理由来利用后台处理。

任何不涉及networking的解决scheme都很难实现,我不知道为什么你不使用它。

虽然我不认为有可能可靠地确定用户是否在没有networking访问的情况下手动将时钟向前移动,但您当然可以可靠地确定他们是否及时回程。 而且由于我们知道这实际上是不可能的,因此可以认为他们已经操纵了他们的时钟作弊。

我的意思是,这不是通常的程序来触发一些行动的应用程序,需要一段时间的等待,退出应用程序,并把时钟向前,重新启动应用程序,以获得他们正在等待的东西,然后重置时钟回到实际的时间?

如果情况确实如此,那么在@smgambel的build议基础上,您可以在每次启动时存储物理时间和当前时区,并与先前存储的时间和时区进行比较。 如果时间在先前存储的时间之后,并且设备的时区没有改变,则可以安全地假定用户已经操纵时钟。

Interesting Posts