【问题标题】:Apple Pay not working after update Xcode to version 10.4将 Xcode 更新到 10.4 版后 Apple Pay 无法正常工作
【发布时间】:2019-12-26 18:36:48
【问题描述】:

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];
}

【问题讨论】:

  • 更新到 Xcode 10.3 后出现完全相同的问题。注意到didAuthorizePayment 方法的签名已更改为func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void),并标记为iOS11+。但是更改为新签名对我没有帮助。

标签: ios objective-c stripe-payments applepay


【解决方案1】:

他们确实更改了签名,因此有一个新方法可以调用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2017-10-20
    • 2011-11-23
    • 2022-08-02
    • 2023-03-12
    • 2013-05-28
    • 2019-08-17
    相关资源
    最近更新 更多