我正在阅读苹果文档关于
对我来说,它似乎有矛盾的陈述。可以有人澄清这些混淆点吗?现在让我们严格谈论远程通知(而不是本地通知)。
文档说,如果通知上的操作按钮被按下,它会调用application:didFinishLaunchingWithOptions并传递通知负载。稍后它说,如果应用程序在前台运行,则通过application:didReceiveRemoteNotification:传递通知。这暗示着当应用程序处于后台或未运行时,将调用application:didFinishLaunchingWithOptions。否则,将调用application:didReceiveRemoteNotification:。
稍后,有一个iOS注释,内容如下:
在iOS中,您可以通过检查应用程序状态来确定应用程序是由用户点击操作按钮启动还是通过向已运行的应用程序传递通知而启动。在委托的application:didReceiveRemoteNotification:或application:didReceiveLocalNotification:方法的实现中,获取applicationState属性的值并评估它。如果值为UIApplicationStateInactive,则表示用户点击了操作按钮;如果值为UIApplicationStateActive,则表示当应用程序接收到通知时,应用程序位于最前面。这对我意味着当应用程序已经在前台运行时,以及用户按下操作按钮(或在iOS 5中滑动操作滑块)将应用程序置于前台/启动应用程序时,都会调用application:didReceiveRemoteNotification:。
我的困惑可能源于文档中暗示通知负载是通过application:didFinishLaunchingWithOptions:方法发送的,或者对“运行中”应用程序的误解(后台应用程序是否被认为是“运行中”?)。 application:didReceiveRemoteNotification:的文档说明它适用于“正在运行”的应用程序。
因此,总结一下,我可以得到以下澄清:
1) 当应用程序处于前台或用户选择“操作”通知时,是否总是调用application: didReceiveRemoteNotification:?如果不是,我们如何理解iOS注释中关于确定应用程序状态为活动或非活动的说明?
2) 从文档声称application: didReceiveRemoteNotification被调用的角度来看,后台应用程序是否“正在运行”?
3) 为了完整起见,后台应用程序是UIApplicationStateInactive还是Active?