5

我在这里阅读了一些关于在应用程序未运行时接收推送通知的问题(比在后台更多,这意味着它已完全关闭)。这个问题尤其有助于弄清楚如何使用 launchOptions 字典确定一个人是否正在接收。

但是,我很困惑,我完全承认这可能是我的一个重大疏忽:当我的设备在应用程序关闭时收到此应用程序的推送通知,然后我打开我的应用程序时,launchOptions 字典是一个空指针。从前面提到的链接中接受的答案的描述以及其他地方,我认为我应该能够看到通知有效负载;但是什么都没有。我正在为 iOS 5.1.1 开发。

我唯一的另一个想法是检查启动时的徽章数量(大于零,做某事......),但这似乎非常不可靠。

谁能告诉我我错过了什么?预先感谢您的帮助!

4

1 回答 1

8

application:didFinishLaunchingWithOptions:由于通知而启动应用程序时,只会使用有效负载信息调用。例如,如果用户点击通知警报(在通知中心添加)或content-avialble = 1在有效负载中收到的通知(报亭通知)并且如果您的应用不在前台也不在后台,则可能会发生这种情况。

如果您的应用在后台运行时收到通知。如果是报亭通知,或者如果用户点击警报的操作按钮,则调用下面的方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

[[UIApplication sharedApplication] applicationState]等于UIApplicationStateActive

在上述情况下,如果用户没有点击通知警报的操作按钮并通过点击它来启动应用程序,则不会调用didFinishLaunchingWithOptionsdidReceiveRemoteNotification调用。

如果您的应用在前台didReceiveRemoteNotification调用时收到通知,则[[UIApplication sharedApplication] applicationState]等于UIApplicationStateActive.

对于徽章 in notification,如果您的应用程序未运行,则不会执行任何代码,并且徽章在应用程序图标中增加 1。当您启动应用程序(点击应用程序图标)didFinishLaunchingWithOptions时,通常会调用它。(如果收到通知时应用在后台或前台,同上)

所以我认为这涵盖了所有可能的情况。另请注意,背景案例适用于iOS SDK >= 4.0

于 2012-08-29T21:25:20.763 回答