apptentive / apptentive-android

Apptentive Android SDK
http://www.apptentive.com
BSD 3-Clause "New" or "Revised" License
65 stars 64 forks source link

Exception while loading conversation #190

Closed gmbett closed 4 years ago

gmbett commented 4 years ago

Hi, We are using the latest SDK for Android (version 5.4.6) and we just noticed that the whole integration seems to be broken. Events reported by our app are not being sent.

When checking the logs I can see the following exception:

2019-10-17 13:41:02.309 22445-22516/com.swisscom.ngti.mycloud.testing E/Apptentive: [Apptentive Queue] Exception while loading conversation
2019-10-17 13:41:02.319 22445-22516/com.swisscom.ngti.mycloud.testing E/Apptentive: com.apptentive.android.sdk.storage.SerializerException: java.io.EOFException
        at com.apptentive.android.sdk.storage.EncryptedFileSerializer.deserialize(EncryptedFileSerializer.java:66)
        at com.apptentive.android.sdk.storage.FileSerializer.deserialize(FileSerializer.java:50)
        at com.apptentive.android.sdk.conversation.Conversation.loadConversationData(Conversation.java:438)
        at com.apptentive.android.sdk.conversation.ConversationManager.loadConversation(ConversationManager.java:432)
        at com.apptentive.android.sdk.conversation.ConversationManager.loadConversationFromMetadata(ConversationManager.java:264)
        at com.apptentive.android.sdk.conversation.ConversationManager.loadActiveConversationGuarded(ConversationManager.java:219)
        at com.apptentive.android.sdk.conversation.ConversationManager.loadActiveConversation(ConversationManager.java:186)
        at com.apptentive.android.sdk.ApptentiveInternal.start(ApptentiveInternal.java:516)
        at com.apptentive.android.sdk.ApptentiveInternal.access$200(ApptentiveInternal.java:80)
        at com.apptentive.android.sdk.ApptentiveInternal$1.execute(ApptentiveInternal.java:244)
        at com.apptentive.android.sdk.util.threading.DispatchTask.run(DispatchTask.java:39)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)
     Caused by: java.io.EOFException
        at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2342)
        at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2811)
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:805)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:302)
        at com.apptentive.android.sdk.storage.OverrideSerialVersionUIDObjectInputStream.<init>(OverrideSerialVersionUIDObjectInputStream.java:18)
        at com.apptentive.android.sdk.storage.EncryptedFileSerializer.deserialize(EncryptedFileSerializer.java:59)
        at com.apptentive.android.sdk.storage.FileSerializer.deserialize(FileSerializer.java:50) 
        at com.apptentive.android.sdk.conversation.Conversation.loadConversationData(Conversation.java:438) 
        at com.apptentive.android.sdk.conversation.ConversationManager.loadConversation(ConversationManager.java:432) 
        at com.apptentive.android.sdk.conversation.ConversationManager.loadConversationFromMetadata(ConversationManager.java:264) 
        at com.apptentive.android.sdk.conversation.ConversationManager.loadActiveConversationGuarded(ConversationManager.java:219) 
        at com.apptentive.android.sdk.conversation.ConversationManager.loadActiveConversation(ConversationManager.java:186) 
        at com.apptentive.android.sdk.ApptentiveInternal.start(ApptentiveInternal.java:516) 
        at com.apptentive.android.sdk.ApptentiveInternal.access$200(ApptentiveInternal.java:80) 
        at com.apptentive.android.sdk.ApptentiveInternal$1.execute(ApptentiveInternal.java:244) 
        at com.apptentive.android.sdk.util.threading.DispatchTask.run(DispatchTask.java:39) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.os.HandlerThread.run(HandlerThread.java:65) 
2019-10-17 13:41:02.329 22445-22516/com.swisscom.ngti.mycloud.testing E/Apptentive: [Apptentive Queue] [CONVERSATION] Exception while loading active conversation
2019-10-17 13:41:02.345 22445-22516/com.swisscom.ngti.mycloud.testing E/Apptentive: com.apptentive.android.sdk.conversation.ConversationLoadException: Unable to load conversation
        at com.apptentive.android.sdk.conversation.ConversationManager.loadActiveConversationGuarded(ConversationManager.java:231)
        at com.apptentive.android.sdk.conversation.ConversationManager.loadActiveConversation(ConversationManager.java:186)
        at com.apptentive.android.sdk.ApptentiveInternal.start(ApptentiveInternal.java:516)
        at com.apptentive.android.sdk.ApptentiveInternal.access$200(ApptentiveInternal.java:80)
        at com.apptentive.android.sdk.ApptentiveInternal$1.execute(ApptentiveInternal.java:244)
        at com.apptentive.android.sdk.util.threading.DispatchTask.run(DispatchTask.java:39)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)
     Caused by: com.apptentive.android.sdk.storage.SerializerException: java.io.EOFException
        at com.apptentive.android.sdk.storage.EncryptedFileSerializer.deserialize(EncryptedFileSerializer.java:66)
        at com.apptentive.android.sdk.storage.FileSerializer.deserialize(FileSerializer.java:50)
        at com.apptentive.android.sdk.conversation.Conversation.loadConversationData(Conversation.java:438)
        at com.apptentive.android.sdk.conversation.ConversationManager.loadConversation(ConversationManager.java:432)
        at com.apptentive.android.sdk.conversation.ConversationManager.loadConversationFromMetadata(ConversationManager.java:264)
        at com.apptentive.android.sdk.conversation.ConversationManager.loadActiveConversationGuarded(ConversationManager.java:219)
        at com.apptentive.android.sdk.conversation.ConversationManager.loadActiveConversation(ConversationManager.java:186) 
        at com.apptentive.android.sdk.ApptentiveInternal.start(ApptentiveInternal.java:516) 
        at com.apptentive.android.sdk.ApptentiveInternal.access$200(ApptentiveInternal.java:80) 
        at com.apptentive.android.sdk.ApptentiveInternal$1.execute(ApptentiveInternal.java:244) 
        at com.apptentive.android.sdk.util.threading.DispatchTask.run(DispatchTask.java:39) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.os.HandlerThread.run(HandlerThread.java:65) 
     Caused by: java.io.EOFException
        at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2342)
        at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2811)
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:805)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:302)
        at com.apptentive.android.sdk.storage.OverrideSerialVersionUIDObjectInputStream.<init>(OverrideSerialVersionUIDObjectInputStream.java:18)
        at com.apptentive.android.sdk.storage.EncryptedFileSerializer.deserialize(EncryptedFileSerializer.java:59)
        at com.apptentive.android.sdk.storage.FileSerializer.deserialize(FileSerializer.java:50) 
        at com.apptentive.android.sdk.conversation.Conversation.loadConversationData(Conversation.java:438) 
        at com.apptentive.android.sdk.conversation.ConversationManager.loadConversation(ConversationManager.java:432) 
        at com.apptentive.android.sdk.conversation.ConversationManager.loadConversationFromMetadata(ConversationManager.java:264) 
        at com.apptentive.android.sdk.conversation.ConversationManager.loadActiveConversationGuarded(ConversationManager.java:219) 
        at com.apptentive.android.sdk.conversation.ConversationManager.loadActiveConversation(ConversationManager.java:186) 
        at com.apptentive.android.sdk.ApptentiveInternal.start(ApptentiveInternal.java:516) 
        at com.apptentive.android.sdk.ApptentiveInternal.access$200(ApptentiveInternal.java:80) 
        at com.apptentive.android.sdk.ApptentiveInternal$1.execute(ApptentiveInternal.java:244) 
        at com.apptentive.android.sdk.util.threading.DispatchTask.run(DispatchTask.java:39) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.os.HandlerThread.run(HandlerThread.java:65) 
2019-10-17 13:41:02.387 22445-22516/com.swisscom.ngti.mycloud.testing W/Apptentive: [Apptentive Queue] [CONVERSATION] There is no active conversation. The SDK will be disabled until a conversation becomes active.

And of course after that any event that we want to report fails, like:

Apptentive: [Apptentive Queue] [CONVERSATION] Unable to engage 'app_launch' event: no active conversation.

This happens on a Samsung S7 (SM-G930F) with Android 8.0.0 but it seems it's happening on other devices as well as we are getting complains.

I also checked on a Pixel 3 with Android 10 and there it seems to be working fine.

Any idea what's wrong?

weeeBox commented 4 years ago

@gmbett, this could happen if the app crashed while Apptentive SDK was writing its data to the disk. We currently don't recover from this conditions and just lock the SDK.

gmbett commented 4 years ago

@weeeBox Is there a plan to add a way to recover from this error?

weeeBox commented 4 years ago

@gmbett, we're currently implementing a more efficient storage schema which would not suffer from these issues. Stay tuned!

gmbett commented 4 years ago

@weeeBox This issue also affects the iOS SDK... or is only related to Android?

weeeBox commented 4 years ago

This is more Android specific

CaseyApptentive commented 4 years ago

@gmbett Thanks for your patience! To be sure, could you try uninstalling + reinstalling your app on the test device? It should clear this issue up.

Let me know if you're having any further issues.

CaseyApptentive commented 4 years ago

@gmbett circling back. Let me know if this freed you up.

Thanks again for the help troubleshooting.

gmbett commented 4 years ago

Yes, uninstalling and reinstalling solves the issue.