【问题标题】:iphone sdk system time vs user timeiphone sdk系统时间与用户时间
【发布时间】:2010-12-23 01:57:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: iphone ipad ios4 nsdate nstimezone


    【解决方案1】:

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

    【讨论】:

    • 问题是网络不会一直可用。我不想依赖外部信息。不知何故,Apple 能够找出正确的时间,即使它处于飞行模式,重新启动设备等等。
    • 但是你只需要一个成功的连接来缓存正确的时间/本地时间。然后您可以使用 iPod 的本地时间来校正时间,直到您再次看到网络。
    【解决方案2】:

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

    但当然它会消耗一些电池。

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多