2016-07-18 2 views
4

は以下のまわりで私の頭を取得しよう:シリキット:タッチイドと増加セキュリティ

  1. https://developer.apple.com/videos/play/wwdc2016/225/ はsendPayments意図がデフォルトIntentsRestrictedWhileLockedであることを言及し、私たちは、セキュリティアップする場合は、ユーザーが必要とするので、 Touch Id(ローカル認証)で承認するには、どうすればよいでしょうか?これは、デバイスがロック/ロック解除されていない場合でも必要です。私は拡張機能が何らかの方法で '確認'段階でローカル認証UIを表示する必要があると仮定していますか?

  2. また、セキュリティを強化することができますが、それを実行するメカニズムがIntentsRestrictedWhileLocked拡張属性のみの場合は確認が必要ですか?または、タッチID認証が必要であることを指定する方法がありますか?

+0

偉大な質問ですが、私は同様のユースケースに取り組んでいます.. – satheeshwaran

+0

@inforeqd私の答えを見て、それが助けられたらそれを受け入れてください。 :) ありがとうございました。 – Reem

答えて

0

IntentsRestrictedWhileLockedに指定されたインテントがリストされている場合は、画面がロックされているときにSiriによって呼び出すことはできません。これは、デバイスがパスコードまたはタッチIDのいずれかによってロック解除されている場合にのみ呼び出すことができます。私が知る限り、デバイスがどのようにロック解除されているかを区別する方法はありません。

+0

私はpt#2を参照して、これが可能かどうかを知っていますか? – inforeqd

1

ローカル認証を呼び出すための支払い拡張を送信するための組み込みの方法があると思われます。あなたがタッチID認証をしたいと言うためにplistのキーを指定するのと同じように?私はそれが事実だとは思わない。

私が作業している送付状の延長については、確認フェーズでLAContextをインスタンス化し、canEvaluatePolicy(_:error:)evaluatePolicy(_:localizedReason:reply:)の両方を呼び出しています。ローカル認証がサポートされていると言われると、拡張機能でトリガできることを意味し、UIはSiriによって表示されます。両方の質問に答えるために

3

、はいあなたはタッチIDでのお支払いのためのセキュリティを高めることができ、ここで私はSendPaymentIntentHandler.swiftに以下の機能を追加し、私はAppleのサンプルコードhereでそれを実装方法は次のとおりです。

func authenticate(successAuth: @escaping() -> Void, failure: @escaping (NSError?) -> Void) { 
    // 1. Create a authentication context 
    let authenticationContext = LAContext() 
    var error:NSError? 
    guard authenticationContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { 
     failure(error) 
     return 
    } 
    // 3. Check the fingerprint 
    authenticationContext.evaluatePolicy(
     .deviceOwnerAuthenticationWithBiometrics, 
     localizedReason: "Unlock to send the money", 
     reply: { [unowned self] (success, error) -> Void in 

      if(success) { 
       successAuth() 

      }else { 
       let message = self.errorMessageForLAErrorCode(errorCode: (error! as NSError).code) 
       print(message) 
       failure(error! as NSError) 
      } 

     }) 

} 

func errorMessageForLAErrorCode(errorCode:Int) -> String{ 

    var message = "" 

    switch errorCode { 

    case LAError.appCancel.rawValue: 
     message = "Authentication was cancelled by application" 

    case LAError.authenticationFailed.rawValue: 
     message = "The user failed to provide valid credentials" 

    case LAError.invalidContext.rawValue: 
     message = "The context is invalid" 

    case LAError.passcodeNotSet.rawValue: 
     message = "Passcode is not set on the device" 

    case LAError.systemCancel.rawValue: 
     message = "Authentication was cancelled by the system" 

    case LAError.touchIDLockout.rawValue: 
     message = "Too many failed attempts." 

    case LAError.touchIDNotAvailable.rawValue: 
     message = "TouchID is not available on the device" 

    case LAError.userCancel.rawValue: 
     message = "The user did cancel" 

    case LAError.userFallback.rawValue: 
     message = "The user chose to use the fallback" 

    default: 
     message = "Did not find error code on LAError object" 

    } 

    return message 

} 

そして、 handleメソッドでfunction authenticateと呼ばれる結果、私のアプリは支払いを確認した後にTouch ID認証を要求し、ユーザーが認証した後、支払いを正常に送信します。