1

在我的应用程序中,我想每 30 分钟发送一次本地推送通知。一种方法是配置local push notification并触发它。然而,用户有可能改变他的时间并向前移动 30 分钟。这样就可以作弊了。

我想配置我的应用程序,以便通知仅在 30 分钟后发生。我怎样才能做到这一点。我的应用程序确实与服务器通信并且可以获得它的时间戳,但我想做不使用太多服务器资源的事情。

4

1 回答 1

0

我能想到的检测用户更改系统时钟的唯一方法如下:

  1. 当应用程序启动时,询问您的服务器时间并注意该时间和[NSDate date]. 坚持作为[NSNumber numberWithFloat:serverOffset];
  2. 实现这样的方法- (BOOL)deviceClockChanged再次询问服务器并与持久值进行比较。如果差异大于同步请求的时钟漂移 + 延迟的一些小的容差,那么您可以断定时钟已更改。在 UTC 中执行所有这些操作,这样它就可以独立于用户在时区之间旅行。
  3. 考虑一下:如果用户非常想在时间上欺骗你的应用程序以延迟通知,弄乱他手机的其余部分,也许你应该让他编辑通知时间表。

如果您愿意,我可以为第 1 点和第 2 点提供代码示例,如果您愿意,我可以为第 3 点提供一些 @"alert text",这将使用户对编辑他的通知感到非常内疚。

我的原始答案在这里。如果您选择让用户编辑通知,这些方法将是关键... UIApplication 有一个属性:

NSArray *scheduledLocalNotifications;

并实现:

- (void)cancelLocalNotification:(UILocalNotification *)notification

所以要改变一个,取消它,然后重新安排它。

于 2013-03-07T16:50:29.697 回答