ios - 如何从我的自定义正在进行的调用 UI 结束 callkit 上的调用 session ?

标签 ios swift xcode swift4.2 callkit

当用户从 CallKit UI 结束通话时,应用会结束通话,实际的 VOIP 通话也会结束。但是当我从自定义 UI 结束通话时,VOIP 通话结束但 CallKit 仍处于事件状态。如何从我的自定义 UI 结束 CallKit session ?

这是当我在 CallKit UI 上按下结束调用时发生的情况:

 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 )您应该只报告已结束的调用:

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/

相关文章:

ios - Flutter IOS - 使所有目标的版本和内部版本号保持最新

ios - 当 UITableView 嵌套在 UIScrollView 中时,保持 UITableView 的重用能力

ios - for 循环错误

ios - Swift 中泛型关联类型的比较类型

ios - swift 2.2 : Pass value between view controllers iOS

ios - UICollectionViewCell : can I know exactly when the cell appears and disappears?

ios - 如何使用离线数据+同步创建原生 iOS 应用程序

ios - 如何快速将日期、月份和年份转换为毫秒

ios - IOS 5 中的选项卡切换

objective-c - if 语句中的赋值警告?