PKPaymentAuthorizationViewController не вызывает делегата - PullRequest
1 голос
/ 03 февраля 2020

Я установил PKPaymentAuthorizationViewController с действительным PKPaymentRequest, вошел в учетную запись из Песочницы с действительной тестовой картой и адресом доставки . Я изменил регион на США, но ничего не изменилось. Приложение имеет все действующие сертификаты и права.

func getApplePayController(request: PKPaymentRequest) -> PKPaymentAuthorizationViewController? {
            guard let vc = PKPaymentAuthorizationViewController(paymentRequest: request) else {
                return nil
            }

            //Set ourselves as delegate to get callbacks on the transaction status
            vc.delegate = self

            //we keep a weak reference to the controller to be able to dismiss it if necessary
            self.applePayViewController = vc//This is weak

            return vc
        }

И представить:

//Show Apple Pay screen with configured PKPaymentRequest object
        guard let vc = getApplePayController(request: paymentRequest) else {
            dLog("Error instantiating Apple Pay screen")
            handleEventType(.status(.failed))
            return
        }

        assert(delegate != nil)
        assert(applePay.didAuthorize == false)
        assert(vc.delegate != nil)

        //disable swipe to dismiss
        if #available(iOS 13.0, *) {
            vc.isModalInPresentation = true
        }

        if var topController = UIApplication.shared.keyWindow?.rootViewController {
            while let presentedViewController = topController.presentedViewController {
                topController = presentedViewController
            }

            // topController should now be your topmost view controller
            topController.present(vc, animated: true, completion: nil)
        }

Появляется экран, если я нажимаю на кнопку Отмена все зависает. Если я нажимаю на фон, экран автоматически закрывается, но остальная часть представления не является интерактивной (PKPaymentAuthorizationViewController не закрывается, но его пользовательский интерфейс скрыт). Если я нажимаю «Оплатить», он запрашивает пин-код, и он зависает при обработке. Ни один из делегатов не вызывается ни в том, ни в другом случае.

Моя реализация:

public func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
print("Dismiss")
}

public func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController,
                                 didAuthorizePayment payment: PKPayment,
                                                  completion: @escaping (PKPaymentAuthorizationStatus) -> Void) {
           completion(.success)
           return;
}

@available(iOS 11.0, *)
        public func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController,
                                 didAuthorizePayment payment: PKPayment,
                                                     handler: @escaping (PKPaymentAuthorizationResult) -> Void) {
            handler(PKPaymentAuthorizationResult(status: .success, errors: nil))
           return;
}

Ни один из трех методов никогда не вызывается, независимо от того, что я делаю. Я проверил, и делегат настроен правильно.

Есть идеи?

1 Ответ

0 голосов
/ 03 февраля 2020

Я теперь также реализовал PKPaymentAuthorizationControllerDelegate, хотя я не использую его, и он работает ...

    public func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
    return
}
...