2016-08-18 132 views
-2

如何在didfinishlaunchingwithoptions中調用didReceiveRemoteNotification方法?我正在使用迅捷的語言。 當用戶直接打開應用程序時,通知被取消,didReceiveRemoteNotification中執行的操作不會被調用。如何處理這個?如何在didfinishlaunchingwithoptions中調用didReceiveRemoteNotification Swift?

我已經達到了這裏。但無法完成

if let options = launchOptions, notification = options[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject : AnyObject] { 
self.application(application, didReceiveRemoteNotification: notification, fetchCompletionHandler: _______) 

     } 
+0

@SausageMachine \t 在didReceiveRemoteNotification中,我保存了這個通知數據。但是,當通知來了,應用程序打開(沒有點擊通知),通知會自動取消並且保存操作不會執行 –

+0

無論您使用哪種語言的Swift/Objective c,但進程對於推送通知都是相同的。當推送通知將收到並點擊通知時,DidReceiveRemoteNotification方法將會調用。 –

+0

但是,當用戶直接打開應用程序時,通知被取消,didReceiveRemoteNotification中執行的操作不會被調用。如何處理這個? –

回答

3

按文檔,

通知交付時,應用程序沒有在 前臺運行。在這種情況下,系統會顯示通知, 顯示警報,標記圖標,可能播放聲音,並且可能會顯示一個或多個操作按鈕供用戶點按。

用戶點擊iOS 8通知中的自定義操作按鈕。在這種情況下,iOS調用 application:handleActionWithIdentifier:forRemoteNotification:completionHandler: 或 application:handleActionWithIdentifier:forLocalNotification:completionHandler :. 在這兩種方法中,您都可以獲得操作的標識符,以便您可以確定用戶點擊哪個按鈕。您還可以獲得遠程 或本地通知對象,以便您可以檢索任何需要處理該操作的信息 。

用戶點擊提醒中的默認按鈕或點擊(或點擊) 應用程序圖標。如果輕擊默認操作按鈕(在運行iOS的設備上),系統啓動應用程序,應用程序調用其應用程序:didFinishLaunchingWithOptions:方法,傳入 通知負載(用於遠程通知)或 local-通知對象(用於本地通知)。儘管 應用程序:didFinishLaunchingWithOptions:不是 處理通知的最佳位置,但在此時獲取有效負載將使您 有機會在調用處理程序方法 之前啓動更新過程。

對於遠程通知,系統還會調用 應用程序:didReceiveRemoteNotification:fetchCompletionHandler: 應用程序委託的方法。

如果在運行OS X的計算機上單擊應用程序圖標,應用程序會調用 代理的applicationDidFinishLaunching:代理可以獲取遠程通知有效負載的方法。如果在運行iOS的設備上輕按應用圖標 ,該應用將調用相同的方法,但 不會提供有關該通知的信息。

通知在應用程序在 前臺運行時傳遞。該應用程序調用 應用程序:didReceiveRemoteNotification:fetchCompletionHandler:或 application:didReceiveLocalNotification:應用程序委託的方法。 (如果應用程序:didReceiveRemoteNotification:fetchCompletionHandler: 未實現,則系統調用 application:didReceiveRemoteNotification :.)在OS X中,系統調用 application:didReceiveRemoteNotification :.

你可以在這裏找到的鏈接一樣: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

摘要: 你必須處理APNS在3種情況:

  1. 應用程序是在前臺/應用在後臺(但未掛起):應用程序:didReceiveRemoteNotification:調用應用程序委託的方法並將有效內容移交給您。

2. 應用程序被暫停/殺死,用戶點擊通知或警告:應用中:didFinishLaunchingWithOptions:應用程序委託的被調用,您可以從launchOption訪問有效載荷。

3. 應用程序被暫停/殺死,用戶點擊App圖標:您將不會收到任何有關APNS的信息。你可以做最簡單的解決方案是,一旦應用程序被激活使Web服務調用的Web服務器上獲取所有更新的信息和更新的用戶界面和應用程序徽章計數:)

希望它能幫助:)

相關問題