2017-09-15 12 views
4

iPhone Xが導入され、FaceIDが導入され、電話のロックを解除してApple Payを作成します。新しいiPhone XのFaceIDにアクセスするには?

APIにアクセスできますか?

最後にTouchIDが開発者にリリースされるまで待つ必要があります。

おそらくいつものデータラインはありますか?

+1

TouchIDに使用するのと同じAPIを使用して、バイオメトリック認証をリクエストします。 iPhone Xでは、FaceIDを使用します。他のデバイスではTouchIDを使用します – Paulw11

答えて

7

実際にXcode 9では、同じ場所にTouchID機能が既に用意されています。例えば、Look at LocalAuthentication -> LAContext ->LABiometryType。あなたは、より高いレベルでのドキュメントを見てLAContext場合

、新しいAPIのは、現在、それらの「ベータ」ラベル(おそらくこれらは、すぐにXcodeの9 & iOS版11が正式にリリースされているように除去されます)を見つけることができます。

+0

これを実際のデバイスで使用することはできますか?シミュレータ上で、それは私のために正常に動作します。しかし、iOS 11を搭載したデバイスでは、次のようになります。 - [LAContext biometryType]:認識できないセレクタがインスタンスに送信されました。 – r3c0d3

+0

下記の "answer" @ r3c0d3(コメントでなければなりません)をご覧ください: "Xcode 9.1 beta(9B37)がFace IDをサポートしています。" –

+1

ありがとう、私は私の質問でより明確にすべきだった。私はFace IDがXcode 9.1 beta(9B37)のシミュレータでうまく動作しているのを見ています。しかし、TouchIDのみを持つiOS 11.0デバイスで構築した場合、LAContext()を呼び出すと、biometryTypeはそれが認識されないセレクタだと言います。 biometryTypeを使用して、さまざまな生体認証機能に対して異なるUIを提示したいと考えています。 – r3c0d3

6

あり、それぞれが物語の一部だけを伝えることをコメントし、ここに答えがあり、それでは、それらを一緒に持参しましょう:


としては、タッチIDを認証するためのAPI、by @Paulw11 in commentsを指摘 - LAContextcanEvaluatePolicyをチェックします可用性のために、実際に認証を要求するevaluatePolicy - Face IDと全く同じ働きをします。これらのAPIはすべてTouch IDというだけで実際には「バイオメトリクス」とは言わないことに気付くかもしれません... AppleがiOS 8でそのAPIをリリースしたときとほぼ同じように思えます。

アップルのCraig Federighiが確認済みこれはa recent appearance on The Talk Show podcastです。彼とiPhone Xを搭載している他のアップルの従業員は、これらのAPIを使用する既存のアプリ(銀行アプリ、航空会社アプリなど)を実行しており、Face IDで「仕事をしている」と言います。同じAPI呼び出しで新しいUIが自動的に呼び出されますが、ユーザーが既に電話を見ているために何もする必要がないため、通常はより高速です。


さて、@MichaelDautermann’s answerノートとして、顔IDからタッチIDを区別するための新しいAPIもありますbiometryTypeは現在のデバイスがサポートしているバイオメトリクスのどのようなものかを示しますLAContext

Touch IDとFace IDの両方を呼び出すために同じAPIが機能する場合は、なぜ新しいものもありますか?それはあなたのアプリがあなたのUIでそれについて話すことができるようにです。次回にパスワードの代わりにタッチIDを使用するかどうかを尋ねると、銀行とクレジットカードとパスワードマネージャーとあなたが今まで使ったことのないアプリを考えてみましょう。そのすべてが、そのアプリの開発者のカスタムUIです。そのため、この新しいAPIを使用して、現在の端末に応じてUIが「Touch IDを使用する」または「Face IDを使用する」と正しく言うようにする必要があります。

+0

ええと...これは(少なくともシミュレータでは)うまくいかないようです。私がSimIDでTouchIDまたはFaceIDのいずれかを登録すると、何も起こっていないかのようになります。私は行方不明のトリックですか? –

4

Xcode 9.0.1および9.1 beta(9B37)はFace IDをサポートしています。

Xcode 9.0 GMではAPIが機能しませんでした。

また、biometryType機能がクラッシュする原因となるiOS 11.0.0(iOS 11の最初のパブリックバージョン)に影響するバグがあります。 AppleはXcodeの9.2でLABiometryType enum名を変更し、

if #available(iOS 11.0.1, *) {...} 

をAND:したがって、あなたは、このチェックを使用する必要があります。

+1

私はこれを答えとして提供しました。なぜなら、APIがいつ利用可能なのかという疑問があるからです。答えは「はい、AppleがXcode 9.1で修正したばかりのAPIにアクセスでき、昨日9.0.1で昨日APIにアクセスできる」というものです。選択された答えは、APIがXcode 9.0で動作していることを示しています。それは動作しません。私は最初の手の経験とポストからAppleのディスカッション掲示板でこれを知っています。何もしない壊れたAPIを持つことはかなり役に立たない。 – Daniel

2

私はXcodeの9.1ベータ、This code作品を使用している場合はバグがXcodeの9

用シミュレータでありますことを確認することができます

let authenticationContext = LAContext() 
var error: NSError? = nil 

if #available(iOS 11.0, *) { 
    if authenticationContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) { 
     let bioType = authenticationContext.biometryType 
     if bioType == .typeFaceID { 
      touchIDButton.setImage(UIImage(named:"FaceIDLogo"), for: UIControlState.normal) 
      touchIDButton.setImage(UIImage(named:"FaceIDLogo-Highlight"), for: UIControlState.highlighted) 
     } 
    } 
} 

私はそれをチェックする前にLAContext.canEvaluatePolicyを実行することが重要だということに注意してくださいバイオメトリックタイプ。

+1

リリースされたXcode 9.2ベータ版では、iOS 11.2では 'LABiometryType'列挙型の値が' faceID'と 'touchID'に変更されています。 – tfrank377

+0

@ tfrank377もちろん。 > :(ヘッドアップに感謝します。 –

2

スウィフト4

enum BioType { 
case kFace 
case kTouch 
case kNone 
} 

func checkForBiometry() -> BioType { 
    let context = LAContext() 

       if #available(iOS 11.0, *),context.responds(to: #selector(getter: LAContext.biometryType)) { 
      if context.biometryType == .typeFaceID { 

       return .kFace 
     } 
     return .kTouch 
    } 
    return .kNone 
} 
} 

編集:iOS搭載11.0.0デバイスだけに-[LAContext biometryType]: unrecognized selectorとアプリがクラッシュするなど

追加responds(to: #selector)チェック。

関連する問題