迁移到Twilio Voice 5.0(iOS 13,Xcode 11):自定义来电视图控制器,拒绝来电问题

时间:2019-12-22 05:49:37

标签: ios swift twilio ios13 twilio-api

我正在将iOS应用迁移到Twilio Voice 5.x API(iOS 13和Xcode 11),并且有一些问题:

  1. 我的应用程序使用来电。 Twilio要求:3.将呼叫报告给CallKit。有关如何将呼叫报告给CallKit的信息,请参考此示例。 我的问题:这是否意味着我不能在前台模式下使用更多自定义来电视图控制器?

  2. 收到呼叫邀请后,我立即发送请求以获取有关呼叫者的信息并显示它。我在后台做。它在以前的版本中有效,但是 现在不起作用,因为中断和处理程序必须立即在同一线程上工作。您有什么建议?

  3. 拒绝来电对我不起作用。应用已迁移到Twilio Voice 5.1.1。我接到来电:

    func callInviteReceived(_ callInvite: TVOCallInvite) {
    
        self.callKitProvider.reportNewIncomingCall(with: uuid, update: callUpdate) { (error) in 
    }
    

    我按下CallKit屏幕上的Decline按钮。

    CallKit代表得到:

    func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
            activeCallInvite.reject()
            action.fulfill()
    

    }

    在控制台上:“ DEBUG:Twilio:Core:从下面接收到传入的SIP消息:SIP / 2.0 600呼叫被拒绝”。但是在主叫方电话正在继续通话。任何想法?顺便说一句,取消开始的呼叫非常有效。

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用reportCall这样在CallKit呼入呼叫屏幕上更新值:

    扩展名TwilioInteractor:TVONotificationDelegate {

    func callInviteReceived(_ callInvite: TVOCallInvite) {
        let from = callInvite.from ?? "?"
        let uuid = callInvite.uuid
        displayIncomingCall(from: from, uuid: uuid)
        fetcher.fetchCaller(for: from, callInvite: callInvite) { caller in
            self.updateIncomingCall(from: caller, uuid: uuid)
        }
    }
    
    private func displayIncomingCall(from: String, uuid: UUID) {
        let callHandle = CXHandle(type: .generic, value: from)
        let callUpdate = CXCallUpdate()
        callUpdate.remoteHandle = callHandle
        callUpdate.hasVideo = false
        callUpdate.supportsDTMF = true
        callUpdate.supportsHolding = false
        callUpdate.supportsGrouping = false
        callUpdate.supportsUngrouping = false
    
        self.callKitProvider.reportNewIncomingCall(with: uuid, update: callUpdate) { (error) in
            if let error = error {
                Log.e("Failed to report incoming call successfully: \(error.localizedDescription).")
            } else {
                Log.twilio("Incoming call successfully reported.")
            }
        }
    }
    
    private func updateIncomingCall(from: String, uuid: UUID) {
        let callHandle = CXHandle(type: .generic, value: from)
        let callUpdate = CXCallUpdate()
        callUpdate.remoteHandle = callHandle
        self.callKitProvider.reportCall(with: uuid, updated: callUpdate)
    }
    

    }