问题
I was looked through the apple guidelines but did not found anything about this question.
Additional info:
I have added Apple Pay button to app and hide it if there are no capabilities (e.g., cards) to pay with. But customer does not like it and wants some other approach. I think we may open wallet like asking user to add a card, but I am not sure what Apple guidelines think about it.
Is there any explicit recommendation about it?
回答1:
Here is Apple's guidelines on implementing Apple Pay.
Here is the relevant section: Using PKPaymentAuthorizationViewController methods
If
canMakePayments
returnsNO
, the device does not support Apple Pay. Do not display the Apple Pay button. Instead, fall back to another method of payment.If
canMakePayments
returnsYES
butcanMakePaymentsUsingNetworks
: returnsNO
, the device supports Apple Pay, but the user has not added a card for any of the requested networks. You can, optionally, display a payment setup button, prompting the user to set up his or her card. As soon as the user taps this button, initiate the process of setting up a new card (for example, by calling the openPaymentSetup method).To create an Apple Pay–branded button for initiating payment request on iOS 8.3 or later, use the PKPaymentButton class.
From the PKPaymentButton docs:
Provides a button that is used either to trigger payments through Apple Pay or to prompt the user to set up a card.
You can initialize it with a type setUp
.
When the user taps this button, call openPaymentSetup.
override func viewDidLoad() {
super.viewDidLoad()
var applePayButton: PKPaymentButton?
if !PKPaymentAuthorizationViewController.canMakePayments() {
// Apple Pay not supported
return
}
if !PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: [.masterCard]) {
// Apple Pay supported and payment not setup
applePayButton = PKPaymentButton.init(paymentButtonType: .setUp, paymentButtonStyle: .black)
applePayButton?.addTarget(self, action: #selector(self.setupPressed(_:)), for: .touchUpInside)
} else {
// Apple Pay supported and payment setup
applePayButton = PKPaymentButton.init(paymentButtonType: .buy, paymentButtonStyle: .black)
applePayButton?.addTarget(self, action: #selector(self.payPressed(_:)), for: .touchUpInside)
}
applePayButton?.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(applePayButton!)
applePayButton?.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
applePayButton?.widthAnchor.constraint(equalToConstant: 200).isActive = true
applePayButton?.heightAnchor.constraint(equalToConstant: 60).isActive = true
applePayButton?.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -20).isActive = true
}
@objc func payPressed(_ sender: PKPaymentButton){
// Start payment
}
@objc func setupPressed(_ sender: PKPaymentButton){
let passLibrary = PKPassLibrary()
passLibrary.openPaymentSetup()
}
}
来源:https://stackoverflow.com/questions/51727723/what-behaviour-is-pereferable-for-apple-pay-button-if-no-cards-in-the-wallet