Обычно обработка push-уведомлений состоит из следующих этапов:
- Включение push-уведомлений в разделе возможностей настроек проекта
- Запрос доступа к использованию удаленных и локальных уведомлений и делегирование входящих уведомлений вашей сущности наблюдателя уведомлений (класс, структура)
Это делается в классе AppDelegate, аналогично:
UNUserNotificationCenter
.current()
.requestAuthorization(options: [.alert, .badge]) { (granted, error) in
UNUserNotificationCenter.current().delegate = MyCustomDelegateEntity
}
- Реализация
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
в вашем делегате, который получает входящие уведомления
- Уведомления можно отличить по идентификатору, который находится в объекте UNNotificationResponse. На основании идентификатора вы можете решить, как реагировать соответственно.
В вашем конкретном случае вы должны создать экземпляр желаемого контроллера представления из NotificationDelegate аналогично
let rootVC = MyViewController.instantiateFrom(storyboard: "StoryboardName")
let navigationController = UINavigationController(rootViewController: rootVC)
(UIApplication.shared.delegate as? AppDelegate)?.window?.rootViewController = navigationController
Содержимое ViewController.instantiateFrom (раскадровка :) выглядит примерно так:
return UIStoryboard(name: storyboard, bundle: nil).instantiateViewController(withIdentifier: String(describing: self)) as! MyViewController