無法使用公共API獲取此信息。
從Local and Remote Notifications Programming Guide:
讓我們回顧一下,當系統 提供了一個本地通知或應用程序的遠程通知可能出現的可能的情況。
通知在應用程序沒有在 前臺運行時傳遞。在這種情況下,系統會顯示通知, 顯示警報,標記圖標,可能播放聲音,並且可能會顯示一個或多個操作按鈕供用戶點按。
用戶點擊iOS 8通知中的自定義操作按鈕。在這種情況下,iOS調用 application:handleActionWithIdentifier:forRemoteNotification:completionHandler: 或 application:handleActionWithIdentifier:forLocalNotification:completionHandler :. 在這兩種方法中,您都可以獲得操作的標識符,以便您可以確定用戶點擊哪個按鈕。您還可以獲得遠程 或本地通知對象,以便您可以檢索任何需要處理該操作的信息 。
用戶點擊提醒中的默認按鈕或點擊(或點擊) 應用程序圖標。如果輕擊默認操作按鈕(在運行iOS的設備上),系統啓動應用程序,應用程序調用其應用程序:didFinishLaunchingWithOptions:方法,傳入 通知負載(用於遠程通知)或 local-通知對象(用於本地通知)。儘管 應用程序:didFinishLaunchingWithOptions:不是 處理通知的最佳位置,但在此時獲取有效負載將使您 有機會在調用處理程序方法 之前啓動更新過程。
對於遠程通知,系統還會調用 應用程序:didReceiveRemoteNotification:fetchCompletionHandler: 應用程序委託的方法。
如果在運行OS X的計算機上單擊應用程序圖標,應用程序會調用 代理的applicationDidFinishLaunching:代理可以獲取遠程通知有效負載的方法。如果在運行iOS的設備上輕按應用圖標 ,該應用將調用相同的方法,但 不會提供有關該通知的信息。
正如您所看到的,當應用程序從死亡狀態或未鎖定狀態開始時,只能檢查點擊通知。
另外重要的一點是:
服務質量
蘋果推送通知服務包括執行一個存儲和轉發功能服務 (QoS)的組件的默認質量。如果APN 嘗試傳遞通知但設備處於脫機狀態,則 通知將存儲一段有限的時間,並在設備可用時傳送至 。只有一個最近通知 的特定應用程序被存儲。如果在 設備處於脫機狀態時發送了多個通知,則新通知將導致先前的 通知被丟棄。只保留最新的 通知的行爲稱爲合併通知。
如果設備長時間保持脫機狀態,則會丟棄爲其存儲的任何通知 。
所以,長話短說,交貨&存在推通知是高度可預期的,但不能保證。此外,設備上的推送通知路徑不會以編程方式控制 - 作爲應用程序,您在設備上訂閱APNS守護程序,並且您依賴推送通知。
這就是爲什麼,如果你的應用程序有一些業務邏輯(在你的情況下,計數器更新),你不應該依賴推送通知。您應該使用更可靠/可控的機制來同步應用程序和後端之間的數據。我通過使用REST並在我的應用程序的問題域中專門使用Notification
實體幾次實現了這一目標 - 用戶可以獲取通知,將它們標記爲已讀/未讀,並通過REST API刪除它們等。
你可以在服務器的通知載荷中傳遞''badge「:count',不會那麼做嗎? –
@BhumitMehta:問題是,在這種情況下,didReceiveRemoteNotification永遠不會從我們獲取有效負載的位置調用,因爲我沒有打開通知。 – Nitish
是的,但是如果通知有效載荷包含非0值的「徽章」鍵,徽章應自動設置。 –