首页 > 解决方案 > 如何从我的自定义正在进行的呼叫 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];
}

标签: iosswiftxcodeswift4.2callkit

解决方案


如果您想从您的自定义 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)不会被调用。


推荐阅读