2012-06-18 64 views
2

推送通知恢復應用考慮這種情況:獲得從後臺

1)啓動該應用

2)將在後臺應用程序(按Home鍵)

3)服務器發送推送通知到客戶端

4)用戶恢復該應用點擊的圖標從菜單

在這種情況下didReceiveRemoteNotification和didFi nishLaunchingWithOptions不被調用,所以如何獲得通知?

+2

爲什麼不會調用didReceiveRemoteNotification?我想我對此感到困惑。用戶要麼會在應用程序關閉時彈出警告,要麼應用程序正在運行,該方法即將觸發,您可以處理通知,但這是適當的。是否有一些時間問題/錯誤,我沒有遇到過之前,導致didReceiveNotification不會觸發,因爲它目前工作在我正在使用的實踐應用程序。如果您在通知點擊而應用程序是在後臺,如果你不恢復其圖標的應用點擊 –

+0

didReceiveRemoteNotification被調用。文檔和我自己的項目都證實了這一點。如果應用程序在內存中活動(即當前位於前臺),則調用didReceiveRemoteNotification。 – ech0s7r

+0

如果應用程序正在運行的方法是最絕對稱得上 –

回答

0

您應該檢查applicationWillEnterForeground:方法。

+0

是,這種方法被稱爲簡歷不是之後。但是,你如何以及檢查什麼? – ech0s7r

+0

您檢查didReceiveRemoteNotification或didFinishLaunchingWithOptions推送通知同樣的事情 –

0

我認爲如果用戶選擇忽略推送通知,應用程序將不會看到任何內容。首先想到的解決方法是提供一種方法,在上次打開應用程序並將其與本地數據相關時,檢查服務器是否存在任何值得推送通知的事件。

我認爲這個系統背後的想法是將實際功能與推送通知分開,並確保通知僅用於一個目的 - 通知新數據/事件/等,從而將數據的下載和處理留給應用程序一旦完全在前臺。 I.e應在啓動序列中複製所有內容,以確保應用始終處於最新狀態,即使宕機時的通知未被接收/忽略。

application:didReceiveRemoteNotification:因此意味着不傳輸數據和更新模型,而是對事件做出反應並啓動必要的過程。雖然大部分時間,數據可能非常小,以至於無法下載任何更多內容,因此適用於通知,因此應用程序可以繼續。

2

簡單的答案:在這種情況下,你不能得到它。

如果推送通知包含了重要的有效載荷則它不應該包含它,因爲你不應該依賴於它的東西很重要,因爲:

  • 通知,不能保證在第一時間被傳遞到設備

  • 用戶可以關閉通知

  • 他們可能忽視它們

  • 如果設備被關閉時,它是由於要顯示的那麼它將失去

如果需要知道,如果服務器發送,然後通知進行連接家裏,當你成爲活躍並問問它是否這樣做。