我如何处理iOS中的未读推送通知?

我有一个iOS 5.1应用程序,注册到APNS服务接收通知。 注册成功,我收到正确的通知。 当我尝试处理通知时出现问题。

一旦应用程序正在运行,AppDelegate中的didReceiveRemoteNotification方法将被正确调用,因此通知按预期进行处理。 但是,这仅在应用程序在前台运行时才会发生。

但是,当应用程序在后台运行或仅停止时,该方法不会被调用。 我读过,你应该添加一些行方法didFinishLaunchingWithOptions方法来获取来自userInfo字典的通知,并处理它。 这工作得很好,但只有通过点击通知中心的通知打开应用程序。 这意味着,如果您通过点击徽章来打开应用程序,或者只是在后台运行时更改上下文,则应用程序从未意识到收到通知。此外,如果收到多个通知,我们可以只能通过点击通知中心来处理其中的一个,这是一个痛苦:-)

有什么方法可以阅读通知中心的待处理通知吗? 我知道有一种方法来刷新他们使用方法cancelAllLocalNotifications但我还没有find一种方法来阅读它们。 我真的需要处理所有这些。 我想在第三方通知服务器上实现一个通信协议,以便在应用程序到达前台时再次检索信息,但是由于信息已经在操作系统中,所以如果无法以某种方式访问​​它,我会觉得很奇怪。

那么,有没有人知道一个办法呢? 提前致谢。

当推送通知到达,用户点击“取消”,你的应用程序无法再读取推送通知。 您必须实现一个单独的function(最可能在服务器端)来获取发送到此设备的通知列表。

例如,如果在您的应用中提供了聊天function,并且您通过推送通知发送了聊天消息,则还应该在服务器上保留聊天消息。 如果用户点击任何推送通知中的“取消”,则该聊天消息将不会显示在iOS设备上。 在这种情况下,当应用程序在后台进入时,您可以调用服务器并获取所有以前的聊天消息(通过推送通知发送)。

好吧,所以一个可能的解决scheme是将另一个数据库表中的消息与“读”标志和messageID字段? 默认情况下读取标志是NO,那么当应用程序成功读取并显示时,它将标志更新为YES?

而只有256个字节的玩,什么样的ID字段长度将是必要的?

编辑,

执行了这个计划,并成功地开展了工作。