[当应用程序处于前台/后台/ kill状态时如何断开视频/语音呼叫。与WhatsApp应用程序相同。

问题描述 投票:0回答:1

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

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

场景:

  1. 设备A呼叫设备B
  2. 设备A断开呼叫
  3. 设备B将在前台断开而不是在后台并杀死状态,因为DidReceiveRemoteNotification委托方法将仅在前台触发而不在其他状态下触发
发送推送有效载荷时,

尝试了静默的推送通知Content-Available = 1删除了警报键中的值。仍然无法在背景和杀死状态下使用]

现在的问题是我们如何在所有状态下触发DidReceiveRemoteNotification或我们还有其他概念可以实现此功能吗?

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

ios apple-push-notifications ios13 whatsapp callkit
1个回答
0
投票

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

在任何情况下,您都必须实现呼叫连接和音频/视频流。iOS和CallKit无法直接为您做到这一点。

虽然通过推送通知通知您的应用有传入呼叫,但是通过SIP或类似方式通知了您的应用挂断了远程用户。但是不应通过推送通知将呼叫终止通知给它。使用推送通知并没有太大的意义,因为无论如何您已经有了一个持续的通话连接。然后,这种进行中的连接通常用于表示本地或远程方正在挂断,这始终是SIP的功能。

在开始时将推送通知用于呼入呼叫通知而不是持久SIP连接的原因是,它可以节省电池寿命,而这种好处不会导致将推送通知也用于信令呼叫终止。因此,最好不要尝试使用推式通知来通知呼叫终止,而应使用SIP's BYE message

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

因此,由于iOS / CallKit无法且不会处理您的呼叫连接/断开连接,因此您必须始终自己进行操作或使用SIP库(例如PJSIP,它将为您提供很好的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.