我已经按照苹果的指导方针进行了检查,但没有发现有关此问题的任何信息。
其他信息:
我已在应用程序中添加了Apple Pay按钮,如果没有可用的功能(例如卡),则将其隐藏。但是客户不喜欢它,并且希望使用其他方法。我认为我们可能像要求用户添加卡一样打开钱包,但是我不确定Apple指南对此有何看法。
对此有明确建议吗?
答案 0 :(得分:4)
这是苹果公司的guidelines on implementing Apple Pay.
以下是相关部分: 使用PKPaymentAuthorizationViewController方法
如果
canMakePayments
返回NO
,则设备不支持Apple Pay。不显示Apple Pay按钮。相反,请转而使用另一种付款方式。如果
canMakePayments
返回YES
但canMakePaymentsUsingNetworks
:返回NO
,则设备支持Apple Pay,但用户尚未为任何请求的网络添加卡。您可以选择显示付款设置按钮,提示用户设置他或她的卡。用户点击此按钮后,立即启动设置新卡的过程(例如,通过调用openPaymentSetup方法)。要创建Apple Pay品牌的按钮以在iOS 8.3或更高版本上启动付款请求,请使用PKPaymentButton类。
从PKPaymentButton文档:
提供一个按钮,用于通过以下方式触发付款 Apple Pay或提示用户设置卡。
您可以使用setUp
类型对其进行初始化。
用户点击此按钮时,呼叫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()
}
}