ios - 使用 Sirikit 提高支付的安全性

标签 ios swift siri sirikit

我正在尝试提高与 Siri 集成的支付应用程序的安全性。 我使用了此 link 中的 Apple 示例代码, 我调整了以下内容以在执行支付之前实现触摸 ID 身份验证:
(新增touch ID认证函数“authenticate”,在handle函数中调用)

 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 说:“抱歉,你需要在应用程序中继续”

最佳答案

经过仔细调试,我发现只有Siri提示最后一个收款人或最后一个货币金额时才会出现问题,所以我在resolvePayee和resolveCurrencyAmount中注释了这些部分,流程完美运行!确认付款后,它会要求进行触摸 ID 身份验证,然后发送付款。谢谢大家!

关于ios - 使用 Sirikit 提高支付的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40069402/

相关文章:

swift - 为什么字典的时间复杂度是 O(n) 而不是 O(1)

swift - 下面这段代码中指定初始化和便利初始化有什么区别

ios - SendBird - iOS : Cannot receive camera photo, 但可以接收存储的图像

ios - 如何使用 IN sql 子句查询 coredata?

ios - 如何在 View Controller 之间正确进行分隔

ios - 处理添加任务意图,siri kit

performance - 语音识别,例如 Siri

ios - MKMapView 不改变区域

ios - 向下转换/子类 UIViewController 用于单元测试中的模拟

iOS Siri 添加自定义词汇