问题是从这里开始的,似乎还没有人给出正确的答案。
====================================
嗨,开发人员,
我正在开发一个包含音频通话功能的社交网络应用程序。我为这个音频通话集成了 SocketIO + WebRTC。我通过两种方式接收音频呼叫。套接字连接时的套接字调用和默认情况下的活动 VoIP 呼叫,无论套接字是否连接。
仅供参考,为什么如上所述我有两种接听电话的方式,
- 默认情况下启用 VoIP,因为有时套接字呼叫没有响应并且在那个时候从不显示呼叫。
- 当应用程序在前台时启用套接字,以确保在 VoIP 推送发生 MissingDeviceToken/BadDeviceToken 错误的情况下接收到呼叫。
考虑到 iOS 13 VoIP 使用指南,我按照以下步骤进行集成。
当应用程序被终止或套接字未连接时,将获得 VoIP 呼叫并使用 provider.reportNewIncomingCall() 进行响应。所以这里对于 VoIP 的使用没有问题。
当套接字连接时,将同时获得套接字呼叫和 VoIP 呼叫。但是套接字呼叫会在获得 VoIP 呼叫之前立即获得。所以这就是我所做的:
- 响应套接字调用
provider.reportNewIncomingCall()
。 - 稍作延迟后,将获得 VoIP 推送已被套接字调用的同一个呼叫。在这里,我应该用 CallKit 响应这个 VoIP 推送。但我已经调用了这个电话。所以,我用下面的代码来处理。
- 响应套接字调用
provider.reportCall(with: call.uuid, updated: update)
具有用于套接字调用启动的相同 uuid 和更新。希望,这个 VoIP 呼叫也用 CallKit 响应,并且 VoIP 阻止/应用程序终止没有问题。
问题1:这是处理上述问题的正确方法吗?
==================================================== ==================================================== =======
根据我的应用程序要求,我的应用程序一次应该有一个活动呼叫。
考虑一下,我正在通话中,并且通过 VoIP 收到了另外一个来电。所以在这里,我不想显示额外的调用。所以我忽略了额外呼叫的 VoIP 推送。但这会导致崩溃“杀死应用程序,因为它在收到 PushKit VoIP 推送回调后从未向系统发布来电。”
问题2:如何处理上述情况?
==================================================== ==================================================== =======
我尝试什么
对于问题 2,我尝试从这个回答。
虽然它在某些情况下不起作用,例如当用户碰巧接听电话足够快时,推送的第二个来电将导致呼叫堆栈屏幕。
这种方法还会在最近通话列表中创建额外的通话,并在第一个传入事件的传入屏幕期间显示通话结束,这是糟糕的用户体验。
我还发现这个看起来很有希望,但很早就知道这会很好。
有没有人对此有任何解决方案?谢谢