Проблема CallKit с удержанием вызова (iOS 10) - PullRequest
0 голосов
/ 13 июня 2018

У меня проблема с CallKit API в iOS 10.3.3 и более поздних версиях iOS.

Моя конфигурация поддерживает удержание и группировку вызовов, вот фрагмент кода.

let configuration = CXProviderConfiguration(localizedName: applicationName)

configuration.supportsVideo = supportsVideo
configuration.supportedHandleTypes = [.phoneNumber]
configuration.maximumCallGroups = 2
configuration.maximumCallsPerCallGroup = 3

В iOS10, CallKit сбрасывает вызов, когда приложение запрашивает действие setHeld для вызова.Вот фрагмент запроса действия вызова 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 ошибку.

В графическом интерфейсе приложения есть кнопка переключения переключения,который вызывает функцию для выполнения CXSetHeldCallAction на CXCallController.

В iOS 11.0 все работает отлично, но в iOS 10, когда вы нажимаете эту кнопку переключения, вызов, который должен быть переведен в режим удержания, получаетпо какой-то причине завершается CXProvider (CXProvider отвечает CXEndCallAction).

Я искал в отладчике метод requestTransaction, если он возвращает ошибку транзакции, но нет ошибки при запросе транзакции для вызова контроллера.

Кто-нибудь имеет представление о том, что не так,или что-то, что я могу попробовать решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...