繁体   English   中英

iOS ApplePay PKPaymentAuthorizationViewController 未出现在 Xcode11/iOS 13 中

[英]iOS ApplePay PKPaymentAuthorizationViewController not appearing in Xcode11/iOS 13

我们的应用程序已经实施了 ApplePay 多年。 就在最近,我按下按钮触发它,只发现来自PKPaymentAuthorizationViewController的工资单没有出现。 它不会在沙箱(即连接到Xcode 的模拟器或设备)环境中向上滑动,但放置断点表明它正在创建成功。 自从我对此进行测试已经有一段时间了,但我怀疑 Xcode11 或 iOS 13 会发生一些变化。

我的代码是非常标准的 Apple Pay,但发布在下面。

        let item = PKPaymentSummaryItem()
        item.label = "Our Label"
        let price = NSDecimalNumber(mantissa: UInt64(totalPrice), exponent: -2, isNegative: false)
        item.amount = price

        items.append(item)

        request.paymentSummaryItems = items

        if let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request) {
            applePayController.delegate = self
            present(applePayController, animated: true)
        }

我也面临同样的问题,Apple Pay 突然停止在我们的应用程序中工作。 我们也已经支持这一点至少半年了。

使用最新的 Xcode(Xcode 11.2,Beta 2 (11B44)),它似乎又可以工作了。

我猜那是一个 Xcode 错误。 即使它没有在 Xcode 的Xcode 11.1Xcode 11.2 beta 2的发行说明中列出。

我已将您的代码段粘贴到我的应用程序中,该应用程序使用 ApplePay,并且我在测试设备上运行它,该设备是沙盒并启用了 ApplePay,但 ApplePay 按钮不起作用。

我发现这很令人惊讶。

当您查看 PKPaymentSummaryItem 的文档时,它只有两个初始化程序:

 init(label: String, amount: NSDecimalNumber) init(label: String, amount: NSDecimalNumber, type:PKPaymentSummaryItemType)

两者都没有默认值,但是您正在使用一个空的初始化程序进行初始化。 令人惊讶的是,没有错误或警告,它甚至出现在代码完成中。 所以我改变了初始化程序:

let item = PKPaymentSummaryItem(label: "Our Label",
                                amount: NSDecimalNumber(mantissa: UInt64(totalPrice),
                                                        exponent: -2,
                                                        isNegative: false))
request.paymentSummaryItems = [items]

if let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request) {
    applePayController.delegate = self
    present(applePayController, animated: true)
}

它可以工作(仅在设备上 - 不是模拟器)!

这让我很奇怪,所以我只是将您的项目从let更改为var并且它也可以正常工作。 我仍然会使用记录的初始化程序 go 。

如果您的PKPaymentRequest使用的商家 ID 未在 mobile.entitlements 中列出,则会发生这种情况。 或者,如果您的应用的配置文件未启用 MerchantID。

查看 Controller

  PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
  
  request.merchantIdentifier = "com.your.app.merchandId"

mobile.entitlements

<dict>
    <key>com.apple.developer.in-app-payments</key>
    <array>
        <string>com.your.app.merchandId</string>
    </array>
</dict>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM