如何从我的自定义正在进行的呼叫UI结束callkit上的呼叫会话?

问题描述 投票:0回答:2

当用户结束来自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];
}
ios swift xcode swift4.2 callkit
2个回答
2
投票

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


0
投票

我设法使用reportCall函数关闭它

 provider?.reportCall(with: appG.uuid, endedAt: Date(), reason: .remoteEnded)

所以当我从自定义UI按结束调用时,我只是调用该函数

© www.soinside.com 2019 - 2024. All rights reserved.