如何在结束通话后移除CallKit的回调选项界面

6

我在我的应用程序中使用CallKit来接收来电。该应用程序没有呼出功能。一切都很好,但是当接收方或拨打方结束通话时,它会显示CallKit UI并显示回拨选项。我不想显示回拨选项,我该怎么做?

我结束通话的代码:

func end(call: SpeakerboxCall) {

    let endCallAction = CXEndCallAction(call: call.uuid)
    let transaction = CXTransaction()
    transaction.addAction(endCallAction)

    requestTransaction(transaction, action: "endCall")

}

private func requestTransaction(_ transaction: CXTransaction, action:
    String = "") {

    callController.request(transaction) { error in
        if let error = error {
            print("Error requesting transaction: \(error)")
        } else {
            print("Requested transaction \(action) successfully")
        }
    }
}

如果回调选项显示,则说明调用未正确结束。因此,请仔细检查结束调用函数。 - RJV Kumar
2个回答

8

我已经解决了这个问题。原来是在交易没有正确完成的情况下,我强制退出了CallKit。

 AppDelegate.shared.providerDelegate?.provider.reportCall(with: call.uuid, endedAt: nil, reason: CXCallEndedReason.remoteEnded)

我们需要将endedAt设置为nil,将reason设置为remoteEnded。

它有效了!我也曾经在这个问题上卡了很长时间。感谢您提供的解决方案。 - Nandhakumar Kittusamy
1
太好了!它对你有帮助@NandhaKumar。别忘了点赞。谢谢! - Kalikanth040494
对我来说它很有效!非常感谢。可以使用以下命令访问共享实例:"UIApplication.shared.delegate as! AppDelegate" - gkhanacer
对我来说不起作用,CallKit屏幕仍然出现在堆栈中。 - famfamfam

2

关闭所有呼叫(Swift4)

func performEndCallAction() {

    for call in self.cxCallController.callObserver.calls {

        let endCallAction = CXEndCallAction(call: call.uuid)
        let transaction = CXTransaction(action: endCallAction)

        cxCallController.request(transaction) { error in
            if let error = error {
                NSLog("EndCallAction transaction request failed: \(error.localizedDescription).")
                return
            }

            NSLog("EndCallAction transaction request successful")

        }

    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接