2015-06-01 20 views
1

我正在構建一個應用程序,它處理從Parse推送的通知,並嘗試創建通知歷史記錄功能。我已經成功啓用了背景模式,所以當應用程序在後臺運行時,應用程序可以通過application:didReceiveRemoteNotification:fetchCompletionHandler獲得有效負載,即使未點擊橫幅/提醒。但是,當強制退出/向上滑動殺死應用程序時,不會調用application:didReceiveRemoteNotification:fetchCompletionHandler如何在強制退出/向上輕掃以殺死iOS應用程序而不點擊橫幅/警報時獲取推送通知負載?

是否有任何方法來實現獲取推送通知有效載荷時,應用程序被殺害而不點擊橫幅/警報?先謝謝你!

+0

'application:didReceiveRemoteNotification:fetchCompletionHandler'僅在應用程序運行時纔有效。當它沒有運行時,如何調用應用程序的功能?當應用程序未運行時,您將如何處理數據?只有當應用程序運行前臺/後臺時才需要處理它。 – iphonic

+0

感謝您的回覆!我試圖創建一個通知歷史記錄函數,該函數顯示了使用Tableview接收到的所有通知,所以我希望每當通知到達時即使應用程序被終止,應用程序在重新啓動時仍可以獲得有效載荷。啓動並顯示內容。如果沒有辦法達到這個目的,還有其他方法可以做到這一點嗎? – Alison

+0

這是隱式操作系統級別策略嗎?爲什麼iOS不會在後臺收到無聲(內容可用:1)推送通知時在後臺啓動應用程序?是否有任何本地機制,我可以在操作系統級別安排作業/任務/定時器,以便在計時器到期時,如果應用程序被終止,我的應用程序將在後臺啓動? – bitek

回答

5

如果您的應用程序被終止,則無法獲得通知的有效內容。

在大多數情況下,在用戶強制退出應用程序後,系統不會重新啓動應用程序。一個例外是位置應用程序,它在iOS 8和 之後在被用戶強制退出後重新啓動。但是,在其他 的情況下,用戶必須明確啓動應用程序或重新啓動設備,然後系統才能將應用程序自動啓動到 後臺。當在 設備上啓用密碼保護時,系統不會在 用戶首次解鎖設備之前在後臺啓動應用程序。 - Understanding When Your App Gets Launched into the Background

不管怎樣,推送通知是不可靠
這意味着你不能確定他們將被交付。

如果您想保留「通知歷史記錄」列表,請在服務器端執行並在應用程序中取回(完全不推送相關方式)。

每次發送推送通知時,都會將其內容保存在數據庫中,就像任何對象一樣。然後,當用戶打開歷史列表時,像其他任何解析對象一樣獲取列表。

+0

這是一個隱含的操作系統級別策略嗎?爲什麼iOS不在後臺啓動應用程序(如果它收到無聲的('content-available:1')推送通知?是否有任何本地機制,我可以在操作系統級別安排作業/任務/定時器,以便在計時器到期時,如果應用程序被終止,我的應用程序將在後臺啓動? – bitek

+1

這不是隱含的。當某個應用程序被用戶殺死後,該應用程序的後臺提取功能將被禁用,直到用戶再次手動打開它爲止。關於你的工作/任務/計時器問題,答案是否定的。這是針對iOS沙盒的哲學。 ** TL; DR:您無法啓動一個已被用戶殺死而未貼上圖標的應用程序。完全可以。** –

+1

我更新了我的答案,以添加Apple的文檔。 –

相關問題