braintree_android
braintree_android copied to clipboard
Crash during 3DS when Android kills the app
General information
- SDK/Library version:
4.14.0
(tested as reproducible also in4.15.0
) - Environment: Sandbox and Production
- Android Version and Device: doesn't matter
- Braintree dependencies:
"com.braintreepayments.api:three-d-secure:4.14.0"
Issue description
The issue appears during a 3DS checkout. If user put the app in background and Android kills the app's process, when user returns to 3DS screen and proceed with 3DS the app crashes.
Step to reproduce
It's reproducible using Demo app:
- enable 3D secure from Settings;
- start using a credit card;
- fill the form and click on purchase;
- when 3DS screen appears, put the app in background;
- emulate an Android kill process (run
am kill com.braintreepayments.demo
in an adb shell, or tap on Terminate Application from logcat in AS); - reopen the app from multitasking pane;
- complete 3DS checkout.
- crash occurs.
https://user-images.githubusercontent.com/43886303/187188130-bed1649e-21a2-4968-83de-355c33eb904e.mov
Stack trace
2022-08-29 12:55:34.563 8901-8901/com.braintreepayments.demo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.braintreepayments.demo, PID: 8901
java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.cardinalcommerce.a.configure.init' on a null object reference
at com.cardinalcommerce.a.setEditableFactory.init(:2082)
at com.cardinalcommerce.a.setOnEditorActionListener.Cardinal(:38564)
at com.cardinalcommerce.a.setOnEditorActionListener$7.onClick(:389)
at android.view.View.performClick(View.java:7441)
at android.view.View.performClickInternal(View.java:7418)
at android.view.View.access$3700(View.java:835)
at android.view.View$PerformClick.run(View.java:28676)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
2022-08-29 12:55:34.564 8901-8901/com.braintreepayments.demo E/Exception: Uncaught Exception
java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.cardinalcommerce.a.configure.init' on a null object reference
at com.cardinalcommerce.a.setEditableFactory.init(:2082)
at com.cardinalcommerce.a.setOnEditorActionListener.Cardinal(:38564)
at com.cardinalcommerce.a.setOnEditorActionListener$7.onClick(:389)
at android.view.View.performClick(View.java:7441)
at android.view.View.performClickInternal(View.java:7418)
at android.view.View.access$3700(View.java:835)
at android.view.View$PerformClick.run(View.java:28676)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
2022-08-29 12:55:35.148 8949-8949/com.braintreepayments.demo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.braintreepayments.demo, PID: 8949
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.braintreepayments.demo/com.braintreepayments.api.ThreeDSecureActivity}: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.cardinalcommerce.a.configure.init' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3635)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.cardinalcommerce.a.configure.init' on a null object reference
at com.cardinalcommerce.cardinalmobilesdk.Cardinal.cca_continue(:21082)
at com.braintreepayments.api.CardinalClient.continueLookup(CardinalClient.java:44)
at com.braintreepayments.api.ThreeDSecureActivity.onCreateInternal(ThreeDSecureActivity.java:39)
at com.braintreepayments.api.ThreeDSecureActivity.onCreate(ThreeDSecureActivity.java:28)
at android.app.Activity.performCreate(Activity.java:8051)
at android.app.Activity.performCreate(Activity.java:8031)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3608)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Hey @alecarnevale thanks for using the Braintree SDK for Android. We're working with Cardinal, our third-party MPI provider to resolve some issues related to Android 13.
In order to properly triage this issue, can you confirm that the same error occurs on a device/emulator running Android 12 or lower?
can you confirm that the same error occurs on a device/emulator running Android 12 or lower?
Hi @sshropshire Yes, the error occurs for devices running Android 12 and lower.
@alecarnevale ah my apoligies, I just noticed this is related directly related to process kill. I am able to reproduce this is specific to 3DS v2. I've notified our 3rd-party provider, we'll provide more details here as they become available.
Hi @sshropshire, any update on this?
Hi @pier1287 thanks for your patience. We've notified Cardinal once again and we're waiting to hear back on next steps.
I don't want to spam you, but hoping to help you prioritize this, I can add I also have this issue.
@dcampogiani no worries. We appreciate all feedback, especially if we can forward it to Cardinal.
Hi @sshropshire , Many of our users are also affected by this. Would be great if Cardinal solves it asap.
Hi @SirLordPouya thanks for adding feedback. Cardinal has acknowledged the issue and is working on a set of next steps.