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

时间:2012-09-05 09:26:36

标签: ios apple-push-notifications

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

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

但是,当应用程序在后台运行或者只是停止时,不会调用该方法。我已经读过你应该在方法didFinishLaunchingWithOptions方法中添加一些行来从userInfo字典中获取通知并处理它。这很好用,但只有在通过Notification Center点击通知打开应用程序时才可以。这意味着如果您通过单击其徽章打开应用程序,或者只是通过更改上下文(如果您在后台运行它),该应用程序永远不会意识到已收到通知。此外,如果收到多个通知,我们可以只需点击通知中心即可同时处理其中一个,这很痛苦: - )

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

那么,是否有人知道这样做的方法?提前谢谢。

2 个答案:

答案 0 :(得分:3)

当推送通知到达并且用户点击“取消”时,您的应用无法再次阅读该推送通知。您必须实现单独的功能(很可能在服务器端)以获取发送到此设备的通知列表。

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

答案 1 :(得分:1)

好的,那么一个可能的解决方案是让另一个数据库表中的消息带有'read'标志和messageID字段?默认情况下,读取标志为NO,然后当应用程序成功读取并显示时,它会将标志更新为YES?

只需要256个字节,需要什么样的ID字段长度?

编辑,

执行此计划并成功运作。