ios - 将 Xcode 更新到 10.4 版后 Apple Pay 无法正常工作
问题描述
Apple Pay 在模拟器中运行良好,但在将 Xcode 升级到 10.4 后,它停止工作。
- 出现 Apple Pay 弹出窗口。
点击使用密码支付后,它隐藏而不验证支付。
该方法
- (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];
}
解决方案
他们确实更改了签名,因此有一个新方法可以调用 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
推荐阅读
- java - Springboot gradle 应用程序无法在 Heroku 上运行,无法访问 jarfile
- go - 如何打印与给定输入相关的完整输出行?
- javascript - 编写一个函数来获取客户,只需传递 addressid 并读取所有客户?参数(addressId)
- sql - 跨多个数据库搜索表名 SQL SERVER 2019
- c++ - 从旋转矩阵(相机/标记)获取方向角
- .net-5 - 使用 SelectPdf ArgumentNullException 将 Html 转换为 Pdf
- redis - 执行 Lua 脚本,通过 stackexchange.redis 删除与 Redis DB 上的模式匹配的所有键
- python - 如何在 Windows 上的 PyPy 中安装 Numpy
- server - 为什么 Xampp 服务器提供内部服务器错误
- javascript - 如何安排每个季度的 api 调用?