2014-10-26 69 views
1

我的應用程序中的行爲推送通知存在一些問題。檢查是否通過點擊通知打開了應用程序

如果應用程序沒有(甚至在後臺)運行,當我觸摸通知我可以分析它的有效載荷,做一個自定義操作,通過閱讀「launchOptions」字典。

當我的應用程序在後臺運行時,我無法檢測用戶何時通過點擊通知來檢測應用程序的前景,如應用程序:didReceiveRemoteNotification:fetchCompletionHandler:在後臺立即調用,當我前臺應用程序我無法檢查它是否通過點擊應用程序圖標或通知來完成。

我知道這是可能的,因爲Facebook的Messenger應用做到這一點 - 如果我點擊它帶給我聊天的通知,否則它使我想到我以前在哪裏。

謝謝。

+0

有點笨重,但爲什麼不只是使用'NSUserDefaults'並設置一個關鍵? – Oxcug 2014-10-26 21:19:25

+0

我只想要在用戶使用通知打開應用程序時發生一個操作,而不是點擊圖標。 FB Messenger這麼做......所以這是可能的。 – MegaEduX 2014-10-26 21:30:37

+0

是啊,我說的' - 應用:didReceiveRemoteNotification:fetchCompletionHandler:'只設置一個布爾值,並檢查它當應用程序又回到前臺。 – Oxcug 2014-10-26 21:31:47

回答

1

如果用戶點擊應用程序圖標,application:didReceiveRemoteNotification:fetchCompletionHandler不會被調用。

如果他們點擊通知,application:didReceiveRemoteNotification:fetchCompletionHandler確實被調用,application.applicationState將是UIApplicationStateInactive

查看this answer獲取代碼片段,您可以使用該代碼片段快速查看此操作以使其更具意義。

此外,要實現您的目標,請務必在應用程序狀態爲UIApplicationStateInactive而不是UIApplicationStateBackground時更新視圖。該應用程序的狀態將是UIApplicationStateBackground當推送通知的用武之地。應用程序的狀態將是UIApplicationStateInactive只有當用戶通過點擊通知啓動應用程序。

我見過很多答案的if語句像

if (application.applicationState != UIApplicationStateActive) { ... } 

但不會讓你被傳遞推送通知,並且用戶敲擊的通知區分。

相關問題