从未调用PKPushRegistryDelegate

时间:2019-01-11 02:19:12

标签: swift pushkit

尝试PKPushRegistryDelegate时,我得到了很多结果,但没有解决任何问题。所有人都建议检查info.plist的背景模式,这在我的应用中很好。我启用了voip,后台抓取,远程通知。还可以在Apple开发人员帐户中创建VoIP证书。我在didFinishLanunchingWithOptions

中写了以下几行
let pushRegistry = PKPushRegistry(queue: DispatchQueue.main)
pushRegistry.delegate = self
pushRegistry.desiredPushTypes = [.voIP]

并按如下所示委托方法

func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
    if let token = String(bytes: pushCredentials.token, encoding: String.Encoding.utf8) {
        print("Push token: \(token)")
    }
}
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
    print("notification received")
    print(payload)
}

func pushRegistry(_ registry: PKPushRegistry, didInvalidatePushTokenFor type: PKPushType) {
    print("Token invalid")
}

但是永远不会调用那些委托方法。由于VoIP证书仅在生产中,因此我尝试使用生产证书并检查了日志中是否包含推送令牌,但未找到。有没有一种方法可以使用开发证书进行调试?我在这里想念什么吗?请指教。

1 个答案:

答案 0 :(得分:0)

我在版本11.4的iPhone 6中也遇到了同样的问题。尝试使用其他设备iPhone 6+正常运行。这在某些设备中可能是个问题,但Apple文档中并未提及。

请在didUpdate委托方法中使用以下代码:

func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
        let pushToken = pushCredentials.token.map { String(format: "%02.2hhx", $0) }.joined()
        print("voip token: \(pushToken)")
    }