繁体   English   中英

CallKit 错误 com.apple.CallKit.error.requesttransaction 错误 2

[英]CallKit error com.apple.CallKit.error.requesttransaction error 2

我已经尝试了许多使用 CallKit 在 ios swift 上启动传出呼叫的示例。 我在功能中启用了 VOIP。 在所有情况下,它都会失败:

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

 else { print("Requested transaction successfully")
            }

我得到的错误:

Error requesting transaction: Error Domain = com.apple.CallKit.error.request transaction Code=2 "(null)"

我找不到与 Code=2 匹配的答案。

通过简单的搜索,您将在此处的 Apple 文档中找到所有错误代码及其含义: https ://developer.apple.com/documentation/callkit/cxerrorcoderequesttransactionerror/code

在枚举中,code=2 表示unknownCallProvider是您遇到的错误。 描述说“控制器找不到调用提供者来执行所请求事务中的操作。”

在这里,它明确指定您尚未设置提供程序 ( CXProvider )。 这就是它给出此错误的原因。

在 CallKit 的情况下,您想要发送到系统的任何操作或事务都是通过您正在使用的CXCallController完成的,系统将通过 CXProvider 的对象(基于您所做的配置)给出确认/操作,并且它的代表。

现在,如果您没有设置提供者及其代表,系统如何与您通信? 这就是它给出此错误的原因。

在您声明属性callController的地方,声明callProvider类型的另一个属性CXProvider 然后,在保留这两个属性的位置创建对象以符合CXProviderDelegate

实现CXProvider委托的所有必要功能。 当请求开始呼叫动作时,需要在委托方法中完成动作,如下所示:

func provider(_ provider: CXProvider, perform action: CXStartCallAction) {
    /**
     Configure the audio session, but do not start call audio here, since it must be done once
     the audio session has been activated by the system after having its priority elevated.
     */
    CallAudio.configureAudioSession()
    action.fulfill()
}

这是代码回顾:

在你的班级:

private var provider: CXProvider!
private var callController: CXCallController!

符合 CXProvider 委托:

class CallProvider: NSObject, CXProviderDelegate {

创建 CXProvider 对象并为其分配委托:

provider = CXProvider(configuration: configuration)
provider.setDelegate(self, queue: nil) // 'nil' means it will run on main queue

实现 CXProvider 委托函数,例如开始调用操作:

func provider(_ provider: CXProvider, perform action: CXStartCallAction) {}

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM