2017-05-29 35 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

肯定的是,如果应用程序被应用程序切换强制退出,您将无法再运行代码在重新启动应用程序之前收到通知。 –

相关问题