вы говорите, что не получаете, поэтому давайте сначала удостоверимся, что те методы, которые вы упоминали ранее и которые не были вызваны, поступают отсюда extension AppDelegate: UNUserNotificationCenterDelegate
(Кстати, когда вы реализуете метод didReceive убедитесь, что вы звоните completionHandler()
в конце)
Когда вы делаете это:
application.registerForRemoteNotifications ()
Обязательно запустите его из основного потока , так как его можно вызвать, если он не указан из фона, и это может привести к сбою. Вы можете сделать это, выполнив
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
Я предполагаю, что вы получаете токен устройства таким образом или что-то подобное:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// 1. Convert device token to string
let tokenParts = deviceToken.map { data -> String in
return String(format: "%02.2hhx", data)
}
let token = tokenParts.joined()
// 2. Print device token to use for PNs payloads
print("Device Token: \(token)")
}
Наконец, реализуйте этот метод, чтобы увидеть, есть ли какие-либо ошибки при регистрации устройства
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
// 1. Print out error if PNs registration not successful
print("Failed to register for remote notifications with error: \(error)")
}
Да, кстати (на случай, если вы его пропустили), убедитесь, что вы включили в целевой объект push-уведомление.