当我尝试使用PKPushRegistryDelegate
not 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/