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)

Most upvoted comments

@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, 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 JobCancellationException being thrown. We will take a look into getting a fix out, thanks again!