0

我有一个应用程序需要我在一段时间后采取行动。例如,如果用户在几周内没有进入应用程序,当用户最终启动应用程序时,我必须要求他们输入在安装此应用程序时提供给他们的特殊代码。(这是一个内部应用程序,出于安全考虑,我被要求这样做)

我正在使用 [NSDate date] 方法来检索用户登录的日期并将其保存到数据库中。我会在他们下次打开应用程序时比较这个保存的日期,看看他们上次登录后的时间。问题是 [NSDate date] 给出的时间受时间设置影响,用户可以在本机设置应用程序中手动更改时间设置。您可能会说,这给我的情况带来了很多问题。如果假设用户在 3 周不活动后输入特殊代码,他可以通过修改本机设置应用程序中的时间来使应用程序显示此屏幕,或者更糟的是,通过将时间设置为前一个日期来避免它那将是在他活动后的 3 周内。

有没有办法获得“系统时间”而不是“用户时间”?我已经查看了 mach_absolute_time() 但这会在设备重新启动后重置。由于我将要比较的不活动时间相当长,因此设备很可能会在那时重新启动。我还想过使用网络连接从应用程序外部的服务器获取时间,但是很多用户在他们使用 iPad 的地方无法访问 wifi。如果我找不到其他任何东西,那将是我最后的解决方案。由于它们在使用过程中的位置,我正在尝试使用设备本身的所有内容。

我在这里忽略了一些简单的事情吗?这似乎太简单了,没有答案。请引导我走向正确的方向。先感谢您。

4

3 回答 3

0

如果这是一个内部应用程序(因此您不受 Apple 批准流程的限制),您可以将您的应用程序标记为执行一些后台操作(voip 或接收位置更新),这样该应用程序将始终处于活动状态并且您将能够更新某种“未使用”的计数器。设备重新启动后,操作系统甚至会重新启动 Voip 应用程序。

但当然它会稍微耗尽电池。

于 2010-12-23T02:11:44.193 回答
0

要么:让实际时间成为您应用程序的基本功能。这样,用户将需要保持设备的时间是最新的,并且不能返回三周

或者:将代码标记为过期,并在应用通知用户之前保存此信息。这将阻止大多数用户设置时间。大多数人会尝试一次或两次,看到应用程序保持禁用状态并放弃。

您还可以保存最后一次成功执行的时间戳,如果这超出了未来合理的时间范围(记住夏季/冬季时间),则将其视为“黑客尝试”。对该时间戳进行 CRC 检查(或您想出的任何晦涩的想法)并保存它,您将阻止大量脚本小子。

你永远无法阻止顽固的黑客积极搜索你可能在应用程序中投入的每一个技巧。只关注“普通”用户。

于 2010-12-23T09:53:27.200 回答
0

为什么不查询远程服务器的时间 - 大量 NTP 服务器或只是向您自己服务器上的 php 脚本发出简单的 HTTP 请求。当然,如果您的应用程序可能永远无法连接到互联网,这可能是个问题,但是一旦您有了第 3 方时间,就很容易猜测用户是否一直在玩时钟。

于 2011-08-09T13:16:18.853 回答