Ios PKPaymentAuthorizationController不调用委托方法并在“时冻结”;取消“;受压
在我的意图扩展中,我使用Ios PKPaymentAuthorizationController不调用委托方法并在“时冻结”;取消“;受压,ios,swift,applepay,siri,sirikit,Ios,Swift,Applepay,Siri,Sirikit,在我的意图扩展中,我使用PKPaymentAuthorizationController允许用户付款。我在它周围创建了一个包装,如下所示: class ApplePayModalController: NSObject { public typealias AuthorizationHandler = (ApplePayModalController, PKPayment, (PKPaymentAuthorizationResult) -> Void) -> Void p
PKPaymentAuthorizationController
允许用户付款。我在它周围创建了一个包装,如下所示:
class ApplePayModalController: NSObject {
public typealias AuthorizationHandler = (ApplePayModalController, PKPayment, (PKPaymentAuthorizationResult) -> Void) -> Void
private var onAuthorize: AuthorizationHandler?
func present(paymentRequest: PKPaymentRequest, onAuthorize: @escaping AuthorizationHandler) {
let controller = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
self.onAuthorize = onAuthorize
controller.delegate = self
controller.present()
}
}
extension ApplePayModalController: PKPaymentAuthorizationControllerDelegate {
func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
controller.dismiss()
}
func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {
guard let onAuthorize = self.onAuthorize else {
return completion(.init(status: .failure, errors: nil))
}
onAuthorize(self, payment, completion)
}
}
这就是我获取PKPaymentRequest的地方,我用它来演示:
public func createPKRequest(order: Order) -> PKPaymentRequest {
let paymentRequest = Stripe.paymentRequest(withMerchantIdentifier: PaymentRepository.merchantIdentifier, country: "US", currency: "USD")
paymentRequest.paymentSummaryItems = [
PKPaymentSummaryItem(label: "HSCO", amount: 1.00),
PKPaymentSummaryItem(label: "Phil", amount: NSDecimalNumber(value: Double(order.price) / 100))
]
paymentRequest.shippingType = .storePickup
paymentRequest.requiredBillingContactFields = [PKContactField.postalAddress]
return paymentRequest
}
但是,当我介绍控制器时,我遇到以下问题:
这一切都是在iPhone X、iOS 12.1.4上运行的,在沙箱模式下使用Apple Pay。确保您的
ApplePayModalController
实例生命周期长于您的支付过程。尝试使用静态ApplePayModalController
singleton。确保您的ApplePayModalController
实例生命周期长于您的支付流程。尝试使用静态ApplePayModalController
singleton。你明白了吗?你明白了吗?