我有一个带有 Sinch Video 集成的 VOIP 应用程序。如果应用程序从后台运行,则会有一个大约 1 - 3 秒的窗口,其中 VOIP 推送被发送,但 Sinch 呼叫尚未连接。(iOS13 要求立即上报 VOIP Push)。
在 Apple 的文档中,他们给出了以下提示:
如果呼叫的接收者在应用程序与您的服务器建立连接之前应答,请不要立即执行发送到 provider:performAnswerCallAction: 委托的 CXAnswerCallAction 对象。相反,等到您建立连接然后完成对象。当它等待您的应用程序完成请求时,传入呼叫界面让用户知道呼叫正在连接,但尚未准备好。
Facetime 也可以观察到这种行为,通常在短时间内 CallKit 显示正在连接......
我无法通过它的生命来弄清楚如何正确遵循Apples文档的这个建议。
有什么办法可以按照标准让 AnswerCallAction 总是将应答过程延迟 2 秒?
这是我相关的提供者委托方法:
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
if (!(CommunicationService.shared?.tellGuardAnswerCallAction())!){
action.fail()
print("CXCallDelegate CXProvider: ERROR Answering Call")
return
}
self.callManager.removeAll()
CommunicationService.shared?.cDotAnswer()
action.fulfill()
}
如果我在连接 Sinch 呼叫和 UIKit 呼叫之前接听电话,则呼叫将无法正常工作。所以理想情况下,我总是会给代码大约 1-2 秒的时间来连接或检查 Sinch 呼叫是否已连接,然后再继续执行 action.fulfill()