我有一个应用程序,要求我在一段时间后采取行动。例如,如果用户在几周内没有进入应用程序,当用户最终启动应用程序时,我必须要求他们输入安装此应用程序时提供给他们的特殊代码。 (这是一个内部应用程序,出于安全考虑,我被要求这样做)
我使用[NSDate date]方法检索用户登录时的日期并将其保存到数据库中。我在下次打开应用程序时比较这个保存的日期,看看自上次登录以来已经过了多长时间。问题是[NSDate date]给出了时间设置所产生的时间,该时间设置可由用户在本机设置应用程序中手动更改。你可能会说,这会给我的情况带来很多问题。如果用户假设在3周不活动后放入特殊代码,他可以通过修改本机设置应用程序中的时间使应用程序显示此屏幕,或者更糟糕的是,通过将时间设置为上一个日期来远离它这将是他活动后3周内。
有没有办法获得“系统时间”而不是“用户时间”?我查看了mach_absolute_time()但是在重启设备后会重置。由于不活动的时间我将比较相当大,很可能设备将被重新启动。我还想过使用网络连接从应用程序外部的服务器获取时间,但许多用户将无法访问使用iPad的WiFi。如果我找不到其他任何东西,那将是我最后的解决方案。由于它们在使用过程中的位置,我试图使用设备本身的所有内容。
我在这里忽略了一些简单的事情吗?这似乎太简单了,没有答案。请引导我朝着正确的方向前进。提前谢谢。
答案 0 :(得分:0)
如果这是一个内部应用程序(因此您不受Apples批准过程的限制),您可以将您的应用标记为执行某些背景内容(voip或接收位置更新),以便应用程序始终处于活动状态并且您能够更新某种“未使用”的计数器。设备重启后,操作系统甚至会重新启动Voip应用程序。
但当然它会耗尽电池电量。
答案 1 :(得分:0)
要么:让实际时间成为您应用的基本功能。这样,用户将需要保持设备的当前时间,并且不能回溯三周
或者:将代码标记为已过期,并在应用通知用户之前保存此信息。这将阻止大多数用户设置时间。大多数人会尝试一次或两次,看到该应用程序保持禁用状态并将放弃。
您还可以保存上次成功执行的时间戳,如果超过合理的时间范围(请记住夏季/冬季时间),则将其视为“黑客尝试”。在该时间戳上放置一个CRC校验(或者你提出的任何晦涩的想法)并保存它,你将停止大量的脚本小子。
你永远不能阻止顽固的黑客,他们积极搜索你可能放入应用程序的每一招。只关注“普通”用户。
答案 2 :(得分:0)
为什么不立即查询远程服务器 - 许多NTP服务器关于或只是对您自己服务器上的php脚本发出简单的HTTP请求。当然,如果您的应用可能永远不会连接到互联网,这可能是一个问题,但是一旦您有第三方时间,很容易猜到用户是否一直在玩时钟。