Уведомление PushKit приходит после завершения вызова - PullRequest
0 голосов
/ 11 марта 2020

У меня есть приложение, которое реализует PushKit и CallKit. Сценарий, в котором возникает проблема, выглядит следующим образом:

Устройство A инициирует вызов, отправляя уведомление PushKit на Устройство B. Устройство B не имеет соединения inte rnet и, следовательно, не принимает вызов. Устройство А завершает вызов. Устройство B подключается к inte rnet через некоторое время. Устройство B получает уведомление PushKit о том, что устройство A отправлено ранее, и отображает интерфейс входящего вызова CallKit.

Как вы можете видеть, устройство B отображает интерфейс входящего вызова CallKit даже после того, как устройство A завершило вызов.

Как запретить устройству B принимать входящий звонок?

Спасибо

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Вы должны отправить сигнал об окончании вызова через уведомление PushKit, чтобы, как только устройство B повторно подключилось, оно получало как уведомления о начальном вызове, так и об окончании вызова.

0 голосов
/ 11 марта 2020

В iOS 13 вы должны сообщить о входящем звонке, прежде чем покинуть обработчик завершения PushKit, иначе ваше приложение будет заблокировано от получения дальнейших нажатий PushKit. Очевидно, это небольшая проблема, когда у вас есть такой случай, как вы описали, когда вызов больше не существует.

Этот и другие сценарии обсуждались в ветке форумов разработчиков Apple

Специальный c совет для вашего дела:

  • Хотя вы должны немедленно сообщить о входящем вызове, вы все равно можете решить, что вызов не удался, и сообщить Система позже, асинхронно. Для этого вызовите reportCallWithUUID: terminAtDate: reason :. Это разрушит пользовательский интерфейс входящего вызова, даже если пользователь не ответил на вызов.
  • Если пользователь особенно быстро нажимает кнопку «Принять вызов», или если сетевые условия плохие или существует в противном случае большая задержка, тогда вам следует просто подождать, пока необходимые рукопожатия будут завершены, прежде чем выполнять вызов на CXAnswerCallAction. Пользователю просто кажется, что для установления соединения требуется некоторое время, что является обычным явлением даже для стандартных телефонных звонков.

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

Итак, вам нужно сообщить о звонке, а затем, когда вы решите, что звонок больше не действителен (что не должно занимать много времени), немедленно завершите звонок.

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