我正在研究iOS应用程序,它需要在接受两个设备用户时在两个设备之间维持一个时钟计时器会话?
但我不确定如何在两台设备上都没有时间缺陷的情况下实现这一目标?
我已经看过以下想法:
1)借助Webservices或推送通知维护两个设备的状态,以便两个设备上的计时器同时启动。但是如果网络不能正常工作,这种方法就会失败,并且两台设备上的计时器都存在漏洞。
此外,我还想知道即使在更改设备日期和时间后,如何防止应用程序时钟保持不变。
对此有任何帮助将不胜感激。
提前致谢。
编辑:
在实施Bzz方法之后,它很好,但我仍然面临的一个问题是如何计算和维护从设备A调用webservice以将结果网络时间戳发送到另一个设备B所花费的时间。
如何处理此案件?
答案 0 :(得分:5)
您可以使用ios-ntp获取网络时间并计算两台设备上本地和网络时间之间的时间偏差。在一台设备上启动计时器时,从本地时间戳中减去偏移量,并将生成的网络时间戳发送到另一台设备。在另一台设备上,您将本地偏移量附加到网络时间戳,并在本地时间获取计时器启动的时间戳。
您可以使用UIApplicationDelegate.applicationSignificantTimeChange(_ application: UIApplication)
监控设备上的时间变化,并通过更新网络时间重新计算偏移量。
答案 1 :(得分:2)
一些想法:
跟踪您自己的时间,独立于系统时钟。当您需要显示内容时,只能使用系统时钟将时间转换为用户挂钟时间。
一个设备上的时间单位(如秒)应该等于另一个设备上的一秒钟,例如相信两个设备的持续时间相等)
网络延迟是一个根本问题。考虑到两个设备之间可能总是存在偏移。也许你可以想出一种揭示滞后的方法,或者你可以想出一种绝对时间不相关的方式
这是一个想法:当device1每5秒发送一个sync-packet时,device2应该在它执行第二次6发生的任何事情之前有这个数据包。所以如果数据包在5秒内没有在device2中,它可能会等待数据包在继续执行下一步需要完成的任务之前到达。当数据包到达3秒时,设备2应该保持它并在第二个处理它5.以双向方式执行此操作,并且两个应用程序在5秒的时间范围内同步。根据您的要求和网络,您必须确定“等待”的含义以及发送同步数据包的频率。
答案 2 :(得分:1)
您可以通过web服务实现向全局时钟发送标志,在此您只需设置开始和结束时间的标志,这样您就可以轻松地同步两个以上设备之间的时间。