【发布时间】:2020-11-10 14:21:35
【问题描述】:
我为 Apple Pay 功能创建了一个基类。但是该基类由 NSObject 继承。我只在这个类中创建了支付授权视图控制器,并将它的委托分配给自己。现在它没有调用 pkpaymentauthorizationviewcontrollerdelegate 的委托方法。如何解决这种情况并在基类中只实现一次委托方法并在应用程序的其他地方重用它。请帮忙。
class ApplePay: NSObject {
var applePayItem: PKPaymentSummaryItem?
var baseVC: UIViewController?
let payNetworks = [PKPaymentNetwork.masterCard, .visa, .amex, .discover]
init(forItem: Product) {
applePayItem = PKPaymentSummaryItem.init(label: forItem.name ?? "",
amount: NSDecimalNumber(value: forItem.price ?? 0))
}
func initiatePayment(complete: @escaping (Bool) -> Void) {
if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: payNetworks) {
let request = PKPaymentRequest()
request.currencyCode = "USD"
request.countryCode = "US"
request.merchantIdentifier = <*identifier from my development account*>
request.merchantCapabilities = PKMerchantCapability.capability3DS
request.supportedNetworks = payNetworks
request.paymentSummaryItems = [applePayItem!]
guard let paymentVC = PKPaymentAuthorizationViewController(paymentRequest: request) else {
return
}
baseVC = UIApplication.shared.keyWindow?.rootViewController?.children.last
baseVC?.present(paymentVC, animated: true, completion: nil)
paymentVC.delegate = self
complete(true)
} else {
complete(false)
CaAssembly.resolve(CaAlertProtocol.self)!.showAlert(CaConstant.alertTitles.addCardApplePay, dismiss: {})
}
}
func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
controller.dismiss {
}
func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
controller.dismiss(animated: true, completion: nil)
}
}
extension ApplePay: PKPaymentAuthorizationViewControllerDelegate,
PKPaymentAuthorizationControllerDelegate {
@available(iOS 11.0, *)
func paymentAuthorizationViewController(_ controller:
PKPaymentAuthorizationViewController,
didAuthorizePayment payment: PKPayment,
handler completion: @escaping
(PKPaymentAuthorizationResult) -> Void) {
print(“PKPaymentAuthorizationViewController didAuthorizePayment” )
}
}
【问题讨论】:
-
您能分享一下您尝试过的方法以及您预计会导致意外功能的原因吗?
-
暂时我正在考虑让 ApplePay 类回到继承 UIViewController 并使其背景透明,然后调用在 viewdidappear 上呈现 Apple Pay 授权 VC .... 如果可行,那么它将是对我来说很好。
-
只是为了更新......我能够通过 UIViewController 继承的基类来实现它......使用库 [github.com/IcaliaLabs/Presentr] 使用它我将基类呈现为具有维度的模态(w:0, h:0) 并在其 viewdidappear 上启动 Apple Pay