当用户从 CallKit UI 结束通话时,应用会结束通话,实际的 VOIP 通话也会结束。但是当我从自定义 UI 结束通话时,VOIP 通话结束但 CallKit 仍处于事件状态。如何从我的自定义 UI 结束 CallKit session ?
这是当我在 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)
将不会被调用。
关于ios - 如何从我的自定义正在进行的调用 UI 结束 callkit 上的调用 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55298930/