繁体   English   中英

应用程序处于前台/后台/kill 状态时如何断开视频/语音通话 iOS 13. 与 WhatsApp 应用程序相同

[英]How to disconnect the video/voice call when the application is in foreground/background/kill states iOS 13. Same as WhatsApp application

当应用程序处于前台/后台/终止状态时,我具有断开视频/语音呼叫的功能。 与 WhatsApp 应用程序中的语音通话相同

我使用 Callkit 显示默认传入 CallKit 屏幕将使用 VOIP 推送触发。

设想:

  1. 设备 A 呼叫设备 B
  2. 设备A挂断电话
  3. 设备 B 将在前台而不是在后台断开连接并终止状态,因为DidReceiveRemoteNotification委托方法将仅在前台而不是在其他状态下触发

尝试使用静默推送通知Content-Available = 1并在发送推送有效负载时删除 Alert 键中的值 它仍然没有在后台工作并杀死 State

现在的问题是我们如何在所有状态下触发 DidReceiveRemoteNotification 或者我们是否有任何其他概念来实现此功能。

请提出您宝贵的建议,如果您需要更多信息,请告诉我。

重要的是要了解 CallKit 本身并不处理呼叫连接,也不是所有可能的呼叫状态,即使它涉及呼叫发起和终止的整个过程。 因此,您经常使用某种形式的 SIP 实现。

无论如何,您必须有一些呼叫连接和音频/视频流的实现。
iOS 和 CallKit 不能为您开箱即用地做到这一点。

当您的应用程序通过推送通知收到来电通知时,您的应用程序会通过 SIP 或类似方式收到远程方挂断的通知。 不应通过推送通知通知呼叫终止 使用推送通知并没有那么大的意义,因为无论如何你已经有一个正在进行的呼叫连接。 然后,这种正在进行的连接通常用于发出本地或远程方正在挂机的信号,这无论如何都是 SIP 的一个特性。

在开始时使用推送通知来通知来电通知而不是持续 SIP 连接的原因是它可以节省电池寿命,而没有这样的好处会导致也使用推送通知来发出呼叫终止的信号。 因此,最好不要尝试使用推送通知来表示呼叫终止,而是使用SIP 的 BYE 消息

然后,您的 SIP 处理代码应通过 CallKit 通知 iOS,方法是通过 reportCall 报告呼叫结束reportCall(with UUID: UUID, endedAt dateEnded: Date?, reason endedReason: CXCallEndedReason)自行处理实际的呼叫断开连接

因此,由于 iOS/CallKit 不能也不会处理您的呼叫连接/断开,因此您必须始终自己执行此操作,或者使用像 PJSIP 这样的 SIP 库,这将为您完成大部分工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM