簡體   English   中英

PKPaymentAuthorizationViewController 不調用委托

[英]PKPaymentAuthorizationViewController not calling delegate

我已經使用有效的 PKPaymentRequest 設置了一個 PKPaymentAuthorizationViewController,並使用有效的測試卡和送貨地址從沙箱登錄了一個帳戶。 我已將地區更改為美國,但沒有任何變化。 該應用程序具有所有有效的證書和權利。

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 沒有關閉,但它的 ui 被隱藏)。 如果我點擊“支付”,它會要求輸入密碼,但它會卡住處理。 在任何一種情況下都不會調用委托。

我的實現:

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;
}

無論我做什么,都不會調用這三種方法中的任何一種。 我已經檢查過並且委托設置正確。

任何的想法?

我現在也實現了 PKPaymentAuthorizationControllerDelegate 即使我沒有使用它並且它可以工作......

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM