0

我正在开发一个必须在线和离线工作的应用程序。此应用程序应与我们的服务器同步信息。为此,我们需要设备利用服务器时钟。查了很多资料,得到以下思路:

  1. 当用户在线登录时,我将强制他获取服务器时钟时间。此时他必须有互联网连接,所以没关系。
  2. 当我获得时钟服务器时间时,我会获得 systemUptime 信息,说明设备开启的时间间隔,并将其存储起来。我可以像这样获得 systemUptime:

    [NSProcessInfo processInfo].systemUptime
    
  3. 当用户创建一个新的本地文件时,我会根据 systemUptime 函数知道当前间隔,所以我知道当前时间,我不依赖于 iOS 系统时钟。

问题是:每次重新启动或关闭该设备时,systemUptime 都会被重置。直到这里OK,我可以解决它强制用户再次登录,并再次获取服务器时钟时间。我的问题是知道设备何时重新启动。你能帮助我吗?谢谢你们!

4

2 回答 2

1

我的建议是根本不要参考设备时间。从服务器获取文件并让服务器也回答检索文件的服务器时间。您可以将其存储在文件中、文件名中或单独存储在设备上。

在将来的某个时间询问服务器是否有比您之前记录的服务器时间更新的文件。

从这个意义上说,时间根本不是真正的时间,它是一个版本号,您也可以在服务器上明确表示,只使用服务器中的一个整数来指示版本的进展顺序。

如果您的应用程序以这种方式强大很重要,那么您唯一的选择就是保持独立于设备时间。否则,它可能会破坏的方式太多(包括由于时间检查延迟或设备出厂重置或用户的恶意行为导致的小时间错误)。如果可以的话,最好保持独立于设备时间。

于 2013-09-09T20:19:42.090 回答
0

当您第一次获得 systemUptime 时,从当前 (iOS) 日期和时间中减去它。那是系统最后一次启动的时间。

然后在必要时重新计算该值。如果“上次启动系统的时间”发生了变化,那么您就知道是时候再次登录了。

但是,正如另一位评论者所建议的那样,我怀疑有更好的方法可以从头开始解决这个问题。

于 2013-09-09T19:53:36.197 回答