stripe-android: [BUG] Crash when calling PaymentLauncher.confirm(params:)
Summary
When trying to use the PaymentLauncher to confirm a payment, it crashes the app.
Code to reproduce
paymentLauncher.confirm(confirmParams)
Android version
Using Android 12, happening on Stripe SDK versions 17+
Impacted devices
Happens on all devices tried on.
Installation method
Gradle
Dependency Versions
kotlin: 1.6.10 stripe-android: 19.3.0 Android Gradle Plugin: 7.1.2 Gradle: 7.3.3
SDK classes
PaymentLauncher
Video
Other information
The payment intent in Stripe dashboard indicates that the payment intent was successfully confirmed, but we crash before we receive the callback.
Stack trace:
02-28 11:54:28.177 7422 7422 E AndroidRuntime: FATAL EXCEPTION: main
02-28 11:54:28.177 7422 7422 E AndroidRuntime: Process: com.lightspeed.xseries.dev, PID: 7422
02-28 11:54:28.177 7422 7422 E AndroidRuntime: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = kotlinx.coroutines.JobCancellationException)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.Parcel.writeSerializable(Parcel.java:1850)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at com.stripe.android.payments.paymentlauncher.PaymentResult$Failed.writeToParcel(Unknown Source:10)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.Parcel.writeParcelable(Parcel.java:1818)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.Parcel.writeValue(Parcel.java:1724)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.Parcel.writeArrayMapInternal(Parcel.java:945)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1584)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.Bundle.writeToParcel(Bundle.java:1253)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.Parcel.writeBundle(Parcel.java:1014)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.content.Intent.writeToParcel(Intent.java:11155)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.app.IActivityTaskManager$Stub$Proxy.finishActivity(IActivityTaskManager.java:4874)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.app.Activity.finish(Activity.java:6285)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.app.Activity.finish(Activity.java:6309)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at com.stripe.android.payments.paymentlauncher.PaymentLauncherConfirmationActivity.finish(PaymentLauncherConfirmationActivity.kt:89)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at com.stripe.android.payments.paymentlauncher.PaymentLauncherConfirmationActivity.finishWithResult(PaymentLauncherConfirmationActivity.kt:108)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at com.stripe.android.payments.paymentlauncher.PaymentLauncherConfirmationActivity.$r8$lambda$CfpgStE7oOr92cQhCPbhChZ-Eio(Unknown Source:0)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at com.stripe.android.payments.paymentlauncher.PaymentLauncherConfirmationActivity$$ExternalSyntheticLambda0.onChanged(Unknown Source:4)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at androidx.lifecycle.LiveData$1.run(LiveData.java:93)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:883)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:100)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.Looper.loop(Looper.java:237)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8107)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: Caused by: java.io.NotSerializableException: kotlinx.coroutines.SupervisorJobImpl
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
02-28 11:54:28.177 7422 7422 E AndroidRuntime: at android.os.Parcel.writeSerializable(Parcel.java:1845)
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 25 (12 by maintainers)
@anandkumarnyc @keithmacklin @reiaz-gafar hi folks, https://github.com/stripe/stripe-android/pull/4855 was merged. Please be on the lookout for a release this Monday.
@anandkumarnyc @keithmacklin @reiaz-gafar here is a potential workaround PR up: https://github.com/stripe/stripe-android/pull/4855
@anandkumarnyc, @keithmacklin, @reiaz-gafar, thanks for the follow up. I am consulting with the team to see if we can remove the force portrait mode.
@reiaz-gafar Thank you so much for the detailed responses! This was extremely valuable information and we have found the issue. This issue seems to happen on landscape mode and not portrait mode. There is a configuration change which causes the
JobCancellationExceptionbeing thrown. We will take a look into getting a fix out, thanks again!