【问题标题】:How to integrate Razorpay in SwiftUI without storyboard如何在没有情节提要的情况下将 Razorpay 集成到 SwiftUI 中
【发布时间】:2022-01-12 19:40:00
【问题描述】:
我正在考虑在 Xcode 中将 Razorpay 结账功能与 iOS 集成,并在 https://razorpay.com/docs/payment-gateway/ios-integration/standard/ 找到了官方文档。该文档有助于将 Razorpay 与 UIViewController 集成。我正在构建的 iOS 应用程序不使用情节提要,并且严格来说是 SwiftUI。我已经研究了将 UIViewController 合并到 SwiftUI 中的多种方法,这完全可以通过 UIViewRepresentable 实现,但代码结构使用
struct ComponentName: UIViewRepresentable{}
但适用于 iOS 的 Razorpay SDK 想要将 RazorpayPaymentCompletionProtocol 实现为类而不是结构。如何在严格的 SwiftUI 应用程序中使用它?
【问题讨论】:
标签:
ios
swiftui
xcode-storyboard
razorpay
xcode13.2
【解决方案1】:
您可以使用协调器来管理视图控制器,该协调器将RazorpayPaymentCompletionProtocol。
例子:
struct ComponentName: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> CheckoutViewController {
.init()
}
func updateUIViewController(_ uiViewController: CheckoutViewController, context: Context) { }
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, RazorpayPaymentCompletionProtocol {
let parent: ComponentName
typealias Razorpay = RazorpayCheckout
var razorpay: RazorpayCheckout!
init(_ parent: ComponentName) {
self.parent = parent
RazorpayCheckout.initWithKey(razorpayTestKey, andDelegate: self)
}
func onPaymentError(_ code: Int32, description str: String) {
print("error: ", code, str)
// self.presentAlert(withTitle: "Alert", message: str)
// parent.alert with message
}
func onPaymentSuccess(_ payment_id: String) {
print("success: ", payment_id)
// self.presentAlert(withTitle: "Success", message: "Payment Succeeded")
}
}
}
class CheckoutViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// self.showPaymentForm()
}
}