使用 CallKit 拨打电话

问题描述 投票:0回答:4

我实际上使用的是 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)

但不在我的项目中。然后,当我挂断电话时,我看到:“呼叫失败”。

你有什么想法吗?

swift2 callkit
4个回答
0
投票

确保您正在配置 CXProvider 并正确设置其委托。如果您不设置 CXProvider 的

delegate
属性,委托将不会收到任何要执行的操作。

此外,如果您看到“呼叫失败”UI,这可能表明您的应用程序正在崩溃。我会检查崩溃日志或在调试器中运行应用程序。


0
投票

据我所知,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”以删除“呼叫失败”屏幕。


0
投票

您是否已将所需的权限添加到您的 info.plist 中?


0
投票

你必须融入。 action.fulfill() 将确保您不会看到调用失败。

public func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
    action.fulfill() 
}
© www.soinside.com 2019 - 2024. All rights reserved.