Как убедиться, что CallKit Call подключен до ответа на Call? - PullRequest
0 голосов
/ 23 марта 2020

У меня есть приложение VOIP с интеграцией Sinch Video. Если приложение работает в фоновом режиме, появляется окно длительностью около 1–3 секунд, через которое VOIP Pu sh отправляется, но Sinch Call еще не подключен. (Требование iOS13 о немедленном сообщении о VOIP Pu sh).

В документации Apple они дают следующий совет:

Ответ на уведомления VoIP от PushKit

Если получатель вызова отвечает до того, как приложение установит соединение с вашим сервером, не выполняйте объект CXAnswerCallAction, отправленный провайдеру: executeAnswerCallAction: метод вашего делегата немедленно. Вместо этого подождите, пока вы не установите sh соединение, а затем выполните объект. Пока оно ожидает, пока ваше приложение выполнит запрос, интерфейс входящего вызова сообщает пользователю, что вызов подключается, но еще не готов.

Такое поведение можно наблюдать и в Facetime, где часто в течение короткого периода времени CallKit показывает соединение ...

Я не могу понять, как правильно следовать этому совету в документации Apple.

Есть ли способ, которым я может ли стандарт позволить AnswerCallAction всегда задерживать процесс ответа, скажем, на 2 секунды?

вот мой метод делегата соответствующего поставщика:

func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
    if (!(CommunicationService.shared?.tellGuardAnswerCallAction())!){
        action.fail()
        print("CXCallDelegate CXProvider: ERROR Answering Call")
        return
    }
    self.callManager.removeAll()
    CommunicationService.shared?.cDotAnswer()
    action.fulfill()        
}

Если я отвечу на вызов перед вызовом Sinch и Звонок UIKit подключен, тогда Звонок не будет работать. Поэтому в идеале я бы всегда давал коду 1-2 секунды для подключения ИЛИ проверял, подключен ли Sinch Call, прежде чем перейти к action.fulfill ()

...