当用户结束从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];
}
答案 0 :(得分:2)
如果您想从自定义用户界面中结束通话,则应通过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)
。
答案 1 :(得分:0)
我设法使用reportCall函数将其关闭
provider?.reportCall(with: appG.uuid, endedAt: Date(), reason: .remoteEnded)
因此,当我从自定义UI按下结束呼叫时,我只是调用该函数
答案 2 :(得分:0)
我使用此代码关闭通话
provider?.reportCall(with: PushUtility.shared.uuid!, endedAt: Date(), reason: .remoteEnded)
首先保存您用于连接呼叫的uuid,然后将该uuid用作结束呼叫。