Быстрое падение Apple Pay; PKPaymentAuthorizationViewController = nil
Я пытаюсь внедрить Apple Pay в свое приложение. Я дважды установил свой идентификатор продавца и установил Stripe, Stripe-Apple Pay через CocoaPods. Каждый раз, когда я пытаюсь запустить приложение на моем устройстве, оно вылетает. Я добавил точки останова, чтобы попытаться понять, где происходит ошибка, и я вижу следующее, когда добираюсь до кодаapplePayController.delegate = self
request PKPaymentRequest 0x00000001700f3180 0x00000001700f3180
applePayController PKPaymentAuthorizationViewController! nil None
Затем приложение вылетает, и я получаю это сообщение об ошибке
function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded>
of Swift.(_fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) -> ()).(closure #2)
-> 0x100581474 <+44>: brk #0x1
Может кто-нибудь помочь мне разобраться, как решить эту проблему. Вот мой код
import UIKit
import PassKit
class DetailViewController: UIViewController {
let SupportedPaymentNetworks = [PKPaymentNetworkVisa, PKPaymentNetworkMasterCard, PKPaymentNetworkAmex]
let ApplePayMerchantID = "merchant.com.Flokk.FlokkV33"
var currentObject : PFObject?
@IBOutlet var EventName: UILabel!
@IBOutlet var EventTime: UILabel!
@IBOutlet var VenueName: UILabel!
@IBOutlet var Location: UILabel!
@IBOutlet var Description: UILabel!
@IBOutlet var EventImage: PFImageView!
@IBOutlet var PayButton: UIButton!
var ticketValue:NSDecimalNumber = 0.99
@IBAction func purchase(sender: AnyObject) {
let request = PKPaymentRequest()
let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request)
applePayController.delegate = self
//
presentViewController(applePayController, animated: true, completion: nil)
request.merchantIdentifier = ApplePayMerchantID
request.supportedNetworks = SupportedPaymentNetworks
request.merchantCapabilities = PKMerchantCapability.Capability3DS
request.countryCode = "US"
request.currencyCode = "USD"
request.paymentSummaryItems = [
PKPaymentSummaryItem(label: "Test Ticket", amount: ticketValue),
PKPaymentSummaryItem(label: "Flokk Event", amount: ticketValue)
]
}
override func viewDidLoad() {
super.viewDidLoad()
PayButton.hidden = !PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(SupportedPaymentNetworks)
if let object = currentObject {
EventName.text = object["EventName"] as? String
Description.text = object["EventDescription"] as? String
VenueName.text = object["EventVenueName"] as? String
Location.text = object["EventLocation"] as? String
Description.adjustsFontSizeToFitWidth = true
var initialImage = UIImage(named: "DidNotLoad")
EventImage.image = initialImage
if let parseEventPhoto = object["EventImage"] as? PFFile{
EventImage.file = parseEventPhoto
EventImage.loadInBackground()
}
}
}
}
extension DetailViewController: PKPaymentAuthorizationViewControllerDelegate {
func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController!, didAuthorizePayment payment: PKPayment!, completion: ((PKPaymentAuthorizationStatus) -> Void)!) {
completion(PKPaymentAuthorizationStatus.Success)
}
func paymentAuthorizationViewControllerDidFinish(controller: PKPaymentAuthorizationViewController!) {
controller.dismissViewControllerAnimated(true, completion: nil)
}
}
1 ответ
Решение
Попробуйте переместить:
let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request)
presentViewController(applePayController, animated: true, completion: nil)
в конце purchase(sender: AnyObject)
функция.
Другими словами, сначала создайте и настройте запрос платежа, а затем создайте PKPaymentAuthorizationViewController