Можно ли программно отменить диалог оповещения TouchID после вызова LAContext.evaluatePolicy
? Если да: как?
IOS автоматически отменит диалог идентификации TouchID
Ответ 1
Не каждый API Apple публикует его в документации на developer.apple.com(или в Xcode docs viewer). API расширяет список открытых API, поэтому все, что вы видите там, находится в файлах заголовков (см. LocalAuthentication/LAContext.h
) и интерфейсах Swift, сгенерированных из этих заголовков. И все, что в заголовках является общедоступным API, поэтому вы можете называть его.
Иногда (но не всегда) недокументированные API имеют достойные комментарии в заголовке, объясняющие, как их использовать... к счастью, LAContext.invalidate()
является одним из следующих:
/// Invalidates the context.
///
/// @discussion The context is invalidated automatically when it is (auto)released. This method
/// allows invalidating it manually while it is still in scope.
///
/// Invalidation terminates any existing policy evaluation and the respective call will
/// fail with LAErrorAppCancel. After the context has been invalidated, it can not be
/// used for policy evaluation and an attempt to do so will fail with LAErrorInvalidContext.
///
/// Invalidating a context that has been already invalidated has no effect.
@available(iOS 9.0, *)
public func invalidate()
В действительности, он выглядит как вызов invalidate()
, в то время как предупреждение Touch ID видимо, должно отклонить его. (Я не пробовал себя.)
Обновление iOS 11: обратите внимание, что на устройствах с идентификатором лица вместо Touch ID пользовательский интерфейс alert/HUD, который появляется, когда вы вызываете LAContext.evaluatePolicy
, не требует или не разрешает взаимодействие, а также удаляет себя при успешной аутентификации. Теоретически вызов invalidate
все еще отклоняет его (или последующее, фактически интерактивное предупреждение, которое появляется, если Face ID не идентифицирует пользователя).
Но небезопасно предположить, что на всех возможных устройствах и методах проверки подлинности у вас всегда будет достаточно времени для отмены проверки LAContext
после запроса.