2012-08-29 71 views
5

我已经阅读了许多关于在应用程序未运行时接收推送通知的问题(超过后台,意味着它完全关闭) 。 This question in particular在确定如何使用launchOptions字典接收数据时最有用。当应用程序未运行时推送通知 - launchOptions字典为空

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

我唯一的想法是检查启动时的徽章数量(大于零,做点什么......),但这似乎很不可靠。

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

+0

有效负载内有效? – msk

+0

@MSK我很抱歉,我不太明白 - 你问的是什么原始的推送(从我的服务器)包含作为其有效载荷?如果是这样,有效载荷是基本的,它不包含通常的徽章,警报和声音以外的任何自定义内容。 –

+0

看到我的回答下面 – msk

回答

7

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

+0

啊哈,谢谢你的回答。我的主要目标是在收到推送时从服务器获取一些数据;我们在后台和前台工作,我希望能够在负载情况下检测应用程序脱机时是否收到了推送请求;根据你的回答,看起来这是不可能的,除非用户触摸通知栏。您认为,检查徽章数量是否可靠? –

+0

你必须在你的服务器上维护徽章数看看[这个问题](http:// stackoverflow。com/questions/1942605/push-notification-badge-auto-increment) – msk

+0

啊,很酷,我已经知道那个。这并不完全是我问的:我知道我可以在应用程序中使用[应用程序applicationBadgeNumber]检查徽章数量。我想知道是否可靠检查徽章数是否大于零('[application applicationIconBadgeNumber]> 0')。我有什么理由不应该**这样做? –

相关问题