如何在swift中接收推送通知时进行服务器调用?

时间:2017-05-29 10:18:41

标签: ios iphone swift push-notification

我正在开发像whatsapp这样的Messenger应用程序,它必须通知服务器收到消息,我在调用didReceiveRemoteNotification时将状态发送到服务器。但是当应用程序不在前台时,它仅在用户点击通知时才会调用。即使应用程序处于后台运行或未运行,如何进行服务器调用?

1 个答案:

答案 0 :(得分: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。但是你的应用应该有一些语音通话功能,否则它将被应用商店拒绝。