从iPhone应用程序中了解设备中的date和时间设置

我想知道用户是否已将其设备设置为在iPhone的Settings.app中自动设置date和时间。 我需要这些信息,因为我想让用户只能在应用程序中访问一些信息,只能在第二天再次访问。 但是聪明的用户可以更改date并访问信息。 所以我想检查他们是否自动为设备设置date/时间。

有没有办法做到这一点。 请build议任何其他替代方式,如果存在。 提前致谢。

我不相信有一种方法来检测用户对自动更新date时间设置的偏好。 要确定从给定点的时间长度,你有几个选项,没有一个是绝对的或没有任何错误。

  1. 使用NSDate,您可以通过手动更改设备上的date来避开已知的NSDate。
  2. 使用时间服务器。 通过查询时间服务器,您可以获得独立的date时间值。 存储该值并与之比较以确定是否已经过了适当的时间。 当然,这个缺点是需要互联网连接才能实现function。
  3. 使用系统时钟值或一系列值粗略计算已用时间。 像CACurrentMediaTimemach_absolute_time()这样的函数可以提供一个计数来比较。 您可以采取这些值,并增加它们,直到您达到指定的持续时间重置您的第二天检查的标志。

没有一个选项能够提供理想的解决scheme,但是通过组合这些方法,您可以在允许的时间内达到用户正在访问信息的可接受水平的保证。

这是一个替代的build议,我有一个类似的问题,我正在开发一个会议应用程序。 我只想在会议的第二天向用户展示一些数据。

在与我们的团队讨论从设备获取date选项后。 我们决定不使用这种方法,因为正如你所说的,一些用户可能会改变date设置,也有一些用户可能不情愿地将他们的设备设置到其他国家的时间和date区域,可能会有用户的date冲突问题。

最后,我们决定创build一个简单的网页,获取该信息的http 200http 404请求。 你不必把你的数据或任何东西到服务器上,我们只是想从网上获取响应代码。

所以可以说你有一个网页http://xxxxxxxxxxxxxx.pdf.html我们不会把任何PDF文件到服务器,所以用户总是得到http 404 response在这种情况下,我们禁用或隐藏相关的数据/button/行无论什么。 在会议的第二天,我们把一个虚拟的页面,所以现在用户可以得到http 200 response ,所以我们启用button/行/数据。

如果你决定使用这种方法从这里下载nsurlconnection块

然后使用下面的代码:

 NSURL *theFileURL=[NSURL URLWithString:@"yoururl"]; NSURLRequest *request = [NSURLRequest requestWithURL:theFileURL]; [URLConnection asyncConnectionWithRequest:request completionBlock:^(NSData *data, NSURLResponse *response) { //get data and response if ([response isKindOfClass:[NSHTTPURLResponse class]]) { NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse *) response; //NSString *fileMIMEType = [[httpResponse MIMEType] lowercaseString]; NSLog(@"httpResponse.statusCode %i",httpResponse.statusCode); if (httpResponse.statusCode==200) { //correct respond show data } else if (httpResponse.statusCode==404) { //no file this NSLog(@"no file at the server"); } } //[HUD removeFromSuperview]; } errorBlock:^(NSError *error) { //get error NSLog(@"error %@",error); } uploadPorgressBlock:^(float progress) { //Upload progress (0..1) } downloadProgressBlock:^(float progress) { //Download progress (0.1) //progress += 0.01; //HUD.progress = progress; }];