iOS отправляет объект уведомления в UserNotificationCenter и didFinishLaunchingWithOptions

Когда приложение закрыто и пользователь нажимает на уведомление:

1) didFinishLaunchingWithOptions вызывается с объектом remoteNotification. Я установил rootViewController здесь, как и ожидалось

2) userNotificationCenter(_, didReceive, withCompletionHandler) также вызывается.

Дело в том, что я не хочу ничего делать на шаге 2, потому что я уже обработал уведомление на шаге 1). Но, если приложение было на переднем плане или в фоновом режиме, я хочу обработать уведомление на шаге 2). Я не знаю, как дифференцировать эти два случая.

2 ответа

Я думаю, что они для отдельных проблем.

То есть userNotificationCenter(_, didReceive, withCompletionHandler) для обработки ответов. Какое действие щелкнул пользователь, просто проведя пальцем, чтобы очистить его? Они ответили на сообщение прямо там?

Но didFinishLaunchingWithOptions это только для получения обратного вызова, это просто чтобы сообщить вам, что приложение было запущено через уведомление после того, как оно было убито / приостановлено... будьте в курсе... и вот ваш шанс сделать запуск / делать то, что вы обычно делаете во время приложение запускается

Вы можете использоватьflagпеременная вAppDelegateсорт. Начальное значение равно false с именем . Эта переменная будет иметь значение true всякий раз, когда func applicationDidBecomeActive(_ application: UIApplication)называется.

Таким образом, вы можете проверить, завершило ли приложение первую настройку/инициализацию или нет. Экземпляр AppDelegate — это общий экземпляр, поэтому вы можете проверить его в любом месте во время выполнения.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Boolвызывается только один раз, когда приложение полностью загружено в оперативную память. После этого вы можете проверитьisAppActiveценить. Бывший:

      func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
    if isAppActive {
        // Do your logic here
    }
Другие вопросы по тегам