2017-05-29 37 views
1

我正在開發一個類似whatsapp的Messenger應用程序,它必須通知服務器該消息已收到,當didReceiveRemoteNotification被調用時,我正在向服務器發送狀態。但是,當應用程序不在前臺時,它只在用戶點擊通知時纔會調用。即使應用程序處於後臺或未運行狀態,如何進行服務器調用?如何在接收推送通知時進行服務器調用?

+0

看看這篇文章。可以給出一個想法。 https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html –

回答

3

要接收遠程通知時,你的應用是在背景或掛起模式首先你的服務器應該叫content-available = 1來詳細瞭解一下該文件的通知有效載荷發送特殊參數:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#//apple_ref/doc/uid/TP40008194-CH17-SW5

還可以打開此開關在項目設置: enter image description here

有了這個參數時,你的應用程序會收到一個推送通知,將被喚醒了一些小的時間到後臺運行模式,並呼籲didReceiveRemoteNotification。不要忘記在任務結束時調用completionHandler(<some enum parameter>),否則您的進程可能會意外死於iOS,例如,當您嘗試執行異步服務器請求時。所以當你的異步方法完成調用completionHandler閉包參數didReceiveRemoteNotification

實際上,當您的應用完全從應用切換器中丟棄時,沒有託管代碼可以運行。據我所知,您應該使用VOIP推送消息來執行操作 - 但這類消息僅適用於帶有語音呼叫的應用程序,如Skype或WhatsApp。即使這些應用程序完全關閉,也需要執行一些代碼。 iOS爲他們準備進行語音通話提供了這種能力。這就是爲什麼所有這些使用者都使用語音通話 - 例如使即時交付狀態。如果你想要這種互動,你應該谷歌更多關於VOIP。但是你的應用程序應該真的有一些語音通話功能,否則它會被應用程序商店拒絕。

+0

肯定的是,如果應用程序被應用程序切換強制退出,您將無法再運行代碼在重新啓動應用程序之前收到通知。 –

相關問題