2

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

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

4

2 回答 2

2

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

  1. 使用 NSDate,您已经知道可以通过手动更改设备上的日期来规避它。
  2. 使用时间服务器。通过查询时间服务器,您可以获得独立的日期时间值。存储该值并与之比较以确定是否经过了正确的时间。当然,缺点是这需要互联网连接才能使用功能属性。
  3. 使用系统时钟值或一系列值来粗略计算经过的时间。类似CACurrentMediaTimeor的函数mach_absolute_time()可以提供要比较的计数。您可以获取这些值并递增它们,直到达到指定的持续时间以重置标志以进行第二天检查。

单独的选项都不能提供理想的解决方案,但通过组合这些方法,您可能会获得可接受的保证级别,即用户仅在允许的时间内访问信息。

于 2013-05-03T15:10:24.517 回答
1

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

在与我们的团队讨论从设备获取日期选项之后。我们决定不使用这种方法,因为正如您所说,一些用户可能会更改日期设置,而且一些用户可能会不情愿地将他们的设备设置为其他国家的时间和日期区域,这些时间和日期区域可能会给用户带来日期冲突问题。

最后我们决定创建一个简单的网页并获取http 200http 404请求该信息。您不必将数据或其他任何内容放到服务器上,我们只是想从 web 获取响应代码。

因此,假设您有一个网页http://xxxxxxxxxxxxxx.pdf,或者.html我们没有将任何 pdf 文件放到服务器上,因此用户总是会http 404 response在这种情况下禁用或隐藏相关的数据/按钮/行。在会议的第二天,我们放置了一个虚拟页面,现在用户可以获取http 200 response,所以我们启用按钮/行/数据。

如果您决定使用这种方法,请从此处下载 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;
                              }];
于 2013-05-03T13:46:32.493 回答