当用户结束来自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)
将不会被调用。
我设法使用reportCall函数关闭它
provider?.reportCall(with: appG.uuid, endedAt: Date(), reason: .remoteEnded)
所以当我从自定义UI按结束调用时,我只是调用该函数