【问题标题】:How to disconnect the video/voice call when the application is in foreground/background/kill states iOS 13. Same as WhatsApp application当应用程序处于前台/后台/终止状态 iOS 13 时如何断开视频/语音通话。与 WhatsApp 应用程序相同
【发布时间】:2020-04-28 07:50:57
【问题描述】:

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

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

场景:

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

尝试使用静默推送通知Content-Available = 1在发送推送负载时删除了警报键中的值。仍然在后台和杀戮状态下不起作用

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

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

【问题讨论】:

  • 依靠推送通知来知道通话何时结束并不是一个好的做法,也没有很好的方法来解决您面临的问题。设备 B 应该通过推送通知以外的方式知道通话结束。
  • 感谢您的回复。正如您所说,推送通知不是一个好习惯,如果我们有新的解决方法,请建议我。

标签: ios apple-push-notifications ios13 whatsapp callkit


【解决方案1】:

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

在任何情况下,您都必须对通话连接和音频/视频流进行一些实现。
iOS 和 CallKit 无法开箱即用地为您做到这一点。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多