Обнаружение приложения iOS в фоновом режиме

Я работаю над игрой для iOS, закодированной в Swift. Я попытался найти способ обнаружить, когда приложение переходит в фоновый режим или прервано по другим причинам, например, по телефону, но ничего не может найти. Как это сделать?

Ответ 1

редактировать/обновлять: Xcode 10 • Swift 4.2

Вы можете добавить наблюдателя в свой контроллер представления для UIApplication.willResignActiveNotification

NotificationCenter.default.addObserver(self, selector: #selector(willResignActive), name: UIApplication.willResignActiveNotification, object: nil)

и добавьте метод селектора к вашему контроллеру представления, который будет выполняться, когда ваше приложение получит это уведомление:

@objc func willResignActive(_ notification: Notification) {
    // code to execute
}

Ответ 2

Чтобы обнаружить приложение, входящее в фон, вы можете проверить приложение appDelegate.m найти метод делегирования приложения

applicationDidEnterBackground

Этот метод будет вызван, как только приложение войдет в фон.

Ответ 3

Swift3

let notificationCenter = NotificationCenter.default
    notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: Notification.Name.UIApplicationWillResignActive, object: nil)


func appMovedToBackground() {
    print("App moved to background!")
}

Ответ 4

Взгляните на методы делегата, определенные в вашем экземпляре UIApplicationDeletegate (по умолчанию AppDelegate.m). В частности, было бы полезно следующее:

- (void)applicationWillResignActive:(UIApplication *)application

Этот метод вызывается, чтобы сообщить вашему приложению, что он собирается перейти из активного состояния в неактивное. Это может произойти для определенных типов временных прерываний (например, входящего телефонного звонка или SMS-сообщения) или когда пользователь покидает приложение и начинает переход в фоновое состояние. Приложение в неактивном состоянии продолжает работать, но не отправляет входящие события респондентам.

Взято из документации Apple - здесь

Ответ 5

В swift 4 и iOS 12: чтобы наблюдать, как приложение входит в фоновое событие, добавьте этот код в метод viewDidLoad().

    let notificationCenter = NotificationCenter.default
    notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)

    @objc func appMovedToBackground() {
        // do whatever event you want
    }

Вы должны использовать UIApplication.didEnterBackgroundNotification. Если вы хотите увидеть, пришло ли приложение на событие переднего плана, используйте UIApplication.willEnterForegroundNotification

Итак, полный код будет:

override func viewDidLoad() {
    super.viewDidLoad()

    let notificationCenter = NotificationCenter.default
    notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)

    notificationCenter.addObserver(self, selector: #selector(appCameToForeground), name: UIApplication.willEnterForegroundNotification, object: nil)

    // Do any additional setup after loading the view.
}
 @objc func appMovedToBackground() {
    print("app enters background")
}

@objc func appCameToForeground() {
    print("app enters foreground")
}