2012-06-18 22 views
2

推送通知恢复应用考虑这种情况:获得从后台

1)启动该应用

2)将在后台应用程序(按Home键)

3)服务器发送推送通知到客户端

4)用户恢复该应用点击的图标从菜单

在这种情况下didReceiveRemoteNotification和didFi nishLaunchingWithOptions不被调用,所以如何获得通知?

+2

为什么不会调用didReceiveRemoteNotification?我想我对此感到困惑。用户要么会在应用程序关闭时弹出警告,要么应用程序正在运行,该方法即将触发,您可以处理通知,但这是适当的。是否有一些时间问题/错误,我没有遇到过之前,导致didReceiveNotification不会触发,因为它目前工作在我正在使用的实践应用程序。如果您在通知点击而应用程序是在后台,如果你不恢复其图标的应用点击 –

+0

didReceiveRemoteNotification被调用。文档和我自己的项目都证实了这一点。如果应用程序在内存中活动(即当前位于前台),则调用didReceiveRemoteNotification。 – ech0s7r

+0

如果应用程序正在运行的方法是最绝对称得上 –

回答

0

您应该检查applicationWillEnterForeground:方法。

+0

是,这种方法被称为简历不是之后。但是,你如何以及检查什么? – ech0s7r

+0

您检查didReceiveRemoteNotification或didFinishLaunchingWithOptions推送通知同样的事情 –

0

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

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

application:didReceiveRemoteNotification:因此意味着不传输数据和更新模型,而是对事件做出反应并启动必要的过程。虽然大部分时间,数据可能非常小,以至于无法下载任何更多内容,因此适用于通知,因此应用程序可以继续。

2

简单的答案:在这种情况下,你不能得到它。

如果推送通知包含了重要的有效载荷则它不应该包含它,因为你不应该依赖于它的东西很重要,因为:

  • 通知,不能保证在第一时间被传递到设备

  • 用户可以关闭通知

  • 他们可能忽视它们

  • 如果设备被关闭时,它是由于要显示的那么它将失去

如果需要知道,如果服务器发送,然后通知进行连接家里,当你成为活跃并问问它是否这样做。