CallKit - Как вывести CXCallController на передний план - PullRequest
0 голосов
/ 10 мая 2018

Я создаю приложение VOIP. Большая часть логики похожа на Raywenderlich Tutorial .

Моя проблема в том, что после принятия вызова CXCallController находится не поверх Приложения, а рядом с ним в «диспетчере задач»:

enter image description here

Проблема в том, что после того, как вы приняли вызов, 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 Service:

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 на фронт? Помощь очень ценится.

1 Ответ

0 голосов
/ 11 мая 2018

Это ожидаемое поведение callkit.Callkit позволяет нам отвечать или отклонять вызов, когда приложение получает входящий вызов.После ответа на звонок приложение должно управлять всеми действиями.

  • когда телефон заблокирован , примите входящий вызов, CXCallController будет виден , после ответа на вызов все еще вы можете увидеть CXCallController врежим блокировки.После разблокировки телефона CXCallController станет невидимым , приложение должно управлять параметрами зависания, отключения звука или удержания.
  • , когда телефон не заблокирован , получитьвходящий вызов, CXCallController будет виден , после ответа на вызов CXCallController будет невидимым , приложение должно управлять параметрами зависания, отключения звука или удержания.
...