2012-08-29 69 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')。我有什麼理由不應該**這樣做? –

相關問題