Подтвердить что ты не робот

Можем ли мы обнаружить, прошел ли пользователь через домашнюю кнопку или кнопку блокировки, не прослушивая уведомления darwin?

Недавно я отправил новый файл в хранилище приложений и отправил его для просмотра, и он был немедленно отклонен со следующим сообщением. "Неподдерживаемая операция - приложениям запрещается прослушивать уведомления о блокировке устройства". После некоторого рытья я обнаружил, что мы не можем использовать "com.apple.springboard.lockstate", чтобы выяснить состояние блокировки.

По сути, мое приложение должно знать, как пользователь покинул мое приложение. Было ли это нажатием кнопки "Дом", кнопкой блокировки, оставлением приложения, нажатием другого уведомления о приложении и т.д. Есть ли способ достичь этого? Я начал расследование, чтобы проверить, будет ли мое приложение работать в фоновом режиме, возможно, мы могли бы проверить состояние приложения, чтобы понять это. Что, насколько я понял, мне было интересно, есть ли у кого-нибудь больше понимания этого

4b9b3361

Ответ 1

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

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

Внутри этого делегата (И он будет работать только при вызове в этом делетете)

func applicationDidEnterBackground(_ application: UIApplication) {

}

Вы можете назвать этот маленький фрагмент здесь:

func DidUserPressLockButton() -> Bool {
    let oldBrightness = UIScreen.main.brightness
    UIScreen.main.brightness = oldBrightness + (oldBrightness <= 0.01 ? (0.01) : (-0.01))
    return oldBrightness != UIScreen.main.brightness
}

Применение:

func applicationDidEnterBackground(_ application: UIApplication) {
    if (DidUserPressLockButton()) {
        //User pressed lock button
    } else {
        //user pressed home button
    }
}

ОБЪЯСНЕНИЕ:

Кажется, что яблоко позволяет вам изменять яркость экрана от applicationDidEnterBackground, когда пользователь покинул кнопку блокировки, а не кнопку "домой". Поэтому идея состоит в том, чтобы изменить яркость экрана с минимальной суммой и проверить, можно ли ее изменить. Это кажется довольно хакированным, но я слышал, что это действительно работает по назначению. Что касается тестирования, похоже, он работает в 100% случаев. Я не мог найти никаких проблем с этим, кроме пользователей, которые действительно хотят изменить яркость экрана. Я надеюсь, что кто-то еще найдет что-то менее хакерское и более конкретное.

Ответ 2

Это невозможно сделать таким образом, что Apple примет его другими словами, любой ключ уведомления, явно не документированный Apple, считается частным API.

И это правда com.apple.springboard.lockstate больше не может быть использовано и считается закрытым.

У вас есть несколько способов определить, оставил ли пользователь приложение:

applicationWillResignActive:

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

applicationWillEnterForeground:

Вызывается при переходе из состояния фона

applicationDidEnterBackground:

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

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