У меня есть приложение 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 ()