ios - 如何在 swift 接收推送通知时调用服务器?

标签 ios iphone swift push-notification

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

最佳答案

要在您的应用程序处于后台或挂起模式时首先接收远程通知,您的服务器应在通知负载中发送名为 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 的信息。但是你的应用应该真的有一些语音通话功能,否则它会被应用商店拒绝。

关于ios - 如何在 swift 接收推送通知时调用服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44240062/

相关文章:

ios - 子类或协议(protocol),如何?

ios - 从 UIToolbar 子类切换 View Controller

swift - 在 swift 3 中安装带有 pod 的框架时出现错误 "No such module"

xcode - 如何在scenekit中使用3D模型?

ios - ECSlidingViewController 在设备方向变为横向时隐藏

ios - 如何在swift中使用 ImageView 生成随机图像

iphone - 当键盘未进行更改时检测 UITextField 内容的更改

iphone - UIScrollView通知?

swift - Apple 的 Swift 是区分大小写的语言吗?

ios - 为手动 Segue 实现 3D Touch "Peek and Pop"