2016-05-18 19 views

回答

0

在didReceiveRemoteNotification中創建並初始化NSDate對象。 NSDate * notificationDate = [NSDate日期]應該工作。

+1

當應用程序是通過點擊遠程通知打開的方法只調用,當它實際上不是接收。 –

1

在您的應用程序委託的application:didReceiveRemoteNotification:fetchCompletionHandler:中,使用當前日期創建一個NSDate,然後將其保存在NSUserSettings中的數組內或直接在裏面。

有了這個,您甚至可以收到通知的歷史記錄,並可以稍後處理它們。

application:didReceiveRemoteNotification:fetchCompletionHandler:只有當您將具有值1的content-available鍵添加到通知有效負載中時纔會在後臺調用。

從蘋果文檔:

對於推送通知來觸發下載操作時,通知的有效載荷必須包括其值設置爲1,當該鍵存在的內容可用鍵,系統喚醒應用程序在後臺(或將其啓動到後臺)並調用應用程序委託的應用程序:didReceiveRemoteNotification:fetchCompletionHandler:方法。您實施該方法應下載相關內容並將其集成到您的應用中。 https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

+0

這提供了通過通知打開應用程序的日期,而不是通知在設備上實際收到時的日期。 –

+0

@thefredelement更新了我的答案; D –

+0

看起來很有希望,我會更新有效負載並檢查它並接受它是否正常工作,謝謝! –

1

如果您控制連接到APNS的後端,並在didReceiveRemoteNotification中解析它,您可以將自定義發送日期字段添加到通知有效內容。很顯然,這會讓你獲得發送遠程通知的日期,但沒有收到,但總的來說差別很小。

建議使用'content-available'鍵的解決方案可能不是您想要的,因爲它會在此類通知的後臺啓動應用程序,並可能導致您的應用程序在Settings.app>電池>電池使用情況。它也將在低功耗模式下停止工作,或者用戶禁用後臺應用程序刷新。

後臺應用程序刷新和「內容可用」鍵適用於在後臺下載內容的應用程序。如果您的應用沒有這樣做,請不要使用它們。

+0

您在這裏提出了一些重要的觀點,最初我只是在我自己的測試中使用它來提出一些指標。我注意到一些使用Parse的重要延遲,並希望切換到我完全控制的本地通知,並查看其中的差異。 –

+0

如果問題僅用於測試,請假裝您的應用正在使用VoIP,使用VoIP證書並使用PushKit進行註冊。所有通知將在後臺啓動您的應用程序,並且didReceiveNotification委託方法的PushKit等價物將立即被調用,始終不會涉及用戶交互。 –

0

您可以通過查看系統(而非應用程序)控制檯來查看何時收到推送通知。看來新版iOS版本過濾日誌,但如果你殺了你的應用程序事先你會看到這樣的事情

Jun 1 17:55:38 Aarons-iPhone-6-Plus SpringBoard[657] <Warning>: High Priority Push: net.test.test - App killed –