繁体   English   中英

CallKit CXCallController.request 错误 com.apple.CallKit.error.requesttransaction Code=6 而应用程序在后台

[英]CallKit CXCallController.request error com.apple.CallKit.error.requesttransaction Code=6 while app is in the background

此错误仅发生在 iOS 13.3.1 中。 它不会发生在 iOS 13.3.0 或更早版本上。

如果应用程序在前台并且它调用CXCallController.request ,它就可以正常工作。 但是一旦我后台应用程序并执行“CXCallController.request”(由耳机播放按钮触发),我会收到以下错误:

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

代码 6 是CXErrorCodeRequestTransactionError.Code.invalidAction

这是示例代码的片段

let uuid = UUID()
let handle = CXHandle(type: .emailAddress, value: "jappleseed@apple.com")

let startCallAction = CXStartCallAction(call: uuid, handle: handle)

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

无论应用程序是前台还是后台,相同的代码在 iOS 13.3.0 及更早版本中都可以正常工作。 也许这是一个 13.3.1 的错误,或者苹果在应用程序在后台时实施了一些安全措施? 但是我在 iOS 13.3.1 发行说明中没有看到它。

我找到了解决我自己问题的方法。 它可能只适用于我的特定情况。 对于所有错误代码=6,它可能无法解决问题。 只要你知道。

解决此问题的方法是,当您的应用程序在后台时,您必须在调用CXCallController.request(:)之前播放音频。 如果需要,您甚至可以播放一秒钟的静音声音。 它不必是可听见的声音。

如果它不起作用,您可以尝试使用具有 0.1 秒延迟的 dispatch async 来调用CXCallController.request(:) 这个想法是,当您调用CXCallController.request(:)时,您需要确保音频引擎处于活动状态。

暂无
暂无

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

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