Iterable / iterable-android-sdk

Iterable's Android SDK. Receive and track pushes to Iterable from your Android app.
https://iterable.com/
MIT License
30 stars 29 forks source link

Started Seeing Crashes after upgrading to 3.4.10 #481

Closed AurimasSikorskas closed 8 months ago

AurimasSikorskas commented 1 year ago

Started seeing these crashes after upgrading to iterable SDK to the 3.4.10. Both are thrown when initialising the IterableAPI component. it affects about 0.03% of users that updated to the new version (the version with updated SDK was released on December 1st)

first one ~11 users, ~28 total crashes mostly Galaxy S22 and Galaxy S22 Ultra devices, and few Pixel 6/7 image

Caused by com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).
       at com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite.parsePartialFrom(GeneratedMessageLite.java:1566)
       at com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite.parseFrom(GeneratedMessageLite.java:1664)
       at com.google.crypto.tink.proto.Keyset.parseFrom(Keyset.java:957)
       at com.google.crypto.tink.integration.android.SharedPrefKeysetReader.read(SharedPrefKeysetReader.java:84)
       at com.google.crypto.tink.CleartextKeysetHandle.read(CleartextKeysetHandle.java:58)
       at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.read(AndroidKeysetManager.java:328)
       at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewKeyset(AndroidKeysetManager.java:287)
       at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:238)
       at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:123)
       at com.iterable.iterableapi.IterableKeychain.<init>(IterableKeychain.kt:20)
       at com.iterable.iterableapi.IterableApi.getKeychain(IterableApi.java:138)
       at com.iterable.iterableapi.IterableApi.migrateAuthDataFromSharedPrefsToKeychain(IterableApi.java:392)
       at com.iterable.iterableapi.IterableApi.updateSDKVersion(IterableApi.java:380)
       at com.iterable.iterableapi.IterableApi.initialize(IterableApi.java:556)
       at app.dogo.com.dogo_android.di.AppModuleKt$appModule$1$47.invoke(appModule.kt:233)
       at app.dogo.com.dogo_android.di.AppModuleKt$appModule$1$47.invoke(appModule.kt:229)
       at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:54)
       at org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46)
       at org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53)
       at org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:51)
       at org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:20)
       at org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:51)
       at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:111)
       at org.koin.core.scope.Scope.resolveValue(Scope.kt:255)
       at org.koin.core.scope.Scope.resolveInstance(Scope.kt:242)
       at org.koin.core.scope.Scope.get(Scope.kt:205)
       at org.koin.core.scope.Scope.get$default(Scope.java:131)
       at app.dogo.com.dogo_android.service.App.onCreate(App.kt:150)
       at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1211)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7588)
       at android.app.ActivityThread.access$1700(ActivityThread.java:315)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2286)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:226)
       at android.os.Looper.loop(Looper.java:313)
       at android.app.ActivityThread.main(ActivityThread.java:8751)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

Second ~2 users, ~10 total crashes all in the background

Caused by java.security.KeyStoreException: the master key android-keystore://_androidx_security_master_key_ exists but is unusable
       at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewMasterKey(AndroidKeysetManager.java:275)
       at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:236)
       at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:123)
       at com.iterable.iterableapi.IterableKeychain.<init>(IterableKeychain.kt:20)
       at com.iterable.iterableapi.IterableApi.getKeychain(IterableApi.java:138)
       at com.iterable.iterableapi.IterableApi.migrateAuthDataFromSharedPrefsToKeychain(IterableApi.java:392)
       at com.iterable.iterableapi.IterableApi.updateSDKVersion(IterableApi.java:380)
       at com.iterable.iterableapi.IterableApi.initialize(IterableApi.java:556)
       at app.dogo.com.dogo_android.di.AppModuleKt$appModule$1$47.invoke(appModule.kt:233)
       at app.dogo.com.dogo_android.di.AppModuleKt$appModule$1$47.invoke(appModule.kt:229)
       at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:54)
       at org.koin.core.instance.SingleInstanceFactory.create(SingleInstanceFactory.kt:46)
       at org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:53)
       at org.koin.core.instance.SingleInstanceFactory$get$1.invoke(SingleInstanceFactory.kt:51)
       at org.koin.mp.KoinPlatformTools.synchronized(KoinPlatformTools.kt:20)
       at org.koin.core.instance.SingleInstanceFactory.get(SingleInstanceFactory.kt:51)
       at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core(InstanceRegistry.kt:111)
       at org.koin.core.scope.Scope.resolveValue(Scope.kt:255)
       at org.koin.core.scope.Scope.resolveInstance(Scope.kt:242)
       at org.koin.core.scope.Scope.get(Scope.kt:205)
       at org.koin.core.scope.Scope.get$default(Scope.java:131)
       at app.dogo.com.dogo_android.service.App.onCreate(App.kt:150)
       at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5579)
       at android.app.ActivityThread.-wrap2(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1671)
       at android.os.Handler.dispatchMessage(Handler.java:110)
       at android.os.Looper.loop(Looper.java:203)
       at android.app.ActivityThread.main(ActivityThread.java:6327)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
Ayyanchira commented 1 year ago

Thanks for reporting this issue @AurimasSikorskas! Will have it looked soon.

Any specifics/settings with these devices or profiles? Did all Pixel 6/7 and Samsung 22s had problems or just few of them? Please update if you get any pointers to repro the scenario.

AurimasSikorskas commented 1 year ago

hey @Ayyanchira ,

So we were not able to reproduce it on any of our devices, and none of the affected devices had their user ids tracked so can't get more info about them.

And I just noticed that while most crashes had empty logs in crash analytics, few of them had a single os_update event.

it's an auto-tracked firebase analytics event, it's tracked when the device operating system is updated to a new version.

Atul-RB commented 1 year ago

Seeing same issue in S21-5G/ Google Pixel4. Once you clear app cache it works without any issue(not a fix). Common pattern of crash observed is in Android13

Ayyanchira commented 1 year ago

Thank you for reporting the crashes. We have updated the 3.4.10 release tag with warning. We're investigating the issue. In the meantime, please test thoroughly. If you see crashes, revert to version 3.4.9

fegan104 commented 8 months ago

Sounds like this was fixed in release 3.4.11 https://github.com/Iterable/iterable-android-sdk/releases/tag/3.4.11

To work around a known Android issue that can cause crashes when creating EncryptedSharedPreferences, we've upgraded androidx.security.crypto from version 1.0.0 to 1.1.0-alpha04. When EncryptedSharedPreferences cannot be created, the SDK now uses SharedPreferences (unencrypted).

AurimasSikorskas commented 8 months ago

Yes, can validate it, we updated our app a few months back to the latest version, and we haven't seen any crashes.