CallKit错误com.apple.CallKit.error.requesttransaction错误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

在枚举中,代码=2表示unknownCallProvider是您得到的错误。描述称,"控制器找不到呼叫提供商来执行请求交易中的操作。">

在这里,它明确地指定您还没有设置提供者(CXProvider(。这就是它给出这个错误的原因。

在CallKit的情况下,要发送到系统的任何操作或事务都是通过您正在使用的CXCallController完成的,系统将通过CXProvider的对象(基于您所做的配置(及其委托进行确认/操作。

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

在声明了属性callController的地方,声明另一个类型为CXProvider的属性callProvider。然后,在保持这两个属性的地方创建对象,使其符合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) {}

干杯!

相关内容

  • 没有找到相关文章

最新更新