首页 > 解决方案 > 将 Xcode 更新到 10.4 版后 Apple Pay 无法正常工作

问题描述

Apple Pay 在模拟器中运行良好,但在将 Xcode 升级到 10.4 后,它停止工作。

  1. 出现 Apple Pay 弹出窗口。
  2. 点击使用密码支付后,它隐藏而不验证支付。

  3. 该方法- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion {}未被调用。

代码:

NSString *merchantIdentifier = [STPPaymentConfiguration sharedConfiguration].appleMerchantIdentifier;
PKPaymentRequest *paymentRequest = [Stripe paymentRequestWithMerchantIdentifier:merchantIdentifier country:@"US" currency:currencyCode];
paymentRequest.paymentSummaryItems = @[
   [PKPaymentSummaryItem summaryItemWithLabel:@"Fancy Hat" amount:[NSDecimalNumber decimalNumberWithString:amount]],
   // The final line should represent your company;
   // it'll be prepended with the word "Pay" (i.e. "Pay iHats, Inc $50")
   [PKPaymentSummaryItem summaryItemWithLabel:@"iHats, Inc" amount:[NSDecimalNumber decimalNumberWithString:amount]],
];

if ([Stripe canSubmitPaymentRequest:paymentRequest]) {
    // Setup payment authorization view controller
    PKPaymentAuthorizationViewController *paymentAuthorizationViewController = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:paymentRequest];
    paymentAuthorizationViewController.delegate = self;

    // Present payment authorization view controller
    FlutterViewController* controller = (FlutterViewController* )[[UIApplication sharedApplication].keyWindow rootViewController];
    [controller presentViewController:paymentAuthorizationViewController animated:YES completion:nil];
}

标签: iosobjective-cstripe-paymentsapplepay

解决方案


他们确实更改了签名,因此有一个新方法可以调用 iOS11+,而 iOS9 和 iOS10 仍然需要旧方法:

 /// for iOS 9 and iOS 10
 func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController,
                          didAuthorizePayment payment: PKPayment,
                                           completion: @escaping (PKPaymentAuthorizationStatus) -> Void) {
    ...
 }

 @available(iOS 11.0, *)
 func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController,
                          didAuthorizePayment payment: PKPayment,
                                              handler: @escaping (PKPaymentAuthorizationResult) -> Void) {
    ...
 }

它似乎在 12.4 模拟器中不起作用。您需要在真实设备上进行测试。具有以前 iOS 的模拟器似乎可以正常工作(iOS10 适合我)。这个问题讨论了模拟器问题:ApplePay `paymentAuthorizationViewController:didAuthorizePayment:handler:` not called in Xcode Simulator 10.3


推荐阅读