我实际上使用的是 swift 2.3。 入站呼叫与 CallKit 配合得很好。但是拨出电话....
我看到了SpeakerBox项目,我也做了同样的事情。 但这不起作用。
为了开始通话,我使用了
let handle = CXHandle(type: .PhoneNumber, value: "TOTO")
let startCallAction = CXStartCallAction(callUUID: uuid, handle: handle)
startCallAction.video = video
let transaction = CXTransaction()
transaction.addAction(startCallAction)
requestTransaction(transaction)
之后,在SpeakerBox项目中,这个函数被调用:
func provider(provider: CXProvider, perform action: CXStartCallAction)
但不在我的项目中。然后,当我挂断电话时,我看到:“呼叫失败”。
你有什么想法吗?
确保您正在配置 CXProvider 并正确设置其委托。如果您不设置 CXProvider 的
delegate
属性,委托将不会收到任何要执行的操作。
此外,如果您看到“呼叫失败”UI,这可能表明您的应用程序正在崩溃。我会检查崩溃日志或在调试器中运行应用程序。
据我所知,SpeakerBox demo 不执行以下提供程序方法:
https://developer.apple.com/documentation/callkit/cxprovider/1930701-reportcall
func reportCall(with UUID: UUID,
endedAt dateEnded: Date?,
reason endedReason: CXCallEndedReason)
- (void)reportCallWithUUID:(NSUUID *)UUID endedAtDate:(nullable NSDate
*)dateEnded reason:(CXCallEndedReason)endedReason;
这会导致显示“呼叫失败”UI 屏幕 - 因为 CallKit 没有给出呼叫结束的原因,并且似乎“ 默认情况下假定为“CXCallEndedReasonFailed”。
在请求 CXEndCallAction 事务之前调用“reportCallishedAt”以删除“呼叫失败”屏幕。
你必须融入。 action.fulfill() 将确保您不会看到调用失败。
public func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
action.fulfill()
}