Как я могу проверить, когда приложение возвращается на передний план из фона, но не из push-уведомления?

func application(application: UIApplication, didReceiveRemoteNotification data: [NSObject : AnyObject]) {
        var dat = JSON(data)
        if application.applicationState == UIApplicationState.Active {
            // app was already in the foreground
            println("App is in foreground")
            processNotification(dat)
        }else{
            // app was just brought from background to foreground via PUSH
            println("App brought back via PUSH")
            processNotification(dat)
        }
    }

Вот как я проверяю push-уведомления. Однако, когда, если я отправлю push-уведомление, пользователь пропустит его, а затем откроет приложение через значок? Как я могу проверить, когда приложение было открыто из значка?


person TIMEX    schedule 19.04.2015    source источник
comment
вы имеете в виду, как определить, открыто ли приложение, но висит неоткрытое уведомление?   -  person Simon    schedule 20.04.2015
comment
@ Саймон, да, наверное.   -  person TIMEX    schedule 20.04.2015


Ответы (1)


Протокол UIApplicationDelegate определяет несколько методов, позволяющих добавлять код в несколько жизненных циклов вашего приложения. события цикла.

Особый интерес для вас будет представлять следующее:

  • application(_:willFinishLaunchingWithOptions:) — вызывается непосредственно перед завершением запуска приложения, когда приложение еще не было активно в фоновом режиме.
  • application(_:didFinishLaunchingWithOptions:) — вызывается сразу после завершения запуска приложения, когда приложение еще не было активно в фоновом режиме.
  • applicationDidBecomeActive(_:) — вызывается сразу после того, как приложение стало активным, вызывается, когда пользователь запускает с нуля, повторно открывает из фона, а также когда пользователь возвращается после временного прерывания (например, телефонного звонка)
  • applicationWillEnterForeground(_:) — вызывается непосредственно перед тем, как приложение выходит на передний план после того, как оно было в фоновом режиме — за ним сразу же следует вызов applicationDidBecomeActive(_:)

Эти события жизненного цикла могут запускаться независимо от того, открыл ли пользователь ваше приложение через уведомление или нажав на значок. Насколько я знаю, нельзя точно сказать, что приложение было открыто нажатием на значок. Вы можете знать, что приложение не было открыто через уведомление, так как соответствующие методы «получил уведомление» никогда не сработают. Но это по-прежнему позволяет пользователю открыть приложение двумя (по крайней мере) способами: коснуться значка приложения или дважды нажать кнопку «Домой» и коснуться приложения, чтобы вывести его из фона.

person nhgrif    schedule 19.04.2015
comment
Я предполагаю, что applicationDidBecomeActive - это то, что я ищу, верно? - person TIMEX; 20.04.2015
comment
Вероятно. Достаточно просто поставить точки останова или println во все из них и поэкспериментировать, чтобы увидеть точно, как работает жизненный цикл, и выяснить, что именно вам нужно. - person nhgrif; 20.04.2015
comment
По справочным страницам есть словарь с ключами, в котором можно узнать, висят ли еще уведомления: developer.apple.com/library/ios/documentation/UIKit/Reference/ - person Simon; 21.04.2015