Важно понимать, что CallKit не обрабатывает само соединение вызова, а также не все возможные состояния вызова, даже если он участвует во всем процессе инициации и завершения вызова. Так часто вы используете какую-то форму реализации SIP.
В любом случае, у вас должна быть некоторая реализация соединения вызова и потоковой передачи аудио / видео.
iOS и CallKit не может этого сделать тривиально для вас из коробки.
Пока ваше приложение уведомляется о входящем звонке через уведомление pu sh, ваше приложение уведомляется о том, что удаленная сторона зависает через SIP или подобное. Но он не должен уведомляться о прекращении вызова через уведомление pu sh . На самом деле не было бы особого смысла использовать уведомление pu sh, поскольку в любом случае у вас уже есть постоянное соединение для вызова. Это текущее соединение обычно используется для сигнализации о том, что локальная или удаленная сторона вешает трубку, что в любом случае является функцией SIP.
Причина использования уведомлений pu sh в начале для входящего вызова Уведомление вместо постоянного SIP-соединения заключается в том, что оно экономит заряд батареи, в то время как никакое такое преимущество не приведет к использованию уведомлений pu sh также для сигнализации об окончании вызова. Поэтому было бы лучше, если бы вы не пытались использовать уведомления pu sh для сигнализации об окончании вызова, а вместо этого сообщение BYE SIP .
Затем ваш код обработки SIP должен уведомить iOS через CallKit, сообщая об окончании вызова через reportCall(with UUID: UUID, endedAt dateEnded: Date?, reason endedReason: CXCallEndedReason)
и обрабатывать само фактическое разъединение вызова .
Так как iOS / CallKit не может и не будет обрабатывать ваше соединение / разъединение вызова, вы всегда нужно делать это самостоятельно или использовать библиотеку SIP, такую как PJSIP, которая сделает для вас большую часть этого.