PKPushRegistryDelegate никогда не вызывается
Я получил много результатов, когда я пытался с PKPushRegistryDelegate
не звонил но ничего не решил мою проблему. Все предлагают проверить info.plist для фоновых режимов, что хорошо в моем приложении. Я включил VoIP, фоновую выборку, Удаленные уведомления. Создайте сертификат VoIP в учетной записи разработчика Apple. Я написал следующие строки в 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 только на производстве, я попытался с производственным сертификатом и проверил журналы для push-токена, но не нашел. Есть ли способ отладить его с помощью сертификатов разработки? Я что-то здесь упускаю? Пожалуйста посоветуй.
1 ответ
Я столкнулся с той же проблемой в iPhone 6 с версией 11.4. Пробовал с другим устройством 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)")
}