呼叫保持CallKit问题(iOS 10)

时间:2018-06-13 13:21:17

标签: ios iphone swift callkit

我在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上,当您按下切换按钮时,由于某种原因(CXProviderCXProvider会暂停由CXEndCallAction设置的呼叫。用requestTransaction回复。

我在doOnError()方法的调试器中查看了它返回事务错误,但是在请求事务调用控制器时没有错误。

有没有人知道出了什么问题,或者我可以尝试解决这个问题?

0 个答案:

没有答案