簡體   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