如何从自定义正在进行的通话UI中结束在callkit上的通话会话?

时间:2019-03-22 11:47:42

标签: ios swift xcode swift4.2 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];
}

3 个答案:

答案 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用作结束呼叫。