我在iOS 10.3.3和更低版本的iOS版本上遇到了CallKit API的问题。
我的配置支持呼叫保持和分组,这是片段。
let configuration = CXProviderConfiguration(localizedName: applicationName)
configuration.supportsVideo = supportsVideo
configuration.supportedHandleTypes = [.phoneNumber]
configuration.maximumCallGroups = 2
configuration.maximumCallsPerCallGroup = 3
在iOS 10上,当app请求setHeld for call时,CallKit会停止呼叫。 以下是setHeld调用操作请求的片段。
public func performSetCallOnHoldAction(_ call: Call, isOnHold: Bool) {
let setHeldAction = CXSetHeldCallAction(call: UUID(uuidString: call.callUUID)!, onHold: isOnHold)
let transaction = CXTransaction()
transaction.addAction(setHeldAction)
requestTransaction(transaction)
}
最后,这是CXProvider委托方法,它完成了对呼叫的保持/取消保持动作:
func provider(_ provider: CXProvider, perform action: CXSetHeldCallAction) {
// Retrieve the Call instance corresponding to the action's call UUID
guard let call = CallList.sharedInstance().call(withUUID: action.callUUID.uuidString) else {
action.fail()
return
}
// Perform PJSUA set held action
if action.isOnHold {
Pjsua2Wrapper.sharedInstance()?.holdCall(withCallUUID: call.callUUID, completion: { (error) in
(error != nil) ? action.fail() : action.fulfill()
})
} else {
Pjsua2Wrapper.sharedInstance()?.unholdCall(withCallUUID: call.callUUID, completion: { (error) in
(error != nil) ? action.fail() : action.fulfill()
})
}
}
请注意,我使用Pjsip执行保持/取消保持操作,并在完成块内调用action.fulfill(
)或action.fail()
,这取决于psjip是否返回错误。
在应用程序GUI中,有一个切换交换按钮,它调用函数在CXSetHeldCallAction
上执行CXCallController
。
在iOS 11.0上,一切都运行良好,但在iOS 10上,当您按下切换按钮时,由于某种原因(CXProvider
,CXProvider
会暂停由CXEndCallAction
设置的呼叫。用requestTransaction
回复。
我在doOnError()
方法的调试器中查看了它返回事务错误,但是在请求事务调用控制器时没有错误。
有没有人知道出了什么问题,或者我可以尝试解决这个问题?