Я пытаюсь создать приложение вызова VOIP, но получаю "Невозможно назначить значение 'CallDelegate.Type'to' 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. Многие элементы документации не работают "из коробки" (устаревшие методы, имена и т. Д. c), возможно, изменилось и назначение реестра.