2016-07-18 10 views
4

Пытаясь получить мою голову вокруг ниже:Sirikit: Id касания и повышение безопасности

  1. https://developer.apple.com/videos/play/wwdc2016/225/ упоминает, что sendPayments намерение по умолчанию IntentsRestrictedWhileLocked, но если мы хотим, чтобы на безопасность, так что потребности пользователей утвердить с помощью идентификатора Touch (локальная аутентификация), как это сделать? Это понадобится как при блокировке/разблокировке устройства. Я предполагаю, что расширение должно каким-то образом отобразить локальный аутентификационный интерфейс на этапе «Подтвердить»?

  2. Также они упоминают, что безопасность может быть увеличена, но просто нужно подтверждение, если механизм ее выполнения - это только IntentsRestrictedWhileLocked extension attribute? или есть способ указать, что требуется идентификация идентификатора контакта?

+0

Большой вопрос, я работаю над аналогичным вариантом использования. – satheeshwaran

+0

@inforeqd, пожалуйста, см. Мой ответ и принять его, если это поможет. :) Спасибо. – Reem

ответ

0

Если указанное намерение указано в IntentsRestrictedWhileLocked, оно не может быть вызвано Siri, когда экран заблокирован. Его можно вызывать только тогда, когда устройство разблокируется с помощью кода доступа или сенсорного идентификатора. Насколько я знаю, нет способа отличить, как устройство разблокировано.

+0

Я вижу .. ссылаясь на мой pt # 2, вы знаете, что это возможно и как? – inforeqd

1

Похоже, вы ожидаете наличия встроенного способа отправки расширений платежей для вызова локальной аутентификации. Как, может быть, указать ключ в plist, чтобы сказать, что вы хотите аутентификацию идентификатора доступа? Я не думаю, что это так.

Для продолжения отправки платежей, над которым я работаю, мы создаем LAContext в фазе подтверждения и вызываем как canEvaluatePolicy(_:error:), так и evaluatePolicy(_:localizedReason:reply:). Когда они говорят, что локальная аутентификация поддерживается, я думаю, они просто означают, что вы можете запустить ее в своем расширении, и пользовательский интерфейс будет отображаться Siri.

3

Чтобы ответить на оба вопроса, да, вы можете повысить безопасность для оплаты с сенсорным ID, вот как я реализовал это на примере кода компании Apple here, я добавил следующие функции SendPaymentIntentHandler.swift:

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. В результате мое приложение попросило аутентификацию Touch ID после подтверждения платежа, а затем после того, как пользователь аутентифицировал себя, он успешно отправил платеж.