Для интеграции VoIP, вы должны будете использовать оба, callKit и PushKit.
CallKit будет использоваться для отображения собственного экрана вызовов и обработчиков во время перехода вызова, в то время как Pushkit будет использоваться для вызова приложения, когда приложение убито.
Его легко интегрировать : -
Включите фоновые режимы в info.plist и отметьте опцию «Приложение предоставляет услуги передачи голоса по IP».
Импортируйте Callkit в viewcontroller viewdidload / любой метод init любого класса, который вы использовали бы для реализации функций CXProviderDelegate. Благодаря этому вы будете настраивать объекты вызова, когда сообщать о поступающем вызове, принимать действия, отклонять действия и т. Д.
Реализация следующих функций:
func providerDidReset(_ provider: CXProvider) {
}
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
action.fulfill()
}
func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
action.fulfill()
}
Теперь импортируйте Pushkit и внедрите функции PKPushRegistryDelegate.
а.) Настройте pushkit следующим образом
let registry = PKPushRegistry(queue: nil)
registry.delegate = self
registry.desiredPushTypes = [PKPushType.voIP]
b.) Реализовать функцию токена pushkit. Возможно, вам придется обновить до сервера для доставки push-уведомлений Voip
func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
print(pushCredentials.token.map { String(format: "%02.2hhx", $0) }.joined())
}
с. Теперь, когда вы получите входящее уведомление, включите эту функцию
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
let config = CXProviderConfiguration(localizedName: "App name")
config.iconTemplateImageData = UIImagePNGRepresentation(UIImage(named: "any image name")!)
config.supportsVideo = true;
let provider = CXProvider(configuration: config)
provider.setDelegate(self, queue: nil)
let update = CXCallUpdate()
update.remoteHandle = CXHandle(type: .generic, value: "Caller name")
update.hasVideo = true
provider.reportNewIncomingCall(with: UUID(), update: update, completion: { error in })
}
- Перейдите на портал разработчика и создайте сертификат VoIP Services и установите его.
- Включить push-уведомления в разделе Возможности.
Это был базовый код для просмотра. Вам нужно будет добавить наблюдения для имитации входящего звонка и других настроек. Я надеюсь, что это поможет вам двигаться дальше.