即使应用程序已注册为 VOIP,iOS9 套接字连接也会在应用程序暂停时终止

Posted

技术标签:

【中文标题】即使应用程序已注册为 VOIP,iOS9 套接字连接也会在应用程序暂停时终止【英文标题】:iOS9 socket connection killed when app is suspended even though app is registered as VOIP 【发布时间】:2015-09-30 21:08:02 【问题描述】:

我有一个 ios 应用程序,它使用 iOS 中的 VOIP 属性在后台维护套接字连接。该应用程序实际上不是 VOIP,但我使用了该属性,以便在应用程序挂起时不会终止套接字连接。这在 iOS8 中工作得很好。但是在使用 iOS9 进行测试时,我可以看到套接字在应用程序最小化并且设备被锁定后几分钟被杀死。 如果设备未锁定,即。我最小化我的应用程序并继续使用该设备,套接字连接没有被终止。 有没有人遇到过这样的问题。 iOS9 中的 VOIP 应用程序是否需要任何额外的配置? 感谢您对此的任何帮助。

【问题讨论】:

嗨 Chinta,我面临同样的问题。如果您解决了此问题,请与我分享解决方案。 【参考方案1】:

我有一个应用程序,我需要在其中“保持活动”一个 TCP 套接字。在我的情况下,我使用具有后台模式“外部附件通信”的应用程序。在这种情况下,我使用 Apple Watch 向 iPhone 发送请求,然后 iPhone 打开与远程设备的 TCP 连接,向 domotic 系统询问温度或灯光状态。每次 iPhone 都能够打开 TCP 连接并从远程服务器发送/接收数据,但一段时间后连接会自动关闭。我建议尝试这种模式而不是 VOIP 模式。

【讨论】:

谢谢,但这并不是我想要的。 VOIP 应用程序应该能够按照苹果的要求保持自身活动“当检测到传入流量时,系统会唤醒 VoIP 应用程序并将其套接字的控制权返回给它。” iOS 9 中肯定发生了一些事情,阻止我的应用在后台保持与服务器的连接。【参考方案2】:

根据新的 IOS documentation,在 iOS 8 及更高版本中,您可以使用 Apple 推送通知服务 (APN) 和 PushKit 框架的 API 来创建 VoIP 应用程序。依靠推送通知来启用 VoIP 功能意味着您的应用程序不必维护与相关服务的持久网络连接或为 VoIP 使用配置套接字。当 VoIP 推送通知到达时,即使应用当前已终止,您的应用也会有时间处理通知。

【讨论】:

但是使用 APNS 只会帮助调用我的应用程序。在我的情况下,与服务器的套接字连接是为用户和服务器之间的通信而创建的。只要用户愿意,它就应该保持打开状态。我可以更改设计,以便每次收到通知(如果我使用 APNS)时,我都会创建一个到服务器的新套接字连接。但这是我试图避免的。而且我不确定 Apple 为什么要更改在 iOS 8 中运行的功能。即使是现在,他们的文档也明确表示他们将保持连接,直到发生资源限制。

以上是关于即使应用程序已注册为 VOIP,iOS9 套接字连接也会在应用程序暂停时终止的主要内容,如果未能解决你的问题,请参考以下文章

iOS VOIP 应用程序在后台不接受新的套接字连接

APNS SSL 证书和 VOIP 服务证书并行

伊莎贝拉 vm 上的 Voip [关闭]

iOS 上的 VoIP 套接字 - 未收到通知

无法将通知推送到 iOS9 设备

即使启用了设备“请勿打扰”,如何显示 VoIP 推送呼叫的传入 CallKit 窗口?