iOS开发-检查互联网时间

iOS开发-检查互联网时间,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我正在开发一个应用程序,每5分钟重新填充一次。检查上次加注后的时间的最佳方法是什么,这样用户就不会通过更改设备上的时间来欺骗系统 例如,看看糖果粉碎。在那里更改系统时间会给您带来额外的生命,而这正是我需要防止的。运行[NSTimer scheduledTimerWithTimeInterval:300.0]怎么样 目标:自我 选择器:@selectorgiveLife: 用户信息:无 重复:是] 这应该每5分钟执行一次giveLife,在那里你可以给额外的生命。 据我所知,NSTimer启动后不

我正在开发一个应用程序,每5分钟重新填充一次。检查上次加注后的时间的最佳方法是什么,这样用户就不会通过更改设备上的时间来欺骗系统

例如,看看糖果粉碎。在那里更改系统时间会给您带来额外的生命,而这正是我需要防止的。

运行[NSTimer scheduledTimerWithTimeInterval:300.0]怎么样 目标:自我 选择器:@selectorgiveLife: 用户信息:无 重复:是]

这应该每5分钟执行一次giveLife,在那里你可以给额外的生命。
据我所知,NSTimer启动后不会因更改时钟时间而受到影响。

我建议您做一些类似于《笨拙的忍者》的事情

每次应用程序处于活动状态时[ApplicationIDBecomeActive:]-您都会尝试获取internet时间。 如果设备时间戳小于存储的时间戳-不允许继续。要求连接到internet。 实施一项功能以保存上次再生循环的时间戳。因此,即使用户成功地获得更快的实时充值,一旦他恢复到原来的时间并继续游戏,它将表明下一次实时充值将是在用户最后一次使用应用程序的时间,而不是5分钟以后的方式。为了惩罚作弊者,但可能会设置一个最大限制,如果上次再生时间比当前时间长5分钟,那么将其设置为1小时?这仍然是一种惩罚,但没有那么大的损失球员。 长的

根据我能分辨出的

每次应用程序激活时,您都会尝试获取internet时间。在这一点上-你不需要再检查应用程序打开时的时间,直到下一次应用程序再次激活

在《笨手笨脚的忍者》中,即使互联网不可用,他们也允许使用该应用程序。所以——比如,若我激活飞行模式,将时间调整为提前几个小时,然后打开应用程序——它会发现互联网不可用,因此无法比较时间。还有——我不得不等着修理的打孔袋、球等东西——现在都修好了。耶

但如果我多次重复同样的事情,最后我想回到原来的日期和时间,然后打开应用程序,它就会知道有些地方不对劲。它可能存储了一些最后打开的时间戳,如果时间大于实际的设备时间,那么用户可能在做坏事。和-出现警报-应用程序必须连接到服务器才能继续

对于用户来说,将时间向前移动的另一个缺点,但对于开发人员来说是很好的——有一些东西会在一段时间后自动重新生成,但需要选择它们才能再次启动重新生成。在《笨手笨脚的忍者》中,鸡偶尔会生一个蛋。如果鸡蛋没有被捡起,它仍然会保留一个时间戳,即它应该/曾经被生成的时间。所以-想象一下,用户成功地转发了很多次时间,直到它已经比原始时间提前了1天-现在他想把时间设置回原始时间,这样时钟就会显示正确的时间。用户打开应用程序后,时间会同步,但生成的鸡蛋现在会显示,它将在1天后准备好-最后保存的时间戳。但这也可以用于所有需要时间的项目。为什么笨手笨脚的忍者没有把这个东西用在所有物品上?也许他们担心,如果用户看到,在很长一段时间内没有可用的东西,用户将停止播放。因此,最好有一个作弊用户,而不是根本没有用户

NSURL *url = [NSURL URLWithString:@"http://www.timeapi.org/utc/now"];
NSString *str = [[NSString alloc] initWithContentsOfURL:url usedEncoding:Nil error:Nil];

str = [str stringByReplacingOccurrencesOfString:@"T" withString:@" "];
str = [str stringByReplacingOccurrencesOfString:@"+01:00" withString:@""];

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
NSDate *date = [dateFormat dateFromString:str];