2010-01-05 66 views
3

我的APNS通知正常工作,但我注意到了一個奇怪的行爲,我想要求確認。如果稍後啓動,沒有APNS啓動選項?

我在「didFinishLaunchingWithOptions」或「didReceiveRemoteNotification」期間檢索通知負載。在「didFinishLaunchingWithOptions」中,我正在檢查

NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; 
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"]; 

爲了導出參數。在「didReceiveRemoteNotification」中,apsInfo派生自 NSDictionary * apsInfo = [userInfo objectForKey:@「aps」];

這可以正常工作,但有一個例外:如果我忽略通知彈出窗口並點擊「Close」而不是「View」,最後從啓動板啓動我的應用程序,則不再有apsInfo。這是「按設計」嗎?只有在「查看」或從通知信息對話框啓動應用程序時,通知信息纔可用?

Regards

+0

是的我相信這是正確的流程。您只有在用戶點擊「查看」時纔會獲得啓動選項 – NWCoder 2010-01-06 00:22:56

+1

下面是api我認爲它證實了這一點:http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html #// apple_ref/occ/intfm/UIApplicationDelegate/application:didFinishLaunchingWithOptions: – NWCoder 2010-01-06 00:27:08

+0

謝謝。我認爲,您可以參考 「launchOptions 包含與以下兩種情況中的一種相關的信息的字典: .... 如果用戶通過點擊應用程序圖標啓動應用程序,字典爲零。 所以基本上這意味着:如果用戶推遲處理,則通知丟失。這對我來說似乎不合邏輯...... – neil 2010-01-06 13:01:37

回答

-1

同樣的問題。通知到達電話和用戶按下關閉,而不是在消息框中查看。徽章出現在應用程序圖標上。做得好。現在,打開應用程序,蘋果的文件說:「使用didFinishLaunchingWithOptions當你想launchOptions充滿了通知和喇嘛,喇嘛......」

的問題是,當didFinishLaunchingWithOptions觸發launchOptions仍然是空的。

嘗試了許多解決方案的組合:沒有結果。 SDK的錯誤?

更新===================================== 在蘋果的文檔是在didFinishLaunchingWithOptions書面:「如果用戶通過點擊應用程序圖標啓動應用程序,則字典爲零。」

因此,我不知道在用戶關閉通知消息框(並且應用程序圖標上有徽章)後啓動應用程序時是否甚至可以檢索通知主體。當用戶關閉通知消息框時,通知正文在空間中丟失了嗎? 更新======================================= 經過進一步調查,我找到答案。是的,未交付的數據會丟失。沒有等待用戶在線,沒有存儲,沒有提供通知的信息。 APNS不支付服務費,Apple不承擔100%交付數據的責任。

-1

似乎,這是它的方式,它是。我想,我們都應該聯繫我們的服務器以便檢索通知有效載荷(再次)。這是相當荒謬的,因爲通知有效載荷不超過256字節,所以Apple可以提供一種方法來保留通知有效載荷供以後使用。至少您可以在「徽章」元素中檢索發送給您的信息。這被保存。其餘的遺失,可悲...

-1

我有一個想法,但我沒有時間來執行它的時刻。

  1. 當您發送推送通知時,在您的Web服務器數據庫中記錄發送通知的每個用戶。

  2. 下一次任何給定的用戶打開應用程序(可以直接從推送通知或稍後通過點擊應用程序的圖標),您可以ping您的服務器以查看自推送通知發送以來該用戶是否已打開該應用程序。

  3. 如果這是用戶在發送通知後第一次打開應用程序,那麼您的應用程序會從服務器讀取相應的數據並啓動您想要的任何狀態。

只是一個想法在這一點上,但我認爲它會工作。取決於你是否值得花時間來實施它。