Apple изменила способ использования PushKit и Callkits.

Вы можете прочитать еще много сообщений в блоге The Swift Nerd по ссылке:



Основные приложения, такие как мессенджер Facebook, Whatsapp или Skype, использующие вызовы VOIP, должны будут внести серьезные изменения, чтобы они могли работать без сбоев в последней версии iOS 13, как было объявлено в рамках сеанса фоновое выполнение приложений во время WWDC 2019.

Если вы когда-либо делали видео или голосовой вызов из любого приложения iOS, то вы, вероятно, сами испытали CallKit и Pushkit. Недавно я потратил много времени на работу с CallKit и PushKit для реализации функций голосовых / видеозвонков. Начиная с iOS 13.0, есть много критических изменений, которые могут повлиять на многие существующие приложения, использующие Callkit. Этот пост будет полезен всем, кто использует CallKit и Pushkit в своих приложениях, и поможет сэкономить много времени на переносе своей кодовой базы.

1. CallKit обязателен с Puskit

Если бы вы использовали уведомления VOIP для обновлений в реальном времени или любое обновление для вызова приложения, теперь оно сломалось бы. Если push-уведомление VoIP не передается в CallKit в течение назначенного временного окна, iOS завершит работу приложения. Если приложению неоднократно не удается сообщить о входящем вызове, Apple полностью перестанет доставлять push-уведомления VoIP в приложение. Это наихудший сценарий, и клиентам придется переустановить приложение, чтобы снова получать push-уведомления VoIP.

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType) {
    if type == .voIP {
     if let handle = payload.dictionaryPayload["handle"] as? String{ 
           let callUpdate = CXCallUpdate()
            callUpdate.remoteHandle = CXHandle(type: .phoneNumber,value: handle)
           let callId = UUID()
          provider.reportNewIncomingCall(with: uuid, update: callUpdate { _ in
                completion()
           }
// Set up connection with your services here for call management
      establishConnection(for: callId)
   }
}

Совет эксперта: постарайтесь включить как можно больше информации для вызывающего абонента, чтобы вы могли быстро информировать пользователя о входящих вызовах. Это сэкономит много времени при разрешении дескрипторов для вызовов.

2. Низкий срок действия APNS.

Установите срок действия APNS на 0 или что-то небольшое. В мире реального времени ваша серверная часть может быть не так эффективна для мгновенной отправки уведомлений VOIP. Пользователь может позвонить другому пользователю, но из-за задержки ваше уведомление может быть доставлено с опозданием, а вызывающий пользователь может даже не быть в сети. Это очень плохой сценарий, которого следует избегать при разработке мгновенных функций, таких как звонки. Установка поля истечения срока действия APNS на 0 позволит системе мгновенно отображать push-уведомление или отклонять его, если в APNS есть какая-либо задержка.

Все еще читаете? Этот пост перенесен в личный блог. Ознакомьтесь с полной публикацией здесь.

Давайте подключимся!

Вы можете найти меня в LinkedIn | Github | "Переполнение стека"