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

Pau*_*ter 5 objective-c push-notification ios ios5 ios5.1

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

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

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

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

msk*_*msk 8

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

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

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
Run Code Online (Sandbox Code Playgroud)

[[UIApplication sharedApplication] applicationState]不等于UIApplicationStateActive.

在上述情况下,如果用户没有点击通知提醒的操作按钮并通过点击它来启动应用程序,则不会didFinishLaunchingWithOptions或被didReceiveRemoteNotification调用.

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

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

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