网络时间协议 (NTP) 客户端。
最老的 iPhone、iTouch 或 iPad 上的时钟并没有与正确的时间紧密同步。在从电话系统获取时间的设备的情况下,有一个设置可以启用与电话公司时间的同步,但该时间已被证明与正确时间相差一分钟以上。
此外,用户可能会改变他们的设备时间,这可能会严重影响依赖于正确时间执行功能的应用程序,或者可能会将他们的设备时钟设为过去,试图规避到期日期。
本项目包含使用简单网络时间协议 (SNTP: RFC 5905) 从标准时间服务器获取时间的代码。由于目标是将时间精度提高到十分之一秒,而不是到微秒,因此实现并不像该文档中所描述的那样严格。
使用 NTP 协议的计算机通常会将其用于一个连续的底层任务来连续追踪时间。一个后台应用程序会使用从一组时间服务器中获得的不定期的时间估计,通过随着时间的推移对这些值进行采样来确定最佳时间。iOS 应用程序则不同,更有可能希望得到一个一次性、快速的时间估计。
将以下行添加到 Podfile 中
pod NHNetworkTime
然后请在终端运行以下命令进行安装
pod install
注意:如果上述 pod 无法正常工作,请尝试在 Podfile 中使用以下 pod 定义
pod 'NHNetworkTime', :git => 'https://github.com/huynguyencong/NHNetworkTime.git'
将 NHNetworkTime 文件夹中的所有文件添加到您的项目中。然后使用 Cocoapod 或手动添加 CocoaAsyncSocket
。
每次需要获取时间时都导入此模块
#import "NHNetworkTime.h"
在 -application:didFinishLaunchingWithOptions:
中调用 synchronize
来更新从服务器获取的时间,当应用程序启动时
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[NHNetworkClock sharedNetworkClock] synchronize];
return YES;
}
在源代码的任何地方,您都可以在同步完成时获取网络时间
NSDate *networkDate = [NSDate networkDate];
或者在时间更新时,您可以在任何想要的位置添加通知以重新更新您的UI
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkTimeSyncCompleteNotification:) name:kNHNetworkTimeSyncCompleteNotification object:nil];
use_frameworks!
如果您在Podfile中启用了use_frameworks!
选项,请在每个代码文件中导入NHNetworkTime
框架使用NHNetworkTime
对象
@import NHNetworkTime
use_frameworks!
将NHNetworkTime.h
导入到您的桥接头文件中
#import <NHNetworkTime.h>
NHNetworkTime.h
导入到其中(更多信息请见:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html)现在,您可以在您的代码中调用以下代码
NHNetworkClock.sharedNetworkClock().synchronize()
和
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("syncCompleteNotification"), name: kNHNetworkTimeSyncCompleteNotification, object: nil)
NSNotificationCenter
添加观察者kNHNetworkTimeSyncCompleteNotification
以在时间同步完成时接收通知isSynchronized
:检查网络时间是否已同步shouldUseSavedSynchronizedTime
:在使用从服务器同步前保存在最后的同步中的偏移时间。默认是YES。isAutoSynchronizedWhenUserChangeLocalTime
:在用户更改本地时间时是否自动同步。默认是YES。将其添加到项目文件名ntp.hosts
中,每行包含一个时间服务器地址。如果文件不存在,则使用默认时间服务器。以下是一个ntp.hosts
文件的示例
asia.pool.ntp.org
europe.pool.ntp.org
north-america.pool.ntp.org
NHNetworkTime From ios ntp开源项目,由jbenet开发。NHNetworkTime修复了一个从原始源中获取错误时间的关键错误,并添加了更多改进。
NHNetworkTime是在Apache许可下发布的。有关详细信息,请参阅LICENSE。版权所有 © Nguyen Cong Huy