应用未运行时推送通知 - launchOptions字典为空

时间:2012-08-29 21:10:19

标签: objective-c ios ios5 push-notification ios5.1

我在这里阅读了一些关于在应用程序未运行时接收推送通知的问题(超过后台,意味着它完全关闭)。 This question in particular最有助于确定如何使用launchOptions字典确定是否正在接收。

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

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

谁能告诉我我失踪了什么?提前感谢您的帮助!

1 个答案:

答案 0 :(得分:8)

只有在通知启动应用程序时才会使用有效负载信息调用

application:didFinishLaunchingWithOptions:。例如。如果用户点击通知警报(在通知中心中添加)或在有效负载中收到content-avialble = 1的通知(报亭通知)&如果您的应用程序在后台不在前台。

如果您的应用在应用处于后台时收到通知。如果是报亭通知或者如果用户点击以下警告的操作按钮,则称为

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

[[UIApplication sharedApplication] applicationState]不等于UIApplicationStateActive

在上述情况下,如果用户没有点按通知提醒的操作按钮并通过点按它启动应用,则不会调用didFinishLaunchingWithOptionsdidReceiveRemoteNotification

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

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

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

有效