pendo-io / pendo-mobile-sdk

Pendo captures product usage data, gathers user feedback, and lets you communicate in-app to onboard, educate, and guide users to value
https://www.pendo.io
Other
57 stars 2 forks source link

Android Pendo SDK version `2.22.2+` is suppressing ListView-based (and maybe other) crashes #67

Closed marius-bardan closed 1 year ago

marius-bardan commented 1 year ago

Platform + Version Android

SDK Version 33

Framework Android SDK

Describe the bug Throwing any exception from a AdapterView/OnItemClickListener, which should normally crash the app, is being swallowed by Pendo, effectively leaving the app not interactive.

To Reproduce Steps to reproduce the behavior:

  1. Go to 'sample-repo'
  2. Fill in MainActivity.initPendo.pendoAppKey with a valid Pendo API key
  3. Run the app & tap on a list item
  4. See error

Expected behavior The app should crash

Logs

2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E  java.lang.NullPointerException
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at com.example.pendosampleapp.MainActivity.onCreate$lambda$0(MainActivity.kt:30)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at com.example.pendosampleapp.MainActivity.$r8$lambda$K0mRFwhiLz-TlL0njJQ7-qUwnEs(Unknown Source:0)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at com.example.pendosampleapp.MainActivity$$ExternalSyntheticLambda0.onItemClick(Unknown Source:8)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at sdk.pendo.io.listeners.views.PendoOnItemClickListener.onItemClick(Unknown Source:218)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.widget.AdapterView.performItemClick(AdapterView.java:330)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.widget.AbsListView.performItemClick(AbsListView.java:1257)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.widget.AbsListView$PerformClick.run(AbsListView.java:3270)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.widget.AbsListView.onTouchUp(AbsListView.java:4248)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.widget.AbsListView.onTouchEvent(AbsListView.java:3989)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.View.dispatchTouchEvent(View.java:15003)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3115)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2788)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:500)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1905)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.app.Activity.dispatchTouchEvent(Activity.java:4263)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:458)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.View.dispatchPointerEvent(View.java:15262)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6654)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6454)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5910)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5967)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5933)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6098)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5941)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6155)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5914)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5967)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5933)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5941)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5914)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8996)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8947)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8916)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:9119)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:267)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.os.MessageQueue.nativePollOnce(Native Method)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.os.MessageQueue.next(MessageQueue.java:335)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.os.Looper.loopOnce(Looper.java:161)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.os.Looper.loop(Looper.java:288)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at android.app.ActivityThread.main(ActivityThread.java:7872)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at java.lang.reflect.Method.invoke(Native Method)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
2023-08-08 16:36:59.358 15856-15888 Pendo                   com.example.pendosampleapp           E      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

Sample Code Sample project

randmaayan commented 1 year ago

Thanks for reaching out. Issue reproduced and we found the source. we'll be working on a fix.

adiracu commented 1 year ago

To put a bit more perspective on this, having developed other SDKs before, I fully understand Pendo's initial reasoning of not wanting the SDK to crash client apps & getting your own crash reports (all SDKs want that).

But from the client's perspective, I'd rather have an option to completely disable any crash catching & reporting behaviour in the SDK, to avoid these types of bugs and other unforeseen ones.

  1. If we do end up with Pendo related crashes in production, we'll be sure to forward them your way.
  2. We are very picky with what SDKs we end up integrating in our apps. Having crash reports from 3rd party SDKs show up in our Crashlytics is a good metric we like to look at. Having all SDKs start hiding their crashes/unreliability doesn't inspire confidence.
adiracu commented 1 year ago

Hei, any update on this?

rotemelem6 commented 1 year ago

Hi @adiracu , the fix for the issue will be a part of our next version (2.23). We will keep you updated when it's released

shlomipendo commented 1 year ago

Hey @adiracu @marius-bardan This issue was resolved in our latest Android SDK version, 2.22.4, which was released today.