我想要一种创建本地iOS-time-hack proof背景倒计时器的方法,例如用于计算游戏中下一个奖励的停机时间.
对象的解释:
本地
- 没有互联网连接的作品
native-iOS
- 我想在(最好)Objective-C或Swift中找到解决方案
time-hack proof
- 当用户向前/向后更改设备时间时,剩余时间保持不变
背景
- 关闭/重新打开友好
倒计时器
- 一个计时器,它在启动后将提供一种检查剩余时间的方法
我希望在我的iOS游戏中有一个基于时间的奖励系统,仅仅通过移动设备时间就不会轻易攻击.
本来,我认为这是不可能的,使用保持[NSDate date]
和savedDate
,比较它们一起找经过的时间.然而,最近我遇到了一个使用此功能的游戏:Crossy Road.据我所知,这是一款Unity游戏,但是我怀疑在Unity项目中可以使用的这种有点普遍的功能是在iOS上通过Objective-C或Swift访问的.
他们提供定时奖励系统,每6个小时一次,并且,据我测试,它不会通过更改设备时间来破解.它也适用于没有互联网连接.(如果你没有连接,我不确定它是否有效,但是当我连接,断开连接并尝试使用黑客时,它不起作用.)
您可以使用当前系统正常运行时间(mach_absolute_time()
).该功能易于使用CACurrentMediaTime()
,可在几秒钟内轻松返回.然后你可能需要设置某种间隔来检查这个值.这当然可以使用NSDate来完成,因为它不是由用户设置时钟前进触发的问题.在重新启动时,只需保存起始值并在重新启动后将其用作偏移量.
唯一的缺点是,它没有计算设备关闭的时间,但这些日子通常没什么大不了的.
要获得实际的计时器功能,只需在开始时保存该值,然后根据预计的结束值定期检查它,可能随着结束的方式增加分辨率.