ios - 如何从我的自定义正在进行的呼叫 UI 结束 callkit 上的呼叫会话?
问题描述
当用户从 CallKit UI 结束通话时,应用程序结束通话,实际的 VOIP 通话也结束。但是,当我从自定义 UI 结束通话时,VOIP 通话结束,但 CallKit 仍然处于活动状态。如何从我的自定义 UI 结束 CallKit 会话?
当我在 CallKit UI 上按下结束通话时会发生这种情况:
func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
XCPjsua.shared()?.endCall()
action.fulfill()
}
当我从自定义 UI 结束通话时会发生这种情况(我应该在这里关闭 CallKit 吗?):
- (void)endcall {
[[XCPjsua sharedXCPjsua] endCall];
}
解决方案
如果您想从您的自定义 UI 结束通话,您应该通过以下方式完成CXTransaction
:
let callController = CXCallController()
let endCallAction = CXEndCallAction(call: aUUID)
callController.request(
CXTransaction(action: endCallAction),
completion: { error in
if let error = error {
print("Error: \(error)")
} else {
print("Success")
}
})
这将导致provider(_ provider: CXProvider, perform action: CXEndCallAction)
被调用。
在所有其他情况下(即远程结束、未应答等... - 请参阅CXCallEndedReason),您应该只报告结束的呼叫:
let provider: CXProvider
provider.reportCall(with: call.uuid, endedAt: Date(), reason: .remoteEnded)
在这种情况下provider(_ provider: CXProvider, perform action: CXEndCallAction)
不会被调用。
推荐阅读
- spring - Springboot火花纱
- amazon-web-services - 使用 AWS Glue 从 S3 -> RDS 移动数据
- php - Symfony 路由配置控制中的 `type:` 配置是什么?
- python - 如何在 django 中编写 urlpatterns?
- latex - 缺少“subfigure.sty”
- reactjs - 如何在 React 的 API 请求中传递参数?
- python - 树莓派与 ds18b20 的接口
- javascript - Javascript: Unable to iterate over getElementsByClassName
- java - 流式连接多个结果集
- javascript - 在元素上重新分配相同的功能?