我正在尝试实现Apple Provising(将卡添加到钱包),但我可以在实现的快速方面找出错误。问题是
Swift Compiler Error (Xcode): Type 'AppleMethods' does not conform to protocol 'PKAddPaymentPassViewControllerDelegate'
ppDelegate.swift:89:0 (这是它调用“扩展 AppleMethods: PKAddPaymentPassViewControllerDelegate”的时间
有谁知道如何解决吗?
这是我的代码:
class AppleMethods: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
required public init(coder aDecoder: NSCoder) {
faltalError("init(coder:) has not been implemented")
}
static func isPassKitAvailable() -> Bool {
let result = PKAddPaymentPassViewController.canAddPaymentPass()
return result
}
func initEnrollProcess() {
guard let configuration = PKAddPaymentPassRequestConfiguration(encryptionScheme: .ECC_V2) else {
// self.alert(message: "InApp enrollment configuration fails")
}
configuration.cardholderName = cardDetails["cardHolderName"]!
configuration.primaryAccountSuffix = cardDetails["bankCardNumber"]
configuration.localizedDescription = cardDetails["bankCardName"]
configuration.primaryAccountIdentifier = cardDetails["bankCardPanRefId"]
// configuration.paymentNetwork = .masterCard
guard let enrollViewController = PKAddPaymentPassViewController(requestConfiguration: configuration, delegate: self) else {
// self.alert(message: "InApp entrollment controller configuration fails")
return
}
enrollViewController.modalPresentationStyle = UIModalPresentationStyle.pageSheet;
present(enrollViewController, animated: true, completion: nil)
}
}
extension AppleMethods: PKAddPaymentPassViewControllerDelegate {
func addPaymentPassViewController(
_ controller: PKAddPaymentPassViewController,
generateRequestWithCertificateChain certificates: [Data],
nonce: Data, nonceSignature: Data,
completionHandler handler: @escaping (PKAddPaymentPassRequest) -> Void){
let certficateArray = certificates.map { $0.base64EncodedString() }
let interactor = AppleWalletInteractor()
interactor.execute(request: request) { response in
let request = PKAddPaymentPassRequest()
request.activationData = response.activationData
request.ephemeralPublicKey = response.ephemeralPublicKey
request.encryptedPassData = response.encryptedPassData
handler(request)
}
}
// func addPaymentPassViewController(
// _ controller: PKAddPaymentPassViewController,
// )
}
我发现这可能是一些拼写错误,但我可以找到任何东西。
您收到此错误是因为您尚未实施
func addPaymentPassViewController(_ controller: PKAddPaymentPassViewController,
didFinishAdding pass: PKPaymentPass?,
error: Error?) {
}
下面的代码在 Xcode 15 中对我来说编译得很好
class AppleMethods: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
required public init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
static func isPassKitAvailable() -> Bool {
let result = PKAddPaymentPassViewController.canAddPaymentPass()
return result
}
func initEnrollProcess() {
guard let configuration = PKAddPaymentPassRequestConfiguration(encryptionScheme: .ECC_V2) else {
// self.alert(message: "InApp enrollment configuration fails")
return
}
// configuration.cardholderName = cardDetails["cardHolderName"]!
// configuration.primaryAccountSuffix = cardDetails["bankCardNumber"]
// configuration.localizedDescription = cardDetails["bankCardName"]
// configuration.primaryAccountIdentifier = cardDetails["bankCardPanRefId"]
// configuration.paymentNetwork = .masterCard
guard let enrollViewController = PKAddPaymentPassViewController(requestConfiguration: configuration, delegate: self) else {
// self.alert(message: "InApp entrollment controller configuration fails")
return
}
enrollViewController.modalPresentationStyle = UIModalPresentationStyle.pageSheet;
present(enrollViewController, animated: true, completion: nil)
}
}
extension AppleMethods: PKAddPaymentPassViewControllerDelegate {
func addPaymentPassViewController(_ controller: PKAddPaymentPassViewController,
didFinishAdding pass: PKPaymentPass?,
error: Error?) {
}
func addPaymentPassViewController(
_ controller: PKAddPaymentPassViewController,
generateRequestWithCertificateChain certificates: [Data],
nonce: Data, nonceSignature: Data,
completionHandler handler: @escaping (PKAddPaymentPassRequest) -> Void){
let certficateArray = certificates.map { $0.base64EncodedString() }
// let interactor = AppleWalletInteractor()
// interactor.execute(request: request) { response in
// let request = PKAddPaymentPassRequest()
// request.activationData = response.activationData
// request.ephemeralPublicKey = response.ephemeralPublicKey
// request.encryptedPassData = response.encryptedPassData
// handler(request)
// }
}
}