[英]CallKit error com.apple.CallKit.error.requesttransaction error 7
[英]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.