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

TouchID вызывает applicationWillResignActive и applicationDidBecomeActive

Мне интересно, Apple ли это, что эти методы жизненного цикла призваны использовать функции TouchID.

Есть ли возможность проверить, вызывает ли процесс touchID эти методы (я хочу избежать таких вещей, как BOOL в делетете приложения, который установлен, если в данный момент отображается вход touchID).

ш

4b9b3361

Ответ 1

Я предполагаю, что проблема связана с тем, что у вас есть код в applicationWillResignActive и applicationDidBecomeActive, который влияет на контроллер вида, который запрашивает проверку идентификатора Touch ID, и что он устанавливает сложный цикл.

Вам нужно переместить эти вызовы на applicationDidEnterBackground и applicationWillEnterForeground, потому что они не вызывается, когда вызывается механизм Touch ID.

Чтобы объяснить последовательность, когда ваше приложение запускается, выполняется следующая последовательность:

  • applicationDidBecomeActive
  • .. другие вещи, которые делает ваше приложение.
  • Ваше приложение вызывает Touch ID, который запускает:
  • applicationWillResignActive

... Ваше приложение отключено до тех пор, пока пользователь не проверит отпечаток пальца (сбой или успешно)...

  1. applicationDidBecomeActive

Если у вас есть код в applicationDidBecomeActive -or- applicationWillResignActive, который влияет на Touch ID, вы создадите бесконечный цикл или, что еще хуже, вы создадите код, который пронизан флагами и особыми случаями.

Вместо этого вы должны вызвать Touch ID в двух случаях:

  • Когда ваше приложение запускается (обычно в didFinishLaunchingWithOptions)

  • Когда вызывается ваше приложение applicationWillEnterForeground.

Ответ 2

Вы можете создать статический bool в своем login script, который вы можете проверить из AppDelegate!

static var isShowingTouchID = false

Затем перед вашим вызовом context.evaluatePolicy вы можете установить его значение true, а в функции обратного вызова установите значение false. Я полагаю, что вы используете аргумент reply для установки обратного вызова.

Затем в AppDelegate проверьте состояние этого bool.

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

Я даже попробовал переопределить viewDidDisappear в моем логине script, но я быстро обнаружил, что его не вызывали, даже когда я нажал "Отмена" в подсказке идентификатора касания.

Если у кого-то есть лучшее решение, я бы с удовольствием узнал.