Повышение безопасности платежей с помощью Sirikit

Я пытаюсь повысить безопасность своего платежного приложения, которое интегрировано с Siri. Я использовал пример кода Apple из этого ссылка , и я изменил следующее, чтобы реализовать аутентификацию с помощью Touch ID перед выполнением платежа:
(Добавил функцию "аутентифицировать" для аутентификации с помощью Touch ID и вызвал ее в функция ручки)

 func handle(sendPayment intent: INSendPaymentIntent, completion: @escaping (INSendPaymentIntentResponse) -> Void) {
    self.authenticate(successAuth: {

        guard let payee = intent.payee,
            let payeeHandle = payee.personHandle,
            let currencyAmount = intent.currencyAmount,
            let amount = currencyAmount.amount,
            let currencyCode = currencyAmount.currencyCode
            else {
                completion(INSendPaymentIntentResponse(code: .failure, userActivity: nil))
                return
        }

        self.contactLookup.lookup(emailAddress: payeeHandle.value) { contact in
            guard let contact = contact else {
                completion(INSendPaymentIntentResponse(code: .failure, userActivity: nil))
                return
            }

            let payment = Payment(contact: contact, amount: amount, currencyCode: currencyCode)

            self.paymentProvider.send(payment) { success, _, _ in
                guard success else {
                    completion(INSendPaymentIntentResponse(code: .failure, userActivity: nil))
                    return
                }

                let response = INSendPaymentIntentResponse(code: .success, userActivity: nil)
                response.paymentRecord = self.makePaymentRecord(for: intent)

                completion(response)
            }
        }
        }) { (error) in
            print("error in authentication")
            completion(INSendPaymentIntentResponse(code: .failure, userActivity: nil))
            return
    }

}

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)
            }

        })
    successAuth()
}

Проблема в том, что Siri говорит: «Извините, вам нужно продолжить работу в приложении».


person Reem    schedule 16.10.2016    source источник
comment
Я думаю, что вы столкнулись с той же проблемой, что и я stackoverflow.com/questions/39686056/   -  person Pratik Goswami    schedule 20.10.2016


Ответы (1)


После тщательной отладки я обнаружил, что проблема возникает только тогда, когда Siri предлагает последнего получателя платежа или последнюю сумму в валюте, поэтому я прокомментировал эти части в resolvePayee и resolveCurrencyAmount, и процесс работал отлично! После подтверждения платежа он запрашивает аутентификацию с помощью Touch ID, а затем отправляет платеж. Спасибо ребята!

person Reem    schedule 21.10.2016
comment
Что вы имеете в виду, говоря, что Siri предлагает последнего получателя платежа или последнюю сумму в валюте? - person Enrique; 19.05.2017