2015-12-14 8 views
10

LAContext.evaluatePolicy呼び出し後にTouchID警告ダイアログをプログラムでキャンセルすることはできますか?はいの場合:どのように?iOSでプログラムでTouchID認証ダイアログをキャンセルする

+0

質問は明確ではありません。何を達成しようとしていますか? – Vijay

+0

'LAContext.evaluatePolicy'は、TouchIDの入力を促す警告ダイアログを開きます。私は自分のコードからダイアログを閉じたいと思う。例えばユーザーが何もしなかった場合、数秒後に。 –

+0

興味深いことに、彼らは "AppCancel"エラーコードを追加しましたが、私はドキュメントでそれをキャンセルするためのAPIを見ることができません。 iOS 9.0のdiffには 'LAContext invalidate'メソッドがありますが、それが公開されているとは思えません。 – jcaron

答えて

12

Appleが発行するすべてのAPIが、developer.apple.com(またはXcodeのドキュメントビューア)のドキュメントに記載されているわけではありません。 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() 

確かに、それはタッチIDながらinvalidate()を呼び出すようになります。アラートが表示されている場合は、それを却下してください。 (私は自分自身を試していない。)


iOSの11更新:ノート代わりにタッチIDのフェイスIDを持つデバイス上で、あなたがLAContext.evaluatePolicyを呼び出すときに表示される警告/ HUD-のようなUIがないことを対話を要求または許可し、認証が成功するとそれ自体を終了します。理論的には、invalidateコールはまだそれを却下します(または、顔IDがユーザーを識別しない場合に表示されるフォローアップ、実際にはインタラクティブな警告)。

しかし、すべての可能なデバイスと認証方法では、依頼した後にいつでもLAContext認証をキャンセルするのに十分な時間があると仮定するのは賢明ではないかもしれません。

+0

期待どおりに動作します。 :) –

+0

それは本当にクールです。良い発見! –

+0

私は 'invalidate()'を使って解読できません。私は間違って何をしていますか? :) – hfossli

関連する問題