Swift CallKit-如何将CXCallController置于前端

Swift CallKit-如何将CXCallController置于前端,swift,tokbox,callkit,Swift,Tokbox,Callkit,我正在创建一个VOIP应用程序。 大多数逻辑类似于 我的问题是,在接受呼叫后,CXCallController不在应用程序的顶部,而是在“任务管理器”中位于其旁边: 问题是,一旦您接受了呼叫,CXCallController就不是最顶级的控制器,而是实际的应用程序。 所以你不知道电话是在打。 要执行与呼叫相关的操作(例如挂断、保持、静音),您必须通过任务管理器打开CXCallController。不是很友好 在用户接受呼叫后,如何将CXCallController带到前台 在用户应答呼叫后调用

我正在创建一个VOIP应用程序。 大多数逻辑类似于

我的问题是,在接受呼叫后,
CXCallController
不在应用程序的顶部,而是在“任务管理器”中位于其旁边:

问题是,一旦您接受了呼叫,
CXCallController
就不是最顶级的控制器,而是实际的应用程序。 所以你不知道电话是在打。 要执行与呼叫相关的操作(例如挂断、保持、静音),您必须通过任务管理器打开
CXCallController
。不是很友好

在用户接受呼叫后,如何将
CXCallController
带到前台

在用户应答呼叫后调用提供程序代理:

func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {

    guard let call = callManager.getCall(with: action.callUUID) else {
        action.fail()
        return
    }

    configureAudioSession()
    self.incommingCall = call
    action.fulfill()
}
创建音频会话后的回调:

func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {

    incommingCall?.answerCall(with: audioSession) { success in

        if success {
            self.incommingCall?.startAudio()
        }
    }
}
使用TokBox VOIP服务启动呼叫逻辑:

func answerCall(with audioSession: AVAudioSession, completion: ((_ success: Bool) -> Void)?) {

    OTAudioDeviceManager.setAudioDevice(OTDefaultAudioDevice.sharedInstance(with: audioSession))
    if session == nil {
        session = OTSession(apiKey: self.apiKey, sessionId: self.sessionID, delegate: self)
    }

    answerCallCompletion = completion

    var error: OTError?
    hasStartedConnecting = true
    session?.connect(withToken: self.token, error: &error)

    if error != nil {

        CoreServices.catchError(error: error, at: #function)
    }
}
呼叫本身工作正常。双方能够进行通信、开始通话和结束通话。唯一的问题是所描述的
CXCallController
行为

这是预期的行为吗?或者如何将
CXCallController
带到前面?
非常感谢您的帮助。

这是callkit的预期行为。Callkit允许我们在应用程序接收来电时接听或拒绝来电。接听电话后,应用程序必须管理所有操作

  • 当手机锁定时接收来电,CXCallController将可见,接听来电后,您仍然可以看到处于锁定模式的CXCallController。解锁手机后,CXCallController将不可见,应用程序必须管理挂断、静音或保持选项
  • 当手机未锁定时,接到来电时,CXCallController将可见,接听电话后,CXCallController将不可见,应用程序必须管理挂断、静音或保持选项

是的。谢谢你抽出时间。这就是我的想法,并最终付诸实施。不是100%满意。但不管怎样