当前位置:   article > 正文

iOS应用中NTP的使用_ios开发 修改系统时间 网络访问

ios开发 修改系统时间 网络访问

Network Time Protocol是用来使时间同步化的一种协议,可以通过网络取得当前时间,而不依赖与于本地系统时间。

 

在iOS应用的开发过程中,经常会需要取得系统时间,对绝大多数的应用来说,[NSDate date]就已经足够了,但是单纯 

利用系统时间的弊端在于,系统时间是可以被用户随意修改的,当应用对时间的要求比较高的场合,系统时间就不那么可靠了。 

比如按期收费订阅等处理要求,虽然可以通过每次都向苹果发出支付请求来保证用户不会过期使用,但用户体验就会相当恶劣。 

当然也可以通过部署在网络上的业务服务器来提供时间的验证,但如果没有自己去部署业务服务器的条件,又该怎样保证时间的正确性呢? 

这种时候,NTP就有了用武之地。  


网络上NTP服务很多,通过iOS来访问NTP的开源方法也不少。这里讲解ios-ntp,点此下载开源库:IOS-NTP 

使用方法很简单,github上也有简单介绍:

 

第一步:添加相应的支持文件。
我们要把这个Demo里,ios-ntp-lib和network-udp文件夹加到自己的项目里来,因为ios-ntp需要用到AyncUdpSocket。当然还有ios-ntp-app文件夹下的ntp.hosts文件,作为支持,一并加到项目里面来。
第二步:引入头文件和开启NTP服务。
我们只要把ios-ntp.h这个文件导入要使用的文件中就行了。
第三步:开启时间同步服务。
[NetworkClocksharedNetworkClock];  
现在所有的配置工作都已经做完了。如果我们需要得到当前标准时间,可以使用+(NSDate *) networkDate;这个方法。

判断当前时间和系统时间的差,可以这样写,
      NSDate*date = [NSDate date];
 
  NSInteger outTime = [[NSDate networkDate]timeIntervalSinceDate:date];

// [NSDate networkDate],输出是GMT时间(GMT(Greenwich Mean Time)代表格林尼治标准时间),如果想获取当前时间需要通过时间戳进行转换
 NSDate * date = [NSDate networkDate];// 获得时间对象
    NSTimeZone *zone = [NSTimeZone systemTimeZone]; // 获得系统的时区
    NSTimeInterval time = [zone secondsFromGMTForDate:date];// 以秒为单位返回当前时间与系统格林尼治时间的差
    NSDate *nowDate = [date dateByAddingTimeInterval:time];// 然后把差的时间加上,就是当前系统准确的时间

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/808218
推荐阅读
相关标签
  

闽ICP备14008679号