更改时间后避免本地推送通知触发

时间:2013-03-07 16:37:17

标签: iphone objective-c cocoa-touch

在我的应用中,我想每30分钟发送一次本地推送通知。一种方法是只配置local push notification并激活它。但是,用户有可能改变他的时间并向前迈进30分钟。以这种方式可以做作弊。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 当应用启动时,请询问您的服务器时间并记下它与[NSDate date]之间的区别。坚持为[NSNumber numberWithFloat:serverOffset];
  2. 实施类似- (BOOL)deviceClockChanged的方法,再次询问服务器并与持久值进行比较。如果差异大于同步请求的时钟漂移+延迟的一些小容差,那么您可以断定时钟已更改。在UTC中完成所有这些操作,使其独立于时区之间的用户旅行。
  3. 考虑一下:如果用户想要愚弄你的应用程序有关时间以延迟通知,弄乱手机的其余部分,也许你应该让他编辑通知时间表。
  4. 如果你愿意,我可以提供第1点和第2点的代码示例,如果你愿意,我可以为第3点提供一些@“警告文本”,这会让用户对编辑他的通知感到非常内疚。

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

    NSArray *scheduledLocalNotifications;
    

    并实施:

    - (void)cancelLocalNotification:(UILocalNotification *)notification
    

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