簡體   English   中英

如何在應用程序處於后台但未暫停時處理推送通知

[英]How to handle push notification when app is in background but not suspended

我的應用程序接收推送通知,並顯示相應的信息消息。 但是,當我點擊消息時,應用程序變為活動但應用程序didFinishLaunchingWithOptions未被調用,這是正確的,我認為,因為應用程序未被暫停,它只是暫停活動。 問題是我如何確保用戶在應用程序變為前台時單擊消息?

我認為你要找的是這個app delegate方法:

- (void)application:(UIApplication *)application     
       didReceiveRemoteNotification:(NSDictionary *)userInfo

如果您的應用程序是后台的,則會調用它,並且通知有效負載將在userInfo字典中傳遞。 這與從冷啟動啟動應用程序時的情況形成對比,此時此方法未被調用,而是您在launchOptions字典中檢查有效負載。

但是,自iOS7以來這樣做的首選方法是使用它:

- (void)application:(UIApplication *)application 
       didReceiveRemoteNotification:(NSDictionary *)userInfo 
             fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;

無論應用程序是從冷啟動啟動還是從后台運行,都會在用戶點擊通知時調用此方法。 因此,即使您沒有使用completionHandler,它也可以提供更一致的方式來訪問通知負載。 如果存在此方法,則不會調用較舊的方法。

如果我正確理解了這個問題,那么你就會問如何確保應用程序因為用戶“點擊”而被置於前台,即作用於推送通知

當應用程序根本沒有運行時,您可以使用-application:didFinishLaunchingWithOptions:如您所述。 launchOptions字典包含有效負載等。 - 我不會描述這個,因為你已經知道它是如何工作的。

但是,當應用程序運行時,不會調用該方法。 相反, - application:didReceiveRemoteNotification:被調用。 順便說一句,如果應用程序已經在前台,或者如果它在后台並且用戶“點擊”推送通知橫幅/警報以打開應用程序,則會調用此方法。 它不會被稱為其他:所以我相信這正是你正在尋找的。

此方法提供的userInfo字典將包含通知數據,類似於-application:didFinishLaunchingWithOptions:用於更多臨時處理。 (注意: userInfolaunchOptions在語義上是不同的,但希望這很明顯。:))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM