Я пытаюсь создать приложение для вызова VOIP, но получаю сообщение «Невозможно присвоить значение« CallDelegate.Type »PKPushRegistryDelegate.
Ниже мой класс делегата. Класс наследует PKPushRegistryDelegate и реализует методы pushRegistry. Не в AppDelegate, потому что мне нужен метод Init для запуска CallKit CXProvider (такая же ошибка, если вы поместите все в AppDelegate).
import Foundation
import CallKit
import PushKit
class CallDelegate : NSObject, PKPushRegistryDelegate
{
private let provider: CXProvider
static func registerVoIPPush() {
let voipPushResgistry = PKPushRegistry(queue: DispatchQueue.main)
voipPushResgistry.delegate = self //**Getting the assign error here**
voipPushResgistry.desiredPushTypes = [PKPushType.voIP]
}
func pushRegistry( _ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType) {
if type == PKPushType.voIP {
let tokenData = credentials.token
let voipPushToken = String(data: tokenData, encoding: .utf8)
//Send the POST request to oneSignal here
}
}
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType) {
if type == .voIP {
if let handle = payload.dictionaryPayload["handle"] as? String,
let uuidString = payload.dictionaryPayload["uuid"] as? String,
let isVideo = payload.dictionaryPayload["isVideo"] as? Bool {
reportInComingCallWith(uuidString: uuidString, handle: handle, isVideo: isVideo)
}
}
}
func pushRegistry( _ registry: PKPushRegistry, didInvalidatePushTokenFor type: PKPushType) {
}
func pushRegistry( _ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type:PKPushType, completion: @escaping () -> Void) {
if type == PKPushType.voIP {
}
}
Я включил уведомления VOIP в возможностях и связал фреймворк Pushkit с проектом. Ориентация на IOS 13. Многие вещи в документации не работают из коробки (устаревшие методы, имена и т. Д.), Возможно, назначение реестра также было изменено.