我正在阅读 Apple 的文档
在我看来,有相互矛盾的陈述。有人可以清除这些混淆点吗?现在让我们严格地谈谈远程通知(相对于本地)。
文档说,如果按下通知上的操作按钮,它会调用 application:didFinishLaunchingWithOptions 并传入通知有效负载。后来它说如果应用程序在前台运行,它会通过 application:didReceiveRemoteNotification: 传递通知。这对我来说意味着当应用程序在后台运行或未运行时,会调用 application:didFinishLaunchingWithOptions。否则,调用 application:didReceiveRemoteNotification:。
后来,有一个 iOS Note 说如下:
"iOS 注意:在 iOS 中,您可以通过检查应用程序的状态来确定应用程序是否由于用户点击操作按钮而启动,或者通知是否已传递到已运行的应用程序。在委托的应用程序实现中:didReceiveRemoteNotification: 或 application:didReceiveLocalNotification: 方法,获取 applicationState 属性的值并评估它,如果值为 UIApplicationStateInactive,则用户点击了操作按钮;如果值为 UIApplicationStateActive,则应用程序在收到通知时位于最前面。 "
这对我来说意味着 application:didReceiveRemoteNotification: 在应用程序已经处于前台时以及如果用户按下操作按钮(或在 iOS 5 中滑动操作滑块)以前台/启动应用程序时调用。
我的困惑的根源可能在于文档暗示通知有效负载与 application:didFinishLaunchingWithOptions: 方法一起发送的第一部分,或者对“正在运行”的应用程序的误解(后台应用程序是否被视为“正在运行”?) . application:didReceiveRemoteNotification: 的文档声明它被称为“运行”应用程序。
所以,总而言之,我能否澄清一下:
1) application:didReceiveRemoteNotification: 是否总是在应用程序处于前台或用户选择对通知“采取行动”时调用?如果不是,我们如何理解 iOS Note 关于确定应用程序状态是活动还是非活动的意义?
2)后台应用程序是否“正在运行”,至少在文档声称应用程序的意义上:didReceiveRemoteNotification 被称为运行应用程序?
3) 为了完成,后台应用程序 UIApplicationStateInactive 还是 Active?