当用户结束从CallKit UI发出的 call 时,应用程序将结束该 call ,并且实际的VOIP call 也将结束。但是,当我从自定义UI结束 call 时,VOIP call 结束,但CallKit仍处于 Activity 状态。如何从自定义UI结束CallKit session ?

当我在CallKit UI上按结束 call 时,将发生以下情况:

 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),您只应报告已结束的 call :
let provider: CXProvider

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

在这种情况下,不会调用provider(_ provider: CXProvider, perform action: CXEndCallAction)

关于ios - 如何从我的自定义正在进行的通话UI中结束在callkit上的通话 session ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55298930/

10-13 03:59