2

考虑这种情况:

1) 启动应用程序

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

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

4)用户从菜单中单击其图标恢复应用程序

在这种情况下 didReceiveRemoteNotification 和 didFinishLaunchingWithOptions 没有被调用,那么我如何获得通知?

4

3 回答 3

2

简单的答案:在这种情况下,您无法获得它。

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

  • 不保证通知首先会发送到设备

  • 用户可以关闭通知

  • 他们可以忽略他们

  • 如果设备在应该显示时被关闭,那么它将丢失

如果您需要知道服务器是否已发送通知,请在您激活时建立连接并询问它是否发送。

于 2012-06-18T19:29:30.377 回答
0

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

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

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

于 2012-06-18T18:12:56.677 回答
0

你应该检查applicationWillEnterForeground:方法。

于 2012-06-18T17:56:25.830 回答