用PKPushRegistryDelegate

用PKPushRegistryDelegate

当我尝试使用PKPushRegistryDelegatenot call但没有解决我的问题时,我得到了很多结果。所有人都建议查看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证书仅在生产中,我尝试使用生产证书,并检查了推送令牌的日志,但未找到。有没有办法用开发证书调试它?我有什么遗漏吗?请指教。

最佳答案

我在11.4版的iPhone 6中也遇到了同样的问题。在不同的设备iPhone 6+上试用,结果正常工作。这在某些设备中可能是一个问题,但在苹果文档中没有提到。
请在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)")
    }

关于swift - 从未调用PKPushRegistryDelegate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54139533/

10-11 00:41