5

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

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

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

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

那么,有人知道怎么做吗?提前致谢。

4

2 回答 2

3

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

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

于 2012-09-05T09:37:16.050 回答
1

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

并且只有 256 个字节可以使用,需要什么样的 ID 字段长度?

编辑,

执行此计划并成功运行。

于 2015-04-21T09:41:17.360 回答