Вернуться к окну

После того, как программа автоматически отправит пользователя на экран настроек, в левом верхнем углу появится кнопка "back-to-app":

введите описание изображения здесь

При нажатии этой кнопки пользователь возвращается к моему приложению. Однако в этот момент приложение вызывает своего делегата теми же методами, которые вызываются, когда мы возвращаемся из фона:

applicationWillEnterForeground

и

applicationDidBecomeActive

Между тем, мне нужно отличить, вернулся ли пользователь к приложению, нажав эту кнопку "назад к приложению" или просто введя приложение после отправки его на фон любым другим способом. Это возможно?

Ответ 1

Я считаю, что по умолчанию невозможно отличить.

Мое предложение состоит в том, что если вы фокусируетесь на изменение настроек конкретного параметра, просто сравните новое значение настройки со старым в applicationDidBecomeActive. Если есть изменение, вы можете отличить поток. Однако, если изменений нет, вы не можете.

Ответ 2

Разрабатываете ли вы два приложения, которые вы хотите подключить таким образом?

Существует гораздо больше возможностей оставить ваше приложение, а затем описано:

  • Пользователь кратковременно отключает домашнюю кнопку
  • Дважды нажмите кнопку "домой"
  • Пользователь нажимает кнопку питания, пока приложение все еще находится на переднем плане.
  • На устройствах с поддержкой 3D-touch пользователь делает 3D-касание в переднем крае.
  • Пользователь использует описание "Вернуться к приложению", которое вы описали.
  • Пользователь получает уведомление и выбирает его.
  • Пользователь переходит к другому приложению извещения
  • Пользователь открывает центр уведомлений и выполняет действия там
  • Пользователь открывает центр управления и выполняет некоторые действия там
  • Функция совместного использования пользователями или гиперссылка внутри вашего приложения, которая может запускать другие приложения.

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

Помогает, если вы расскажете больше о том, что у вас есть, или о проблеме, которую вы пытаетесь решить.

Ответ 3

Я бы предложил общее решение, связанное с решением аналогичных проблем, обнаруживающих различные параметры запуска (как наше приложение находится в активном состоянии (Running))

Swift 2.3

В AppDelegate

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

if let options = launchOptions{

print(options.description)

//These options will give the difference between launching from background or from pressing the back button

if (launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] != nil) {

//this indicates the app is launched by pressing Push notifications
}else if (launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] != nil) {

//This indicates the app is launched on tapping the local notifications

}else if (launchOptions?[UIApplicationLaunchOptionsSourceApplicationKey] != nil){

//This indicates the App launched from a valid source e.g: on tap of Open App from App Store when your App is installed or directly from home screen

}
}

}

Справка: Документы Apple предоставляют все доступные параметры запуска, которые можно обнаружить

https://developer.apple.com/documentation/uikit/uiapplicationdelegate/launch_options_keys

Использовать методы полномочий делегата, добавив Observers

https://developer.apple.com/documentation/uikit/uiapplicationdelegate

Swift 3 Эквивалент:

    //adding observer

        NotificationCenter.default.addObserver(self,
            selector: #selector(applicationDidBecomeActive),
            name: .UIApplicationDidBecomeActive,
            object: nil)

 //removing observer

        NotificationCenter.default.removeObserver(self,
            name: .UIApplicationDidBecomeActive,
            object: nil)

 // callback

         func applicationDidBecomeActive() {
            // handle event
        }

Похожие вопросы в StackOverFlow, которые мне помогают:

Обнаружить, когда "вернуться в приложение" нажата

Как обнаружить пользователя, возвращаемого вашему приложению в новой функции обратной связи iOS 9?

Обнаружить, было ли приложение запущено/открыто из push-уведомления

Проверка параметров запуска в Swift 3