Как убрать ошибку типа при назначении PKPushRegistryDelegate для Pushkit?

Я пытаюсь создать приложение для вызова 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. Многие вещи в документации не работают из коробки (устаревшие методы, имена и т. Д.), Возможно, назначение реестра также было изменено.


person Paul Vinogradov    schedule 06.04.2020    source источник


Ответы (1)


Проблема в том, что ваш метод registerVoIPPush() является статическим, следовательно, в этом контексте self относится к типу, а не к экземпляру CallDelegate. Вы должны назначить экземпляр вашего CallDelegate класса делегату PKPushRegistry.

person Marco    schedule 06.04.2020