Braintree Drop-In 使用 SwiftUI

Posted

技术标签:

【中文标题】Braintree Drop-In 使用 SwiftUI【英文标题】:Braintree Drop-In using SwiftUI 【发布时间】:2019-12-05 01:48:39 【问题描述】:

我正在尝试使用 Braintree 设置付款,但 Braintree 尚不支持 SwiftUI,因此我必须将其与 UIKit 集成。我使用UIViewControllerRepresentable 创建了一个包装器,并使用sheet 函数将其呈现为模态;但是,它并没有按预期工作,它似乎正在打开两个模态。

我打开modal时的画面:

这是我的包装:

import SwiftUI
import BraintreeDropIn

struct BTDropInRepresentable: UIViewControllerRepresentable 
    var authorization: String
    var handler: BTDropInControllerHandler

    init(authorization: String, handler: @escaping BTDropInControllerHandler) 
        self.authorization = authorization
        self.handler = handler
    

    func makeUIViewController(context: Context) -> BTDropInController 
        let bTDropInController = BTDropInController(authorization: authorization, request: BTDropInRequest(), handler: handler)!
        return bTDropInController
    

    func updateUIViewController(_ uiViewController: BTDropInController, context: UIViewControllerRepresentableContext<BTDropInRepresentable>) 
    

这是我试图打开模式的地方:

Button(action: 
    self.checkout = true
) 
    HStack 
        Spacer()
        Text("Checkout")
            .fontWeight(.bold)
            .font(.body)
        Spacer()
    
    .padding(.vertical, 12)
    .foregroundColor(.white)
    .background(Color.blue)
.sheet(isPresented: self.$checkout) 
    BTDropInRepresentable(authorization: self.token!, handler:   (controller, result, error) in
                       if (error != nil) 
                           print("ERROR")
                        else if (result?.isCancelled == true) 
                           print("CANCELLED")
                        else if result != nil 
                        print("SUCCESS")
                           // Use the BTDropInResult properties to update your UI
                           // result.paymentOptionType
                           // result.paymentMethod
                           // result.paymentIcon
                           // result.paymentDescription
            
        controller.dismiss(animated: true, completion: nil)
    )

有没有人在 SwiftUI 或类似情况下使用过 Braintree?我做错了什么或忘记了什么? 我知道为 Braintree 结帐编写自己的视图是一种选择,但我想避免这种情况。

谢谢!

【问题讨论】:

【参考方案1】:

看看您收到的错误,我敢打赌它与您需要添加的自定义 URL 方案有关:

注册一个 URL 类型

https://developers.braintreepayments.com/guides/paypal/client-side/ios/v4

您还需要设置您的直接付款方式,这些都在我链接的指南中有详细说明。

【讨论】:

谢谢!但我使用信用卡付款,所以如果这真的相关,则没有。 @MorizMartiner 好的,但我很确定您仍然需要实现 BTDropInResult 结果值,即使信用卡显示在弹出窗口中。

以上是关于Braintree Drop-In 使用 SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章

Braintree iOS Drop-in Payment UI 定制

iOS Swift 中的 Braintree Drop-In:在哪里获取变量 PaymentMethodNonce:

Braintree - 插入式 UI - Apple Pay - Swift 3

drop-in

Adyen Apple Pay with Drop-In on web click 不起作用

java 适用于Android CountDownTimer类的Drop-in替代方案,但您可以在onTick中取消。