Неисправность получения push-уведомлений в iOS10 и iOS9

Попытка настроить push-уведомление для iOS10. если бы он работал ранее для версий ниже 10.
Прочитайте несколько руководств, моя настройка выглядит так:

// Register for the defined notifications if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.current() center.delegate = UIApplication.shared.delegate as! AppDelegate center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in if error == nil { UIApplication.shared.registerForRemoteNotifications() } } } else { // Fallback on earlier versions let notificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: [autoCancelCategory]) UIApplication.shared.registerUserNotificationSettings(notificationSettings) UIApplication.shared.registerForRemoteNotifications() } 

Это называется login ^ в одном из моих контроллеров.

И теперь в AppDelegate , он соответствует UNUserNotificationCenterDelegate , у меня есть следующие методы:

 @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { print("Got a push!") } @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { print("Got a push!") } 

И у меня также есть:

  func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let settings = UserDefaults.standard settings.setValue(deviceToken, forKey: "deviceToken") } 

Маркер устройства загружается на сервер как Data , и это отлично работает для предыдущих версий.
Я проверил, что токен на сервере совпадает с маркером на телефоне.
Я включил push-уведомления для всех целей в Capabilities , я также добавил галочку. Add the push Notifications entitlement to your entitlements file .
Не получить ничего вообще, хотя на толчок.
Какие-нибудь идеи, что я могу делать неправильно здесь? Любые указатели были бы действительно оценены!

Благодаря!

EDIT: Я также заметил, что push-уведомления не работают в iOS9.

3 Solutions collect form web for “Неисправность получения push-уведомлений в iOS10 и iOS9”

Вы проверили, что в настройках сборки> «Подписи кодов» имеется ссылка на файл прав? [AppName] .entitlements.

И что файл прав содержит правильную информацию:

(ключ: APS Environment, value: development)

Помимо этого, вы можете попробовать восстановить сертификаты push. Нам пришлось создавать новые сертификаты, чтобы заставить его работать в процессе после обновления IOS 10 (но не в среде песочницы).

Просто заметили, что вы регистрируете делегата позже, чем application(_:willFinishLaunchingWithOptions:) или application(_:didFinishLaunchingWithOptions:) .

Возможно, поэтому ваши методы делегатов не пострадали?

См. Документы :

Важный

Вы должны назначить объект-делегат объекту UNUserNotificationCenter не позднее, чем ваше приложение завершит запуск. Например, в приложении iOS вы должны назначить его в приложении ( : willFinishLaunchingWithOptions 🙂 или приложении ( : doneFinishLaunchingWithOptions :).

Идя на это, возможно, это будет полезно для других. Мой токен был неправильным. Кодировка изменилась с недавними обновлениями. Я действительно искал все переполнение стека для этого, и я понял, что мне пришлось преобразовать Data в String используя base64string . Однако я заметил, что в этой строке было несколько нечетных символов, например \ . В итоге я закончил создание Data :

 extension Data { func hexString() -> String { return self.reduce("") { string, byte in string + String(format: "%02X", byte) } } } 

Это преобразует Data в правильный формат. Так что, если это так, как вы делаете свое преобразование, плюс все права установлены, вы не забудьте добавить новые методы:

 @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { print("Got a push!") } @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { print("Got a push!") } 

и установите объект делегирования в didFinishLaunchingWithOptions все должно быть хорошо.

  • Xcode8 не может подключать несколько / одиночных uibuttons к одному @IBAction в swift-файле
  • Swift 3 Значение типа «Any?» не имеет объекта участника '
  • Sha 256 Синтаксическая ошибка шифрования в swift 3.0
  • Swift 3.0: Неоднозначная ссылка на вопрос «Подзаголовок участника» в push-уведомлении
  • Кодировка Base64 с Swift 3
  • Как использовать для цикла для создания массива Int в Swift 3
  • Метод Objective-C, который возвращает блок, недоступен в Swift
  • Swift 3.0, Alamofire 4.0 Дополнительный аргумент «метод» в вызове
  • Swift 3.0 AVAudioPlayer Воспроизведение аудио по музыке
  • Внедрение Unity в проекте Swift 3: сбой при запуске приложения - MetadataCache :: Initialize ()
  • Странные сообщения терминала в Xcode 8
  • Interesting Posts
    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.