AppDelegate applicationDidEnterBackground работает на симуляторе, но не на устройстве

Я пытаюсь отслеживать, когда пользователь в сети или в автономном режиме. Я пытаюсь сделать это, обновляя пользовательский объект на сервере синтаксического анализа каждый раз, когда приложение открыто, и всякий раз, когда приложение закрывается с помощью следующего кода.

 func applicationWillEnterForeground(_ application: UIApplication) {

        let username : String? = UserDefaults.standard.string(forKey: "username")
        if username != nil {
            print("online")
            let object = PFUser.current()
            object!["online"] = "yes"
            object?.saveInBackground()

        }

    }

    func applicationDidEnterBackground(_ application: UIApplication) {

        let username : String? = UserDefaults.standard.string(forKey: "username")
        if username != nil {
            print("Offline")
            let object = PFUser.current()
            object!["online"] = "no"
            object?.saveInBackground()

        }
    }

Когда я проверяю это на симуляторе на Mac, кажется, он работает отлично. Однако, когда я тестирую его на моем реальном iPhone, он обновляется, когда приложение открыто, но не когда оно закрыто. (печать всегда печатается как на устройстве, так и на симуляторе, поэтому функция вызывается)

Проведя некоторое исследование, я обнаружил, что мне это может понадобиться в моем info.plist Application does not run in background Так что я добавил это и установил его нет. Однако это все еще не работает.

1 ответ

Решение

Почему бы вам не использовать другой метод состояния приложения, например func applicationDidEnterBackground(_ application: UIApplication) {}

Помните, что applicationWillResignActive (:) вызывается раньше, чем applicationDidEnterBackground (:)

Другие вопросы по тегам