如何处理用户数据在不同时间到达的多个推送通知?

我的应用程序正在接收从服务器发送到苹果后端的APN。 一旦通知到达用户的设备,用户自然就不能打开该应用。 在此期间,我的服务器可能会推送更多通知。 它们都包含一些用户数据,这些数据在处理通知时很重要。 那么如何处理呢? iOS不会捆绑和给我一批,是吗?

以下是我将如何解决这个问题的方法,其中没有一个是简单的。

  1. 服务器跟踪没有看到的数据,并在到达一个新的请求时,总是发送一批所有新的通知,反映计数作为徽章计数。
  2. 通过录制通知popup窗口打开客户端。 在这种情况下,它具有didReceiveRemoteNotification所有需要的数据。 要么
  3. 客户端忽略通知popup窗口并通过点击应用程序图标打开应用程序(可能稍后)。 在这种情况下, didReceiveRemoteNotification不会被调用,因此应用程序必须从服务器获取所有需要的数据。 要么
  4. 服务器永远不会发送任何用户数据,客户端每次启动或检索didReceiveRemoteNotification中的数据时都会检查新的东西。

还要别的吗? 更简单的我失踪了?

4号是正确的做法。 无法保证在收到APN时,您的任何应用程序代码都将运行,除了iOS7以外。 所以,当你的应用程序启动时,它必须与你的服务器检查它应该显示的任何新信息。

编写这个代码最简单的办法就是向服务器询问显示的最新信息,而不是依赖APN中的信息。 仅使用APN中的信息来确定要导航到的新信息,以便应用程序显示用户点击的任何信息。

这已经改变了iOS7,在那里你可以使用remote-notification后台模式,无论何时推送消息到达。 请参阅https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:didReceiveRemoteNotification:fetchCompletionHandler