Android中onActivityResult已废弃,如何获取Stripe支付结果?
Android中替代onActivityResult获取Stripe支付结果的方案
在Android中onActivityResult已被废弃,Stripe官方推荐使用Activity Result API作为替代方案来获取支付结果,以下是具体实现步骤和代码示例:
1. 初始化ActivityResultLauncher
在你的Activity或Fragment中,先声明并初始化用于接收Stripe支付结果的ActivityResultLauncher:
private var stripe: Stripe? = null // 声明支付结果回调启动器 private val stripePaymentLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> val data = result.data val resultCode = result.resultCode stripe?.onPaymentResult( requestCode = Stripe.DEFAULT_REQUEST_CODE, data = data, callback = object : ApiResultCallback<PaymentIntentResult> { override fun onError(e: Exception) { // 处理支付失败逻辑 e.printStackTrace() // 示例:提示用户支付出错 } override fun onSuccess(result: PaymentIntentResult) { // 处理支付成功逻辑 val paymentIntent = result.intent when (paymentIntent.status) { PaymentIntent.Status.SUCCEEDED -> { // 支付完成,执行后续业务逻辑 } PaymentIntent.Status.REQUIRES_PAYMENT_METHOD -> { // 需要用户重新选择支付方式 } else -> { // 处理其他支付状态 } } } } ) }
2. 修改confirmPayment调用逻辑
将原来直接传入Activity/Fragment的调用方式,改为使用stripePaymentLauncher启动支付流程:
fun confirmPayment() { stripe = Stripe(context = this, publishableKey = publishableKey) val paymentMethodCreateParams = PaymentMethodCreateParams.create(myDebitCard) val confirmPaymentIntent = ConfirmPaymentIntentParams.createWithPaymentMethodCreateParams( paymentMethodCreateParams = paymentMethodCreateParams, clientSecret = clientSecret ) // 使用启动器发起支付,替代原有的stripe?.confirmPayment(this, confirmPaymentIntent) stripe?.confirmPayment( confirmPaymentIntent, stripePaymentLauncher ) }
方案说明
- Activity Result API是AndroidX官方提供的
onActivityResult替代方案,解决了原回调代码分散、生命周期关联混乱的问题。 - 支付结果会直接回调到
stripePaymentLauncher的处理逻辑中,无需再重写onActivityResult方法,代码更集中易维护。
内容的提问来源于stack exchange,提问作者Suman Radhakrishnan
相关产品推荐
相关产品推荐

