В классе AppDelegate объявите глобальную переменную window
типа UIWindow
как
var window: UIWindow?
. В методах didFinishLaunchingWithOptions
проверьте, было ли приложение запущено из модуля запуска, или нажав на кнопку уведомление. Если да, показать новый контроллер представления.
window = UIWindow(frame: UIScreen.main.bounds)
if launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification] != nil {
// App is launched by clicking on a remote notification
// Show view controller
let vc = ViewController()
window!.rootViewController = vc
window!.makeKeyAndVisible()
} else {
// App is launched from the launcher
}
Кроме того, обратите внимание, что метод didFinishLaunchingWithOptions
будет вызываться только в том случае, если приложение будет убито, а не в том случае, если приложение будет вновь открыто, пока оно находится в фоновом режиме. Чтобы показать контроллер представления, если уведомление нажимается, когда приложение все еще находится в фоновом режиме, добавьте следующий код в метод userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
.
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
window = UIWindow(frame: UIScreen.main.bounds)
let vc = ViewController()
window!.rootViewController = vc
window!.makeKeyAndVisible()
completionHandler()
}