iOS ApplePay PKPaymentAuthorizationViewController не отображается в Xcode11 / iOS 13 - PullRequest
4 голосов
/ 25 октября 2019

В нашем приложении 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)
        }

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Я столкнулся с той же проблемой, когда Apple Pay внезапно перестала работать в нашем приложении. Мы также поддерживаем это, по крайней мере, наполовину год.

Используя последний XCode (XCode 11.2, Beta 2 (11B44)), кажется, он снова работает.

I 'Я предполагаю, что это была ошибка XCode тогда. Даже при том, что это не перечислено в примечаниях к выпуску XCode для XCode 11.1 или XCode 11.2 бета 2 .

0 голосов
/ 01 ноября 2019

Я вставил ваш фрагмент в свое приложение, в котором используется 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 и это тоже работает. Я бы все равно пошел с документированным инициализатором.

...