我在这里阅读了一些关于在应用程序未运行时接收推送通知的问题(超过后台,意味着它完全关闭)。 This question in particular最有助于确定如何使用launchOptions字典确定是否正在接收。
然而,我非常困惑,我完全承认这可能是我的一个巨大的疏忽:当我的设备在应用程序关闭时收到此应用程序的推送通知,然后我打开我的应用程序, launchOptions字典是一个空指针。从前面提到的链接和其他地方接受的答案的描述中,我收集到我应该能够看到通知有效载荷;但没有什么。我正在为iOS 5.1.1开发。
我唯一的另一个想法是检查启动时的徽章数量(大于零,做某事......),但这似乎非常不可靠。
谁能告诉我我失踪了什么?提前感谢您的帮助!
答案 0 :(得分:8)
application:didFinishLaunchingWithOptions:
。例如。如果用户点击通知警报(在通知中心中添加)或在有效负载中收到content-avialble = 1
的通知(报亭通知)&如果您的应用程序在后台不在前台。
如果您的应用在应用处于后台时收到通知。如果是报亭通知或者如果用户点击以下警告的操作按钮,则称为
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
[[UIApplication sharedApplication] applicationState]
不等于UIApplicationStateActive
。
在上述情况下,如果用户没有点按通知提醒的操作按钮并通过点按它启动应用,则不会调用didFinishLaunchingWithOptions
或didReceiveRemoteNotification
。
如果您的应用在前台didReceiveRemoteNotification
被称为[[UIApplication sharedApplication] applicationState]
时收到通知,则等于UIApplicationStateActive
。
对于notification
中的徽章,如果您的应用未运行,则不执行任何代码,并且徽章在应用图标中增加1。当您启动应用程序(点按应用程序图标)时,正常调用didFinishLaunchingWithOptions
。 (如果应用程序在收到通知时处于后台或前台,与上述相同)
所以我认为这涵盖了所有可能的情况。另请注意,背景案例对iOS SDK >= 4.0