Как убрать ошибку типа при назначении PKPushRegistryDelegate для Pushkit? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать приложение вызова 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), возможно, изменилось и назначение реестра.

1 Ответ

1 голос
/ 06 апреля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...