安卓端PayPal Native Checkout SDK支付完成/取消后按钮无法渲染问题
问题解决方案
根因说明
PaymentButtonEligibility: eligibility: Error 报错是因为PayPal Native Checkout SDK内部会在单次支付流程结束后残留 eligibility 校验状态,没有自动重置,导致二次渲染按钮时校验失败无法正常显示。
修复步骤
- 将按钮初始化逻辑从
onCreate生命周期方法迁移到onResume中,每次页面回到前台时重新初始化按钮配置 - 在所有支付结束回调(
onApprove/onCancel/onError)中主动调用PayPalCheckout.reset()清空SDK内部缓存状态 - 优先将PayPal Native Checkout SDK升级到v0.12.0及以上版本,官方在该版本修复了部分场景下的状态残留问题
修改后参考代码
class TestActivity : AppCompatActivity() { private lateinit var binding: ActivityTestBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityTestBinding.inflate(layoutInflater) setContentView(binding.root) } override fun onResume() { super.onResume() setupPayPalButton() } private fun setupPayPalButton() { // 初始化前先重置SDK状态,避免历史残留影响 PayPalCheckout.reset() binding.btnPay.setup( createOrder = CreateOrder { createOrderActions -> val order = Order( intent = OrderIntent.CAPTURE, appContext = AppContext( userAction = UserAction.PAY_NOW ), purchaseUnitList = listOf( PurchaseUnit( amount = Amount( currencyCode = CurrencyCode.MYR, value = "12" ) ) ) ) createOrderActions.create(order) }, onApprove = OnApprove { approval -> approval.orderActions.capture { captureOrderResult -> Log.i("CaptureOrder", "CaptureOrderResult: $captureOrderResult") // 支付完成后重置状态 PayPalCheckout.reset() } }, onCancel = OnCancel { Log.i("OnCancel", "Buyer canceled the PayPal experience.") // 取消支付后重置状态 PayPalCheckout.reset() }, onError = OnError { errorInfo -> Log.i("OnError", "Error: $errorInfo") // 支付报错后重置状态 PayPalCheckout.reset() } ) } }
内容的提问来源于stack exchange,提问作者Jin Yuan
相关产品推荐
相关产品推荐

