【问题标题】:How can I increase the failure timeout of an apple Pay operation?如何增加 Apple Pay 操作的失败超时时间?
【发布时间】:2020-02-18 05:35:00
【问题描述】:

在当前实施中,我的付款在某些情况下需要很长时间。用户经常会遇到诸如“Apple pay 未完成”之类的错误。 question 说,在 iOS 11 中,这发生在 15-20 秒后,我可以增加这个时间,如果可以,如何?如果在这段时间内支付有时间处理,则apple pay中的支付成功。

【问题讨论】:

  • 你不能,你应该改善你的付款时间

标签: ios applepay


【解决方案1】:

不幸的是,根据我所知道的和我发现的,这是不可能的, onpaymentauthorized 方法必须在 30 秒内被调用,否则付款将被拒绝。参考这个,大多数情况下你最多只有 30 秒。

https://developer.apple.com/documentation/apple_pay_on_the_web/applepaysession/1778020-onpaymentauthorized

【讨论】:

  • 非常感谢,我们会优化付款流程!
【解决方案2】:

虽然无法更改失败超时,但仍有一种解决方法可以避免出现“Apple pay 未完成”消息,例如,处理支付的 API 调用已延长超时。 (在撰写此答案时,在 iOS 13 上,ApplePay 对话框将在大约 30 秒后自行超时)。

诀窍是设置一个一次性计时器,它会在 ApplePay 决定放弃之前关闭它。当然,您的应用程序必须始终在购买过程结束时向用户提供适当的反馈(是成功还是失败),因为 ApplePay 对话框在您关闭后将无法显示任何内容。

示例计时器:

_ = Timer.scheduledTimer(withTimeInterval: 25, repeats: false) { _ in
    guard self.applePayBeingProcessed == true else { return }
    if let applePayVC = AppUtil.shared.topMostController() as? PKPaymentAuthorizationViewController {
        self.applePayHasTimeouted = true
        applePayVC.dismiss(animated: true)
    }
}

*applePayBeingProcessedpaymentAuthorizationViewController(_:didAuthorizePayment:handler:) 中设置为true,并在调用handler(PKPaymentAuthorizationResult(status: paymentStatus, errors: [error])) 后立即设置回false - 这样当ApplePay 通过@ 以正常方式解除时,计时器调用的例程将被跳过987654328@

** applePayHasTimeouted 稍后会在您的支付处理 API 调用完成时检查,如果 true 意味着我们需要执行通常应该在 paymentAuthorizationViewControllerDidFinish(_:) 内部执行的操作(因为后者永远不会手动关闭 ApplePay 对话框后调用)

*** topMostController() 方法从层次结构的顶部找到控制器。如何做到这一点超出了当前问题的范围,有很多方法可以做到这一点,我最喜欢的是this answer

【讨论】:

    猜你喜欢
    • 2021-02-02
    • 2019-03-13
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多