从后台获取推送通知恢复应用程序

时间:2012-06-18 17:50:47

标签: iphone ios ipad

考虑这种情况:

1)启动应用

2)将应用程序置于后台(按“主页”按钮)

3)服务器向客户端发送PUSH通知

4)用户从菜单中单击其图标

恢复应用程序

在这种情况下,不会调用didReceiveRemoteNotification和didFinishLaunchingWithOptions,因此如何获取通知?

3 个答案:

答案 0 :(得分:2)

简单回答:在这种情况下,你无法得到它。

如果推送通知包含重要的有效负载,那么它不应该包含它,因为你不应该依赖它来做任何重要的事情,因为:

  • 无法保证通知首先发送到设备

  • 用户可以关闭通知

  • 他们可以忽略它们

  • 如果设备在显示时关闭,则会丢失

如果您需要知道服务器是否已发送通知,请在您处于活动状态时建立连接,并询问是否这样做。

答案 1 :(得分:0)

您应该检查applicationWillEnterForeground:方法。

答案 2 :(得分:0)

我认为如果用户选择忽略推送通知,应用程序将看不到任何内容。首先想到的解决方法是提供一种检查服务器的方法,如果自上次打开应用程序以来发生任何值得推送通知的事情,并将其与本地数据相关联。

我认为这个系统背后的想法是将实际功能与推送通知分开,并确保通知仅用于一个目的 - 通知新数据/事件/等,从而将数据下载和处理留给应用程序一旦它完全在前景。即所有内容都应该在启动顺序中重复,以确保应用程序始终是最新的,即使停止时间内的通知未被接收/忽略。

因此,

application:didReceiveRemoteNotification:意味着不传输数据和更新模型,而是对事件做出反应并启动必要的程序。虽然大多数情况下,数据可能非常小,以至于它适合通知,因此应用程序可以在不下载任何其他内容的情况下继续进行。