当应用程序不在前台或后台时拦截推送通知

时间:2015-11-28 11:44:19

标签: push-notification swift2

我的应用在以下情况下正确处理/拦截推送通知: 1.应用程序处于前台/活动状态 2.打开通知中的推送通知 3.当徽章可见时,从App Icon打开应用程序。该应用程序在后台

以上所有内容均通过检查徽章编号!= 0进行处理:

applicationWillEnterForeground
applicationDidBecomeActive
application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject])

我甚至在didFinishLaunchingWithOptions进行了检查以防万一。

但是,以下情况会导致应用无法拦截推送:

  1. 应用程序暂时没有运行(让我们一天)
  2. 发送,接收推送并显示非零通知徽章
  3. 用户从App图标
  4. 启动应用程序

    在这种情况下,我对badge number != 0的检查没有被触发(否则推送会被截获)。

    在我的应用程序中还需要做些什么来处理这种情况?

1 个答案:

答案 0 :(得分:0)

由于推送通知传递是在尽力而为的基础上完成的,因此我在服务器上添加了一种方法来记录新数据可用的最后时间点。在应用程序方面,我检查推送和最后的手段(即如果未检测到推送),我检查服务器是否有新数据。如果是,我会触发数据下载。

这意味着在大多数情况下,我可以依赖推送但是当它失败时(无论出于何种原因),使用服务器进行快速检查可以使应用保持同步(即,如果需要,可以触发数据下载)。 / p>

我在应用程序中添加了额外的逻辑,以确保如果推送在以后点击用户,应用程序将不会触发数据下载,除非数据签名(CoreData与服务器上记录的最后一次推送)表明存在&#sa; sa需要这样做。

虽然这不是我追求的解决方案,但它更可靠。